]> granicus.if.org Git - clang/log
clang
12 years agoUse several weighted factors to determine typo candidate viablity.
Kaelyn Uhrain [Tue, 14 Feb 2012 18:56:48 +0000 (18:56 +0000)]
Use several weighted factors to determine typo candidate viablity.

Replace the simple Levenshtein edit distance for typo correction
candidates--and the hacky way adding namespace qualifiers would affect
the edit distance--with a synthetic "edit distance" comprised of several
factors and their relative weights. This also allows the typo correction
callback object to convey more information about the viability of a
correction candidate than simply viable or not viable.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150495 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoSimplify and robustify lambda PCH test
Douglas Gregor [Tue, 14 Feb 2012 18:47:12 +0000 (18:47 +0000)]
Simplify and robustify lambda PCH test

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150493 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoImplement AST (de-)serialization for lambda expressions.
Douglas Gregor [Tue, 14 Feb 2012 17:54:36 +0000 (17:54 +0000)]
Implement AST (de-)serialization for lambda expressions.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150491 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agomore modern objc translator. Focusing on metadata for methods.
Fariborz Jahanian [Tue, 14 Feb 2012 17:19:02 +0000 (17:19 +0000)]
more modern objc translator. Focusing on metadata for methods.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150490 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoinclude clang's config.h unconditionally (v2)
Dylan Noblesmith [Tue, 14 Feb 2012 15:54:49 +0000 (15:54 +0000)]
include clang's config.h unconditionally (v2)

And remove HAVE_CLANG_CONFIG_H, now that the header is generated
in the autoconf build, too.

Reverts r149571/restores r149504, now that config.h is generated
correctly by LLVM's configure in all build configurations.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150487 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoUse a simpler (and more efficient) pattern to pad vectors.
Benjamin Kramer [Tue, 14 Feb 2012 12:06:21 +0000 (12:06 +0000)]
Use a simpler (and more efficient) pattern to pad vectors.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150475 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoFix crash-on-invalid for 'operator int[]()' in C++11.
David Blaikie [Tue, 14 Feb 2012 09:00:46 +0000 (09:00 +0000)]
Fix crash-on-invalid for 'operator int[]()' in C++11.

Signed off by Richard Smith.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150464 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoFix use-after-free introduced by me being an idiot.
Ted Kremenek [Tue, 14 Feb 2012 06:54:46 +0000 (06:54 +0000)]
Fix use-after-free introduced by me being an idiot.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150461 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoRemove useless if statement.
Eli Friedman [Tue, 14 Feb 2012 03:54:45 +0000 (03:54 +0000)]
Remove useless if statement.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150459 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoAdd a coverage test for lambda expression IRGen.
Eli Friedman [Tue, 14 Feb 2012 03:07:59 +0000 (03:07 +0000)]
Add a coverage test for lambda expression IRGen.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150458 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoImplement new DiagnosticsRenderer that packages notes retrieved by clang_getDiagnosti...
Ted Kremenek [Tue, 14 Feb 2012 02:46:03 +0000 (02:46 +0000)]
Implement new DiagnosticsRenderer that packages notes retrieved by clang_getDiagnosticSetFromTU() as
child diagnostics of primary diagnostics.  By using the DiagnosticRenderer, these Diagnostics now
match with those generated for serialized diagnostics.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150456 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoRefactor DiagnosticRenderer and SDiagsRenderer to have some functionality
Ted Kremenek [Tue, 14 Feb 2012 02:46:00 +0000 (02:46 +0000)]
Refactor DiagnosticRenderer and SDiagsRenderer to have some functionality
pulled into DiagnosticNoteRenderer, and common DiagnosticRenderer that
assumes that all custom diagnostic messages are notes.  Also extend
DiagnosticRenderer to work with StoredDiagnostics in preparation for
subsequent changes.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150455 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoAdd helper methods to StoredDiagnostic.
Ted Kremenek [Tue, 14 Feb 2012 02:43:12 +0000 (02:43 +0000)]
Add helper methods to StoredDiagnostic.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150454 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoFix another issue introduced by the proposed wording for core issue 1358: since
Richard Smith [Tue, 14 Feb 2012 02:33:50 +0000 (02:33 +0000)]
Fix another issue introduced by the proposed wording for core issue 1358: since
the instantiation of a constexpr function temploid is now always constexpr, a
defaulted constexpr function temploid is often ill-formed by the rule in
[dcl.fct.def.default]p2 that an explicitly-defaulted constexpr function must
have a constexpr implicit definition. To avoid making loads of completely
reasonable code ill-formed, do not apply that rule to templates.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150453 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoImplement IRGen of lambda expressions which capture arrays.
Eli Friedman [Tue, 14 Feb 2012 02:31:03 +0000 (02:31 +0000)]
Implement IRGen of lambda expressions which capture arrays.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150452 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoRefactor out new function EmitInitializerForField from EmitMemberInitializer. The...
Eli Friedman [Tue, 14 Feb 2012 02:15:49 +0000 (02:15 +0000)]
Refactor out new function EmitInitializerForField from EmitMemberInitializer.  The new function will be used to initialize the fields of lambda expressions.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150451 91177308-0d34-0410-b5e6-96231b3b80d8

