aboutsummaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)Author
2012-02-10Allow implicit capture of 'this' in a lambda even when the captureDouglas Gregor
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
2012-02-10Add test from [expr.prim.lambda]p12, which deals with odr-use andDouglas Gregor
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
2012-02-10Don't introduce a lambda's operator() into the class until after weDouglas Gregor
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
2012-02-10PR11684, core issue 1417:Richard Smith
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
2012-02-10Track whether a function type has a trailing return type as type sugar. Use thisRichard Smith
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
2012-02-10Fix function prolog codegen whe coerce-to type is a struct.Evgeniy Stepanov
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
2012-02-10Add various tests for captures and the reaching scope of the lambdaDouglas Gregor
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
2012-02-10Implement the conversion to a function pointer for lambda expressions,Douglas Gregor
per C++ [expr.prim.lambda]p6. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150236 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-10Extend CXXRecordDecl with a function that determines the mapping fromDouglas Gregor
the variables captured by a lambda to the fields that store the captured values. To be used in IRgen. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150235 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-10Update to new resolution for DR1458. When taking the address of an object ofRichard Smith
incomplete class type which has an overloaded operator&, it's now just unspecified whether the overloaded operator or the builtin is used. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150234 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-10Revert r145999. This turned out to be a bad idea. Unfortunately, 'id' is ↵Ted Kremenek
used so profusely in many APIs and large codebases that this made the deprecated warning trigger happy to the point of not being useful. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150223 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-10Make sure we convert struct layout pragmas to attributes for class templates ↵Eli Friedman
the same way we do for non-template classes. <rdar://problem/10791194>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150221 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-10[analyzer] MallocChecker Cleanup - harden against crashes, fix an errorAnna Zaks
(use of return instead of continue), wording. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150215 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-10objc translator: mode modern abi stuff.Fariborz Jahanian
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150212 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Remove evil const_cast that's not needed anymore.Bill Wendling
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150210 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Switching to using dyn_cast_or_null, and fixing line endings in the test case.Aaron Ballman
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150209 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Use SmallVector when we can instead of std::vector.Bill Wendling
This looks like it had a small, but measurable performance improvement on -O0 compile time for our ObjC tests. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150208 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09[analyzer] Proactively avoid inlining vararg functions and blocks until we ↵Ted Kremenek
properly support them. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150207 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09objc: If a method is not implemented in the category implementation butFariborz Jahanian
has been declared in its primary class, superclass, or in one of their protocols, no need to issue unimplemented method. // rdar://10823023 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150206 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Make sure a variable with a C++ direct initializer triggers jump scope ↵Eli Friedman
checking. Fixes PR10620 / <rdar://problem/9958362> . git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150204 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Class objects passed by value follow the same rules as structure objects.Akira Hatanaka
Double fields of by-value class objects should be passed in floating point registers. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150200 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Kill the brief and full explanation fields from StaticDiagInfoRec. They were ↵Benjamin Kramer
unused and wasted space for nothing. - per PR11952. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150199 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Fix bugs in function MipsABIInfo::returnAggregateInRegs. Functions returningAkira Hatanaka
class objects follow the same rules as those returning struct objects. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150196 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Don't allow deduction of a lambda result type from an initializerDouglas Gregor
list; it is not an expression. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150194 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Remove unused fun.Benjamin Kramer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150172 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Implement return type deduction for lambdas per C++11Douglas Gregor
[expr.prim.lambda]p4, including the current suggested resolution of core isue 975, which allows multiple return statements so long as the types match. ExtWarn when user code is actually making use of this extension. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150168 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Restore the appropriate lexical declaration context for a lambda'sDouglas Gregor
function call operator (to the lambda class). This allows us to IRgen calls to simple (non-capturing) lambdas, e.g., [](int i, int j) -> int { return i + j; }(1, 2) Eli will be providing test cases as he brings up more IRgen. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150166 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Remove the "unsupported" error for lambda expressions. It's annoying,Douglas Gregor
and rapidly becoming untrue. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150165 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Implement C++ [expr.prim.lambda]p2, which bans lambda expressions inDouglas Gregor
unevaluated operands. Be certain that we're marking everything referenced within a capture initializer as odr-used. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150163 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09[PCH] Add some comments, per Ted's request.Argyrios Kyrtzidis
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150162 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Fix ASTReader::FinishedDeserializing().Argyrios Kyrtzidis
We were passing a decl to the consumer after all pending deserializations were finished but this was not enough; due to processing by the consumer we may end up into yet another deserialization process but the way FinishedDeserializing() was setup we would not ensure that everything was fully deserialized before returning to the consumer. Separate ASTReader::FinishedDeserializing() into two semantic actions. The first is ensuring that a deserialization process ends up will fully deserialized decls/types even if the process is started by the consumer. The second is pushing "interesting" decls to the consumer; we make sure that we don't re-enter this section recursively be checking a variable. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150160 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Don't cache the artificial type for the this pointer, there's noEric Christopher
difference in the qual type. This is a workaround for the fact that the type isn't artificial but the this decl is, however, we don't have any way of representing it in the current metadata. For now, however, just don't cache the full type. Fixes rdar://10831526 and probably a couple of others. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150159 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09[analyzer] MallocChecker: address a diagnostic "fixme".Anna Zaks
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150158 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09DR1359: A constexpr constructor does not need to initialize an empty struct orRichard Smith
empty union. This still rejects anonymous member structs or unions which only contain such empty class types, pending standard wording defining exactly what an empty class type is. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150157 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09[analyzer] Add custom path diagnostic to the Malloc Checker.Anna Zaks
Very simple so far - we just highlight every allocation and release site. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150156 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09[analyzer] MallocChecker cleanup, more tests.Anna Zaks
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150155 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09[PCH] Set the DeclContext before doing any deserialization, to make sure ↵Argyrios Kyrtzidis
internal calls to Decl::getASTContext() by Decl's methods will find the TranslationUnitDecl without crashing due to a parent declaration context still deserializing. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150153 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Correct comment Clang C++ use in production.David Blaikie
This was from way-back-when (r82583) when Clang's C++ support wasn't prime-time yet. Production quality C++ was tested experimentally from r100119 and turned on by default in r141063. Patch by Justin Bogner. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150148 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Use RAII object for cleanups.Eli Friedman
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150147 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Refactor lambda IRGen so AggExprEmitter::VisitLambdaExpr does the right thing.Eli Friedman
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150146 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09CWG issue 1405: mutable members are allowed in literal types, but can't undergoRichard Smith
lvalue-to-rvalue conversions in constant expressions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150145 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Attempting to initialize a union member that does not exist no longer crashes.Aaron Ballman
Patch by Remi Gacogne git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150144 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Basic IRGen for LambdaExprs with captures.Eli Friedman
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150141 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09A tiny bit more lambda IRGen.Eli Friedman
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150140 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Implement capture-by-copy for arrays in lambdas.Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150138 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09[PCH] Avoid using Decl::setAttrs() and Decl::setLexicalDeclContext() from ↵Argyrios Kyrtzidis
the ASTReaderDecl directly; they internally call Decl::getASTContext() which may crash if a declaration context parent is still deserializing. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150137 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Don't complain about the lack of a constructor for a lambda expression. They ↵Douglas Gregor
are constructed in different ways git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150136 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09When we create a non-static data member in the closure object for aDouglas Gregor
capture, make sure we actually add the field. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150135 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Factor the logic for capturing variables in a lambda into its ownDouglas Gregor
function; it's going to get longer soon. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150132 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09Along the error path for lambdas, mark the lambda class as invalid and ↵Douglas Gregor
finalize it git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150130 91177308-0d34-0410-b5e6-96231b3b80d8