aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaDecl.cpp
AgeCommit message (Collapse)Author
2011-07-12Centralize the getCanonicalType() calls in the Itanium C++ manglingDouglas Gregor
code so that they only occur in a single place. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134961 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-11Don't complain about missing return statements for nakedDouglas Gregor
functions. Fixes <rdar://problem/9731999>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134897 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-04Remove unused parameter from ActOnDeclarator.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134377 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-02Fix a typo, remove a tab, canonicalize some spacing. No functional change.Nick Lewycky
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134305 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-01Fix for PR7410. Allow functions in a derived class that improperly overwrite ↵Richard Trieu
a virtual function in the base class to be inserted into the derived class function list to prevent extra errors every time the derived class is used. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134251 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-01Fix AST representations of alias-declarations which define tag types. Inside ↵Richard Smith
classes, the tag types need to have an associated access specifier, and inside function definitions, they need to be included in the declarations of the DeclStmt. These issues manifested as assertions during template instantiation, and also in a WIP constexpr patch. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134250 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-29When redeclaring a local extern in the same scope, make sure that weDouglas Gregor
replace the existing declaration appropriately. Patch by Jordy Rose, fixes PR10013 / <rdar://problem/9584157>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134097 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-28Add support for C++ namespace-aware typo correction, e.g., correctingDouglas Gregor
vector<int> to std::vector<int> Patch by Kaelyn Uhrain, with minor tweaks + PCH support from me. Fixes PR5776/<rdar://problem/8652971>. Thanks Kaelyn! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134007 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-28Centralize all checks for a C++ tag definition inside a typename inArgyrios Kyrtzidis
Sema::GetTypeForDeclarator and remove its 'OwnedDecl' out parameter. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133986 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-28Centralize the check for a tag definition in a Declarator::PrototypeContext ↵Argyrios Kyrtzidis
inside GetTypeForDeclarator. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133985 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-24Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about ↵Argyrios Kyrtzidis
'ownership', not 'lifetime'. rdar://9477613. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133779 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-23Remove multiple use of weak_import attribute onFariborz Jahanian
same declaration. Templatize dropAttr for general use. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133724 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-23Remove weak_import attribute on new declaration.Fariborz Jahanian
// rdar://9538608 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133721 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-22Issue warning if weak_import attribute is added to an alreadyFariborz Jahanian
declared variable and ignore it. // rdar://9538608 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133654 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-20llvm-gcc treats a tentative definition with a previousFariborz Jahanian
(or follow up) extern declaration with weak_import as an actual definition. make clang follows this behavior. // rdar://9538608 llvm-gcc treats an extern declaration with weak_import git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133450 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-17When an explicit specialization has a storage specifier, error if thatDouglas Gregor
storage specifier is different from the storage specifier on the template. If that storage specifier is the same, then we only warn. Thanks to John for the prodding. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133236 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-17Downgrade the error complaining about presence of a storage classDouglas Gregor
specifier on an explicit specialization to a warning, since neither EDG nor GCC diagnose this code as ill-formed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133232 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-15Automatic Reference Counting.John McCall
Language-design credit goes to a lot of people, but I particularly want to single out Blaine Garst and Patrick Beard for their contributions. Compiler implementation credit goes to Argyrios, Doug, Fariborz, and myself, in no particular order. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133103 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-15Don't add redundant FormatAttr, ConstAttr, or NoThrowAttr attributes,Douglas Gregor
either imlicitly (for builtins) or explicitly (due to multiple specification of the same attributes). Fixes <rdar://problem/9612060>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133045 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-14fix rdar://9204520 - Accept int(0.85 * 10) as an initializer in a class memberChris Lattner
as an extension. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132980 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-13Make __gnu_inline__ functions in gnu99 mode work the same way as inline ↵Eli Friedman
functions in gnu89 mode in terms of redefinitions. rdar://9559708 . git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132953 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-12Don't assert on initialized typedef declarations in classes:Richard Smith
struct { typedef int A = 0; }; According to the C++11 standard, this is not ill-formed, but does not have any ascribed meaning. We can't reasonably accept it, so treat it as ill-formed. Also switch C++ from an incorrect 'fields can only be initialized in constructors' diagnostic for this case to C's 'illegal initializer (only variables can be initialized)' git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132890 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-11Implement support for C++11 in-class initialization of non-static data members.Richard Smith
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132878 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-11Implement Objective-C Related Result Type semantics.Douglas Gregor
Related result types apply Cocoa conventions to the type of message sends and property accesses to Objective-C methods that are known to always return objects whose type is the same as the type of the receiving class (or a subclass thereof), such as +alloc and -init. This tightens up static type safety for Objective-C, so that we now diagnose mistakes like this: t.m:4:10: warning: incompatible pointer types initializing 'NSSet *' with an expression of type 'NSArray *' [-Wincompatible-pointer-types] NSSet *array = [[NSArray alloc] init]; ^ ~~~~~~~~~~~~~~~~~~~~~~ /System/Library/Frameworks/Foundation.framework/Headers/NSObject.h:72:1: note: instance method 'init' is assumed to return an instance of its receiver type ('NSArray *') - (id)init; ^ It also means that we get decent type inference when writing code in Objective-C++0x: auto array = [[NSMutableArray alloc] initWithObjects:@"one", @"two",nil]; // ^ now infers NSMutableArray* rather than id git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132868 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-10Made changes to how 'struct'/'class' mismatches are handled in ↵Richard Trieu
-Wmismatched-tags. - Removed fix-it hints from template instaniations since changes to the templates are rarely helpful. - Changed the caret in template instaniations from the class/struct name to the class/struct keyword, matching the other warnings. - Do not offer fix-it hints when multiple declarations disagree. Warnings are still given. - Once a definition is found, offer a fix-it hint to all previous declarations with wrong tag. - Declarations that disagree with a previous definition will get a fix-it hint to change the declaration. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132831 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-07More coherent diagnostic when a stack variable isFariborz Jahanian
declared __weak objc-gc mode. // rdar://9666091. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132731 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-06Diagnose the condition in C++ [temp.expl.spec]p16 that prohibitsDouglas Gregor
specializing a member of an unspecialized template, and recover from such errors without crashing. Fixes PR10024 / <rdar://problem/9509761>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132677 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-03Revert r132544. Accidental commit. I got confused with the Tortoise SVN menu.Francois Pichet
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132546 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-03git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132544 ↵Francois Pichet
91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-03Correctly revert r131347: function explicit specialization at class scope.Francois Pichet
I'll try to implement this functionality again soon. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132536 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-02Implement -fgnu89-inline. Fixes PR10041.Rafael Espindola
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132460 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-01Microsoft friend acting as a forward declaration; try#2. Now only 2 lines.Francois Pichet
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132387 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-31Revert 132332 (Microsoft friend as a forward declaration), John McCall ↵Francois Pichet
pointed out a better/simpler way to do it. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132369 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-31Recreate the DeclContext before adding the implicit friend forward ↵Francois Pichet
declaration. This should fix the asserting buildbot. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132333 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-31For compatibility with MSVC, a friend declaration also act as a forward ↵Francois Pichet
declaration if the tag name is not already declared. The tag name is declared in the next outermost non record scope. Example: class A { friend class B; B* b; }; B* global_b; git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132332 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-27Clean up my changes to jump-diagnostic handling for local variables ofDouglas Gregor
class type (or array thereof), eliminating some redundant checks (thanks Eli!) and adding some tests where the behavior differs in C++98/03 vs. C++0x. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132218 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-26Implement a new warning for when adding a default argument to a methodSean Hunt
makes it into a special member function. This is very bad and can lead to all sorts of nastiness including implicit member functions violating the One Definition Rule. This should probably be made ill-formed in a later version of the standard, but for now we'll just warn. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132104 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-25Update our diagnostics to properly account for move operations.Sean Hunt
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132096 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-25Implement a little bit of cleanup and a lot more of the base workSean Hunt
behind implicit moves. We now correctly identify move constructors and assignment operators and update bits on the record correctly. Generation of implicit moves (declarations or definitions) is not yet supported. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132080 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-24Implement a new type node, UnaryTransformType, designed to represent aSean Hunt
type that turns one type into another. This is used as the basis to implement __underlying_type properly - with TypeSourceInfo and proper behavior in the face of templates. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132017 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-24Implement the initial part of C++0x [expr.const]p2, which specifiesDouglas Gregor
that the unevaluated subexpressions of &&, ||, and ? : are not considered when determining whether the expression is a constant expression. Also, turn the "used in its own initializer" warning into a runtime-behavior warning, so that it doesn't fire when a variable is used as part of an unevaluated subexpression of its own initializer. Fixes PR9999. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131968 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-21Diagnose the presence of storage-class-specifiers on explicitDouglas Gregor
instantiations and specializations. Fixes <rdar://problem/9126453> and PR8700. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131802 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-21Teach Sema::ActOnUninitializedDecl() not to try to interpret when oneDouglas Gregor
should use a constructor to default-initialize a variable. InitializationSequence knows the rules for default initialization, better. Fixes <rdar://problem/8501008>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131796 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-20Introduce Type::isSignedIntegerOrEnumerationType() andDouglas Gregor
Type::isUnsignedIntegerOrEnumerationType(), which are like Type::isSignedIntegerType() and Type::isUnsignedIntegerType() but also consider the underlying type of a C++0x scoped enumeration type. Audited all callers to the existing functions, switching those that need to also handle scoped enumeration types (e.g., those that deal with constant values) over to the new functions. Fixes PR9923 / <rdar://problem/9447851>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131735 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-20Fix PR9941 for out-of-line template destructors too.Sebastian Redl
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131722 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-19Fix PR9941 again, this time for templates.Sebastian Redl
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131640 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-19Implement __underlying_type for libc++.Sean Hunt
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131633 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-19Reapply r121528, fixing PR9941 by delaying the exception specification check ↵Sebastian Redl
for destructors until the class is complete and destructors have been adjusted. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131632 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-18Revert r121528 as it breaks a simple testcase, which leads to, amongSean Hunt
other things, libcxx not building. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131573 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-18Implement implicit exception specifications of destructors.Sebastian Redl
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131528 91177308-0d34-0410-b5e6-96231b3b80d8