12 years ago[analyzer] Malloc Checker: realloc: add dependency between the symbols
Anna Zaks [Tue, 14 Feb 2012 00:26:13 +0000 (00:26 +0000)]
[analyzer] Malloc Checker: realloc: add dependency between the symbols
in realloc map.

If there is no dependency, the reallocated ptr will get garbage
collected before we know that realloc failed, which would lead us to
missing a memory leak warning.

Also added new test cases, which we can handle now.
Plus minor cleanups.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150446 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoSimple test ensuring that we perform direct initialization when copy-capturing in...
Douglas Gregor [Tue, 14 Feb 2012 00:03:38 +0000 (00:03 +0000)]
Simple test ensuring that we perform direct initialization when copy-capturing in lambdas

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150442 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoLink together the call operator produced from transforming a lambda
Douglas Gregor [Tue, 14 Feb 2012 00:00:48 +0000 (00:00 +0000)]
Link together the call operator produced from transforming a lambda
expression with the original call operator, so that we don't try to
separately instantiate the call operator. Test and tweak a few more
bits for template instantiation of lambda expressions.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150440 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoMark the cxa_guard_{abort,acquire,release} functions nounwind.
Nick Lewycky [Mon, 13 Feb 2012 23:45:02 +0000 (23:45 +0000)]
Mark the cxa_guard_{abort,acquire,release} functions nounwind.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150435 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoDeal with a horrible C++11 special case. If a non-literal type has a constexpr
Richard Smith [Mon, 13 Feb 2012 22:16:19 +0000 (22:16 +0000)]
Deal with a horrible C++11 special case. If a non-literal type has a constexpr
constructor, and that constructor is used to initialize an object of static
storage duration such that all members and bases are initialized by constant
expressions, constant initialization is performed. In this case, the object
can still have a non-trivial destructor, and if it does, we must emit a dynamic
initializer which performs no initialization and instead simply registers that
destructor.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150419 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoAdd a subgroup of -Wreturn-type, -Wreturn-type-c-linkage.
Matt Beaumont-Gay [Mon, 13 Feb 2012 22:04:08 +0000 (22:04 +0000)]
Add a subgroup of -Wreturn-type, -Wreturn-type-c-linkage.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150418 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoIntroduce support for template instantiation of lambda
Douglas Gregor [Mon, 13 Feb 2012 22:00:16 +0000 (22:00 +0000)]
Introduce support for template instantiation of lambda
expressions. This is mostly a simple refact, splitting the main "start
a lambda expression" function into smaller chunks that are driven
either from the parser (Sema::ActOnLambdaExpr) or during AST
transformation (TreeTransform::TransformLambdaExpr). A few minor
interesting points:

  - Added new entry points for TreeTransform, so that we can
  explicitly establish the link between the lambda closure type in the
  template and the lambda closure type in the instantiation.
  - Added a bit into LambdaExpr specifying whether it had an explicit
  result type or not. We should have had this anyway.

This code is 'lightly' tested.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150417 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agomodern objc translator. More ivar rewrite work.
Fariborz Jahanian [Mon, 13 Feb 2012 21:34:45 +0000 (21:34 +0000)]
modern objc translator. More ivar rewrite work.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150415 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoobjc modern translator. ivar offset symbols.
Fariborz Jahanian [Mon, 13 Feb 2012 20:59:02 +0000 (20:59 +0000)]
objc modern translator. ivar offset symbols.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150413 91177308-0d34-0410-b5e6-96231b3b80d8

