diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2011-06-12 11:43:46 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2011-06-12 11:43:46 +0000 |
commit | 4a4beec7b0c4d29c5fa47b02cbac16f786fef2eb (patch) | |
tree | 94fbd29419885283842785dfb206219edad8acd5 /clang/lib/Parse/ParseDeclCXX.cpp | |
parent | e4073e0ae119ea66c358483e2d96cb962b227b82 (diff) | |
download | bcm5719-llvm-4a4beec7b0c4d29c5fa47b02cbac16f786fef2eb.tar.gz bcm5719-llvm-4a4beec7b0c4d29c5fa47b02cbac16f786fef2eb.zip |
Don't assert on initialized typedef declarations in classes:
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)'
llvm-svn: 132890
Diffstat (limited to 'clang/lib/Parse/ParseDeclCXX.cpp')
-rw-r--r-- | clang/lib/Parse/ParseDeclCXX.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp index 51aa01091e7..640e50176bc 100644 --- a/clang/lib/Parse/ParseDeclCXX.cpp +++ b/clang/lib/Parse/ParseDeclCXX.cpp @@ -1830,7 +1830,9 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, } else { HasDeferredInitializer = !DeclaratorInfo.isFunctionDeclarator() && DeclaratorInfo.getDeclSpec().getStorageClassSpec() - != DeclSpec::SCS_static; + != DeclSpec::SCS_static && + DeclaratorInfo.getDeclSpec().getStorageClassSpec() + != DeclSpec::SCS_typedef; if (!HasDeferredInitializer) { SourceLocation EqualLoc; |