12 years ago[analyzer] Malloc Checker: realloc: correct the way we are handing the
Anna Zaks [Mon, 13 Feb 2012 20:57:07 +0000 (20:57 +0000)]
[analyzer] Malloc Checker: realloc: correct the way we are handing the
case when size is 0.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150412 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoAdd a script that produces a list of all diagnostics that are defined in
Dmitri Gribenko [Mon, 13 Feb 2012 20:21:52 +0000 (20:21 +0000)]
Add a script that produces a list of all diagnostics that are defined in
Diagnostic*.td files but not used in sources.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150410 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoRemove unused diagnostics from include/clang/Basic/Diagnostic*.td files.
Dmitri Gribenko [Mon, 13 Feb 2012 20:13:24 +0000 (20:13 +0000)]
Remove unused diagnostics from include/clang/Basic/Diagnostic*.td files.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150409 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoDon't route explicit construction via list-initialization through the functional...
Sebastian Redl [Mon, 13 Feb 2012 19:55:43 +0000 (19:55 +0000)]
Don't route explicit construction via list-initialization through the functional cast code path. It sometimes does the wrong thing, produces horrible error messages, and is just unnecessary.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150408 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoSink variable into assert
Matt Beaumont-Gay [Mon, 13 Feb 2012 19:29:45 +0000 (19:29 +0000)]
Sink variable into assert

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150407 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoobjective-c translator: more rewriting of ivar types
Fariborz Jahanian [Mon, 13 Feb 2012 18:57:49 +0000 (18:57 +0000)]
objective-c translator: more rewriting of ivar types
into a c-type which closely matches the objective-c type.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150406 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoWhen generating diagnostic information due to a clang failure, allow multiple
Chad Rosier [Mon, 13 Feb 2012 18:16:28 +0000 (18:16 +0000)]
When generating diagnostic information due to a clang failure, allow multiple
-arch options if the're all the same.

Patch by Jeremy Huddleston.
rdar://10849701

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150403 91177308-0d34-0410-b5e6-96231b3b80d8

12 years ago[analyzer] Malloc checker: rework realloc handling:
Anna Zaks [Mon, 13 Feb 2012 18:05:39 +0000 (18:05 +0000)]
[analyzer] Malloc checker: rework realloc handling:

1) Support the case when realloc fails to reduce False Positives. (We
essentially need to restore the state of the pointer being reallocated.)

2) Realloc behaves differently under special conditions (from pointer is
null, size is 0). When detecting these cases, we should consider
under-constrained states (size might or might not be 0). The
old version handled this in a very hacky way. The code did not
differentiate between definite and possible (no consideration for
under-constrained states). Further, after processing each special case,
the realloc processing function did not return but chained to the next
special case processing. So you could end up in an execution in which
you first see the states in which size is 0 and realloc ~ free(),
followed by the states corresponding to size is not 0 followed by the
evaluation of the regular realloc behavior.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150402 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoSplit the storage of lambda information between the LambdaExpr and the
Douglas Gregor [Mon, 13 Feb 2012 17:20:40 +0000 (17:20 +0000)]
Split the storage of lambda information between the LambdaExpr and the
CXXRecordDecl in a way that actually makes some sense:
  - LambdaExpr contains all of the information for initializing the
  lambda object, including the capture initializers and associated
  array index variables.
  - CXXRecordDecl's LambdaDefinitionData contains the captures, which
  are needed to understand the captured variable references in the
  body of the lambda.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150401 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoKeep track of the set of array index variables we use when we
Douglas Gregor [Mon, 13 Feb 2012 16:35:30 +0000 (16:35 +0000)]
Keep track of the set of array index variables we use when we
synthesize a by-copy captured array in a lambda. This information will
be needed by IR generation.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150396 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoRemove empty directories left behind by git-svn.
Benjamin Kramer [Mon, 13 Feb 2012 16:32:02 +0000 (16:32 +0000)]
Remove empty directories left behind by git-svn.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150395 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoDon't allocate unused storage for captures/capture initializers in lambda expressions
Douglas Gregor [Mon, 13 Feb 2012 15:51:35 +0000 (15:51 +0000)]
Don't allocate unused storage for captures/capture initializers in lambda expressions

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150394 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoMove the storage of lambda captures and capture initializers from
Douglas Gregor [Mon, 13 Feb 2012 15:44:47 +0000 (15:44 +0000)]
Move the storage of lambda captures and capture initializers from
LambdaExpr over to the CXXRecordDecl. This allows us to eliminate the
back-link from the closure type to the LambdaExpr, which will simplify
and lazify AST deserialization.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150393 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoAdd back in the code to create forward decls using temporary mdnodes.
Eric Christopher [Mon, 13 Feb 2012 15:08:45 +0000 (15:08 +0000)]
Add back in the code to create forward decls using temporary mdnodes.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150390 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoTestcase for previous commit.
Eric Christopher [Mon, 13 Feb 2012 15:04:15 +0000 (15:04 +0000)]
Testcase for previous commit.

PR11970.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150389 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoTemporarily walk back a few of my recent debug info limiting changes
Eric Christopher [Mon, 13 Feb 2012 14:56:11 +0000 (14:56 +0000)]
Temporarily walk back a few of my recent debug info limiting changes
while reworking how we handle wanting to emit only parts of structures.

Fixes PR11970.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150388 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoStaticAnalyzer/Core: fix MSVC build
Dylan Noblesmith [Mon, 13 Feb 2012 14:22:35 +0000 (14:22 +0000)]
StaticAnalyzer/Core: fix MSVC build

Fix build breakage from r150378: MSVC only allows taking the
address of a member function using the &ClassName::Function
syntax.# It was giving

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150387 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agodrop more llvm:: prefixes on SmallString<>
Dylan Noblesmith [Mon, 13 Feb 2012 12:32:26 +0000 (12:32 +0000)]
drop more llvm:: prefixes on SmallString<>

More cleanup after r149799.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150380 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agodrop more llvm:: prefixes on OwningPtr<>
Dylan Noblesmith [Mon, 13 Feb 2012 12:32:21 +0000 (12:32 +0000)]
drop more llvm:: prefixes on OwningPtr<>

More cleanup after r149798.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150379 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoexamples/analyzer-plugin: hook up to build
Dylan Noblesmith [Mon, 13 Feb 2012 12:32:15 +0000 (12:32 +0000)]
examples/analyzer-plugin: hook up to build

This was never being compiled at all and was bitrotting
as a result.

Also compile SampleAnalyzerPlugin as a module, not a library,
and fix a mistake with not passing the source files
to add_clang_library().

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150378 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoFix typo in PrintfConversionSpecifier::isDoubleArg()
Hans Wennborg [Mon, 13 Feb 2012 10:32:27 +0000 (10:32 +0000)]
Fix typo in PrintfConversionSpecifier::isDoubleArg()

This makes the printf diagnostics issue warnigns for %a, %A, %e, etc.
when used with the wrong argument.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150370 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoUpdate constexpr implementation to match CWG's chosen approach for core issues
Richard Smith [Mon, 13 Feb 2012 03:54:03 +0000 (03:54 +0000)]
Update constexpr implementation to match CWG's chosen approach for core issues
1358, 1360, 1452 and 1453.
 - Instantiations of constexpr functions are always constexpr. This removes the
   need for separate declaration/definition checking, which is now gone.
 - This makes it possible for a constexpr function to be virtual, if they are
   only dependently virtual. Virtual calls to such functions are not constant
   expressions.
 - Likewise, it's now possible for a literal type to have virtual base classes.
   A constexpr constructor for such a type cannot actually produce a constant
   expression, though, so add a special-case diagnostic for a constructor call
   to such a type rather than trying to evaluate it.
 - Classes with trivial default constructors (for which value initialization can
   produce a fully-initialized value) are considered literal types.
 - Classes with volatile members are not literal types.
 - constexpr constructors can be members of non-literal types. We do not yet use
   static initialization for global objects constructed in this way.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150359 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoDelete a simplistic helper function now that llvm::Triple can provide
Chandler Carruth [Mon, 13 Feb 2012 02:02:09 +0000 (02:02 +0000)]
Delete a simplistic helper function now that llvm::Triple can provide
this functionality.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150358 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agomore of rewriting ivar types.
Fariborz Jahanian [Sun, 12 Feb 2012 21:36:23 +0000 (21:36 +0000)]
more of rewriting ivar types.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150353 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoMove -Wdangling-else under -Wparentheses to be backwards compatibile with GCC.
David Blaikie [Sun, 12 Feb 2012 19:51:50 +0000 (19:51 +0000)]
Move -Wdangling-else under -Wparentheses to be backwards compatibile with GCC.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150349 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoImplement the standard decltype() semantics described in C++11
Douglas Gregor [Sun, 12 Feb 2012 18:57:57 +0000 (18:57 +0000)]
Implement the standard decltype() semantics described in C++11
[dcl.type.simple]p4, which treats all xvalues as returning T&&. We had
previously implemented a pre-standard variant of decltype() that
doesn't cope with, e.g., static_ast<T&&>(e) very well.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150348 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoWithin the body of a lambda expression, decltype((x)) for an
Douglas Gregor [Sun, 12 Feb 2012 18:42:33 +0000 (18:42 +0000)]
Within the body of a lambda expression, decltype((x)) for an
id-expression 'x' will compute the type based on the assumption that
'x' will be captured, even if it isn't captured, per C++11
[expr.prim.lambda]p18. There are two related refactors that go into
implementing this:

  1) Split out the check that determines whether we should capture a
  particular variable reference, along with the computation of the
  type of the field, from the actual act of capturing the
  variable.
  2) Always compute the result of decltype() within Sema, rather than
  AST, because the decltype() computation is now context-sensitive.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150347 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoProper initializer list support for new expressions and type construct expressions...
Sebastian Redl [Sun, 12 Feb 2012 18:41:05 +0000 (18:41 +0000)]
Proper initializer list support for new expressions and type construct expressions. Array new still missing.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150346 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoLambdas have a deleted default constructor and a deleted copy
Douglas Gregor [Sun, 12 Feb 2012 17:34:23 +0000 (17:34 +0000)]
Lambdas have a deleted default constructor and a deleted copy
assignment operator, per C++ [expr.prim.lambda]p19. Make it so.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150345 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoChange the way we store initialization kinds so that all direct inits can distinguish...
Sebastian Redl [Sun, 12 Feb 2012 16:37:36 +0000 (16:37 +0000)]
Change the way we store initialization kinds so that all direct inits can distinguish between list and parens form. This allows us to correctly diagnose the last test cases from litb.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150343 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoEmploy DirectList initialized entities to properly sort through some initialization...
Sebastian Redl [Sun, 12 Feb 2012 16:37:24 +0000 (16:37 +0000)]
Employ DirectList initialized entities to properly sort through some initialization edge cases.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150342 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoFix broken link. I believe this has been broken for at least 7 months.
Michael J. Spencer [Sun, 12 Feb 2012 09:11:39 +0000 (09:11 +0000)]
Fix broken link. I believe this has been broken for at least 7 months.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150329 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoFix the rewriter that broke with r149987.
Argyrios Kyrtzidis [Sun, 12 Feb 2012 04:48:45 +0000 (04:48 +0000)]
Fix the rewriter that broke with r149987.

r149987 changed the way parsing happens inside an @implementation;
it aggregates the declarations inside and reports them together as a DeclGroup.
This had the side effect that function declarations were reported together with
their definition, while the rewriter expected for function declarations to be
reported immediately to the consumer and thus not have a body.

Fix this by having the rewriter actually check with isThisDeclarationADefinition()
to make sure the body comes from the current decl before rewriting it.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150325 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoRepresent C++ direct initializers as ParenListExprs before semantic analysis
Sebastian Redl [Sat, 11 Feb 2012 23:51:47 +0000 (23:51 +0000)]
Represent C++ direct initializers as ParenListExprs before semantic analysis
instead of having a special-purpose function.

- ActOnCXXDirectInitializer, which was mostly duplication of
  AddInitializerToDecl (leading e.g. to PR10620, which Eli fixed a few days
  ago), is dropped completely.
- MultiInitializer, which was an ugly hack I added, is dropped again.
- We now have the infrastructure in place to distinguish between
  int x = {1};
  int x({1});
  int x{1};
-- VarDecl now has getInitStyle(), which indicates which of the above was used.
-- CXXConstructExpr now has a flag to indicate that it represents list-
   initialization, although this is not yet used.
- InstantiateInitializer was renamed to SubstInitializer and simplified.
- ActOnParenOrParenListExpr has been replaced by ActOnParenListExpr, which
  always produces a ParenListExpr. Placed that so far failed to convert that
  back to a ParenExpr containing comma operators have been fixed. I'm pretty
  sure I could have made a crashing test case before this.

The end result is a (I hope) considerably cleaner design of initializers.
More importantly, the fact that I can now distinguish between the various
initialization kinds means that I can get the tricky generalized initializer
test cases Johannes Schaub supplied to work. (This is not yet done.)

This commit passed self-host, with the resulting compiler passing the tests. I
hope it doesn't break more complicated code. It's a pretty big change, but one
that I feel is necessary.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150318 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoDrive-by fix of incorrect diagnostic, and a test case for said diagnostic. The double...
Sebastian Redl [Sat, 11 Feb 2012 23:51:21 +0000 (23:51 +0000)]
Drive-by fix of incorrect diagnostic, and a test case for said diagnostic. The double error is unfortunate, but I really don't see an alternative whose effort is worth it.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150317 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoFix parsing new expressions using init lists. Probably still do the wrong thing in...
Sebastian Redl [Sat, 11 Feb 2012 23:51:08 +0000 (23:51 +0000)]
Fix parsing new expressions using init lists. Probably still do the wrong thing in cases involving array new.
Show that many cases using initializer list constructors work, in that they parse and pass semantic analysis.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150316 91177308-0d34-0410-b5e6-96231b3b80d8

12 years ago[analyzer] Malloc Checker: reduce false negatives rate by assuming that
Anna Zaks [Sat, 11 Feb 2012 23:46:36 +0000 (23:46 +0000)]
[analyzer] Malloc Checker: reduce false negatives rate by assuming that
a pointer cannot escape through calls to system functions. Also, stop
after reporting the first use-after-free.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150315 91177308-0d34-0410-b5e6-96231b3b80d8

12 years ago[analyzer] Malloc Checker: Report a leak when we are returning freed
Anna Zaks [Sat, 11 Feb 2012 21:44:39 +0000 (21:44 +0000)]
[analyzer] Malloc Checker: Report a leak when we are returning freed
memory.
(As per one test case, the existing checker thought that this could
cause a lot of false positives - not sure if that's valid, to be
verified.)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150313 91177308-0d34-0410-b5e6-96231b3b80d8

12 years ago[analyzer] Malloc checker: Leak bugs should be suppressed by sinks.
Anna Zaks [Sat, 11 Feb 2012 21:02:40 +0000 (21:02 +0000)]
[analyzer] Malloc checker: Leak bugs should be suppressed by sinks.
Resolves a common false positive, where we were reporting a leak inside
asserts

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150312 91177308-0d34-0410-b5e6-96231b3b80d8

12 years ago[analyzer] MallocChecker: refactor/improve the symbol escape logic.
Anna Zaks [Sat, 11 Feb 2012 21:02:35 +0000 (21:02 +0000)]
[analyzer] MallocChecker: refactor/improve the symbol escape logic.

We use the same logic here as the RetainRelease checker.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150311 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoobjective-c translator. more modern abi stuff, focusing on ivar related
Fariborz Jahanian [Sat, 11 Feb 2012 20:10:52 +0000 (20:10 +0000)]
objective-c translator. more modern abi stuff, focusing on ivar related
meta-data.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150310 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoImplement core issue 5: a temporary created for copy-initialization has a
Richard Smith [Sat, 11 Feb 2012 19:22:50 +0000 (19:22 +0000)]
Implement core issue 5: a temporary created for copy-initialization has a
cv-unqualified type. This is essential in order to allow move-only objects of
const-qualified types to be copy-initialized via a converting constructor.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150309 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoMake sure to try instantiating a templated type which is used in an _Atomic
Richard Smith [Sat, 11 Feb 2012 18:03:45 +0000 (18:03 +0000)]
Make sure to try instantiating a templated type which is used in an _Atomic
before complaining that it's incomplete.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150308 91177308-0d34-0410-b5e6-96231b3b80d8

12 years ago[analyzer] New checker for assignment of non-0/1 values to Boolean variables.
Ryan Govostes [Sat, 11 Feb 2012 16:32:09 +0000 (16:32 +0000)]
[analyzer] New checker for assignment of non-0/1 values to Boolean variables.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150306 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoImplement warning for non-wide string literals with an unexpected encoding. Downgrad...
Eli Friedman [Sat, 11 Feb 2012 05:08:10 +0000 (05:08 +0000)]
Implement warning for non-wide string literals with an unexpected encoding.  Downgrade error for non-wide character literals with an unexpected encoding to a warning for compatibility with gcc and older versions of clang.  <rdar://problem/10837678>.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150295 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoBegin refactoring to use the newly added triple predicates for
Chandler Carruth [Sat, 11 Feb 2012 03:31:12 +0000 (03:31 +0000)]
Begin refactoring to use the newly added triple predicates for
simplicity. Also addresses a FIXME, although not one that could be
observed.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150294 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoBasic support for referring to captured variables from lambdas. Some simple examples...
Eli Friedman [Sat, 11 Feb 2012 02:57:39 +0000 (02:57 +0000)]
Basic support for referring to captured variables from lambdas.  Some simple examples seem to work.  Tests coming up soon.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150293 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoMake sure Sema creates a field for 'this' captures. (Doug, please double-check that...
Eli Friedman [Sat, 11 Feb 2012 02:51:16 +0000 (02:51 +0000)]
Make sure Sema creates a field for 'this' captures.  (Doug, please double-check that this is correct.)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150292 91177308-0d34-0410-b5e6-96231b3b80d8

12 years ago[libclang] For a reference of an implicit template instantiation just give
Argyrios Kyrtzidis [Sat, 11 Feb 2012 02:00:00 +0000 (02:00 +0000)]
[libclang] For a reference of an implicit template instantiation just give
a reference for the instantiation decl. Also test that its location is correct
after previous commit.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150291 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoFor class template implicit instantiation, also update its location to point
Argyrios Kyrtzidis [Sat, 11 Feb 2012 01:59:57 +0000 (01:59 +0000)]
For class template implicit instantiation, also update its location to point
to the pattern template that it came from, otherwise we had this situation:

template <typename T1, typename T2>
struct S {
};

template <typename T>
struct S<T, int> {
};

void f() {
  S<int, int> s; // location of declaration "S<int, int>" was of "S<T1, T2>" not "S<T, int>"
}

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150290 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoconst-qualify CXXRecordDecl::getCaptureFields.
Eli Friedman [Sat, 11 Feb 2012 00:18:00 +0000 (00:18 +0000)]
const-qualify CXXRecordDecl::getCaptureFields.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150284 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoAdd simple semantic test for C++11 [expr.prim.lambda]p16, which covers recursive...
Douglas Gregor [Fri, 10 Feb 2012 23:38:02 +0000 (23:38 +0000)]
Add simple semantic test for C++11 [expr.prim.lambda]p16, which covers recursive capture. This is far more interesting for IRgen.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150283 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoImplement C++11 [expr.lambda.prim]p13, which prohibits lambdas in
Douglas Gregor [Fri, 10 Feb 2012 23:30:22 +0000 (23:30 +0000)]
Implement C++11 [expr.lambda.prim]p13, which prohibits lambdas in
default arguments if in fact those lambdas capture any entity.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150282 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoobjc translator: more modern metadata stuff.
Fariborz Jahanian [Fri, 10 Feb 2012 23:18:24 +0000 (23:18 +0000)]
objc translator: more modern metadata stuff.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150281 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoSet UserLabelPrefix and MCountName correctly for DragonFly BSD. Patch by Sascha...
Eli Friedman [Fri, 10 Feb 2012 23:02:29 +0000 (23:02 +0000)]
Set UserLabelPrefix and MCountName correctly for DragonFly BSD.  Patch by Sascha Wildner.

Setting UserLabelPrefix correctly fixes PR11949.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150280 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoSupport all null pointer literals in format strings.
David Blaikie [Fri, 10 Feb 2012 21:07:25 +0000 (21:07 +0000)]
Support all null pointer literals in format strings.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150276 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoobjctive-c translator: modern metadata for ivars. wip.
Fariborz Jahanian [Fri, 10 Feb 2012 20:47:10 +0000 (20:47 +0000)]
objctive-c translator: modern metadata for ivars. wip.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150275 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoHave the driver pass CPU and target feature information to cc1as.
Jim Grosbach [Fri, 10 Feb 2012 20:37:10 +0000 (20:37 +0000)]
Have the driver pass CPU and target feature information to cc1as.

When creating the MCSubtargetInfo, the assembler driver uses the CPU and
feature string to construct a more accurate model of what instructions
are and are not legal.

rdar://10840476

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150273 91177308-0d34-0410-b5e6-96231b3b80d8

12 years ago[libclang] Indexing API: fully index using decls and directives.
Argyrios Kyrtzidis [Fri, 10 Feb 2012 20:10:48 +0000 (20:10 +0000)]
[libclang] Indexing API: fully index using decls and directives.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150268 91177308-0d34-0410-b5e6-96231b3b80d8

12 years ago[libclang] Indexing API: Fully index implict template instantiations.
Argyrios Kyrtzidis [Fri, 10 Feb 2012 20:10:44 +0000 (20:10 +0000)]
[libclang] Indexing API: Fully index implict template instantiations.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150267 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoAdd ArrayRef goodness in MultiplexASTMutationListener.
Argyrios Kyrtzidis [Fri, 10 Feb 2012 20:10:38 +0000 (20:10 +0000)]
Add ArrayRef goodness in MultiplexASTMutationListener.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150266 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoUpdate MultiplexASTMutationListener with the missing methods from ASTMutationListener.
Argyrios Kyrtzidis [Fri, 10 Feb 2012 20:10:36 +0000 (20:10 +0000)]
Update MultiplexASTMutationListener with the missing methods from ASTMutationListener.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150265 91177308-0d34-0410-b5e6-96231b3b80d8

12 years ago[libclang] Encode the template specialization parameters of a function
Argyrios Kyrtzidis [Fri, 10 Feb 2012 20:10:32 +0000 (20:10 +0000)]
[libclang] Encode the template specialization parameters of a function
specialization in its USR string.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150264 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoEnhance checking for null format string literal to take into account __null. Fixes...
Ted Kremenek [Fri, 10 Feb 2012 19:13:51 +0000 (19:13 +0000)]
Enhance checking for null format string literal to take into account __null.   Fixes <rdar://problem/8269537>.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150260 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoAllow implicit capture of 'this' in a lambda even when the capture
Douglas Gregor [Fri, 10 Feb 2012 17:46:20 +0000 (17:46 +0000)]
Allow implicit capture of 'this' in a lambda even when the capture
default is '=', and reword the warning about explicitly capturing
'this' in such lambdas to indicate that only explicit capture is
banned.

Introduce Fix-Its for this and other "save the programmer from
themself" rules regarding what can be explicitly captured and what
must be implicitly captured.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150256 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoAdd test from [expr.prim.lambda]p12, which deals with odr-use and
Douglas Gregor [Fri, 10 Feb 2012 16:48:36 +0000 (16:48 +0000)]
Add test from [expr.prim.lambda]p12, which deals with odr-use and
nested captures. We currently don't get odr-use correct in array
bounds, so that bit is commented out while we sort out what we need to
do.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150255 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoDon't introduce a lambda's operator() into the class until after we
Douglas Gregor [Fri, 10 Feb 2012 16:13:20 +0000 (16:13 +0000)]
Don't introduce a lambda's operator() into the class until after we
have finished parsing the body, so that name lookup will never find
anything within the closure type. Then, add this operator() and the
conversion function (if available) before completing the class.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150252 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoPR11684, core issue 1417:
Richard Smith [Fri, 10 Feb 2012 11:05:11 +0000 (11:05 +0000)]
PR11684, core issue 1417:

o Correct the handling of the restrictions on usage of cv-qualified and
  ref-qualified function types.
o Fix a bug where such types were rejected in template type parameter default
  arguments, due to such arguments not being treated as a template type arg
  context.
o Remove the ExtWarn for usage of such types as template arguments; that was
  a standard defect, not a GCC extension.
o Improve the wording and unify the code for diagnosing cv-qualifiers with the
  code for diagnosing ref-qualifiers.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150244 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoTest cleanup: prefer static_assert to handmade alternative.
Richard Smith [Fri, 10 Feb 2012 10:55:13 +0000 (10:55 +0000)]
Test cleanup: prefer static_assert to handmade alternative.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150243 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoLoosen the test from r150238 a bit to make some of our bots happy.
Evgeniy Stepanov [Fri, 10 Feb 2012 10:04:01 +0000 (10:04 +0000)]
Loosen the test from r150238 a bit to make some of our bots happy.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150242 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoTrack whether a function type has a trailing return type as type sugar. Use this
Richard Smith [Fri, 10 Feb 2012 09:58:53 +0000 (09:58 +0000)]
Track whether a function type has a trailing return type as type sugar. Use this
to pretty-print such function types better, and to fix a case where we were not
instantiating templates in lexical order. In passing, move the Variadic bit from
Type's bitfields to FunctionProtoType to get the Type bitfields down to 32 bits.
Also ensure that we always substitute the return type of a function when
substituting explicitly-specified arguments, since that can cause us to bail
out with a SFINAE error before we hit a hard error in parameter substitution.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150241 91177308-0d34-0410-b5e6-96231b3b80d8

12 years ago--lies.
Richard Smith [Fri, 10 Feb 2012 09:37:07 +0000 (09:37 +0000)]
--lies.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150240 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoAdd a lambda example from the working draft.
Douglas Gregor [Fri, 10 Feb 2012 09:37:05 +0000 (09:37 +0000)]
Add a lambda example from the working draft.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150239 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoFix function prolog codegen whe coerce-to type is a struct.
Evgeniy Stepanov [Fri, 10 Feb 2012 09:30:15 +0000 (09:30 +0000)]
Fix function prolog codegen whe coerce-to type is a struct.

This changes function prolog in such a way as to avoid out-of-bounds
stack store in the case when coerce-to type has a larger storage size
than the real argument type.

Fixes PR11905.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150238 91177308-0d34-0410-b5e6-96231b3b80d8

12 years agoAdd various tests for captures and the reaching scope of the lambda
Douglas Gregor [Fri, 10 Feb 2012 09:26:04 +0000 (09:26 +0000)]
Add various tests for captures and the reaching scope of the lambda
expression. Implement C++11 [expr.prim.lambda]p12's requirement that
capturing a variable will odr-use it.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150237 91177308-0d34-0410-b5e6-96231b3b80d8