diff options
| author | Fariborz Jahanian <fjahanian@apple.com> | 2009-08-10 23:56:17 +0000 |
|---|---|---|
| committer | Fariborz Jahanian <fjahanian@apple.com> | 2009-08-10 23:56:17 +0000 |
| commit | 296584b2a9a563c9315ccf989f60fe8b8b582156 (patch) | |
| tree | ed193017f89c3098db32732125657993f6adbdc4 /clang/lib/AST/DeclCXX.cpp | |
| parent | 475f8a4fa27a280f6320b72824988f9807e5a2fe (diff) | |
| download | bcm5719-llvm-296584b2a9a563c9315ccf989f60fe8b8b582156.tar.gz bcm5719-llvm-296584b2a9a563c9315ccf989f60fe8b8b582156.zip | |
Support for anonymous union in ctor's initializer and
bunch of FIXMEs for their is-gen.
llvm-svn: 78623
Diffstat (limited to 'clang/lib/AST/DeclCXX.cpp')
| -rw-r--r-- | clang/lib/AST/DeclCXX.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/clang/lib/AST/DeclCXX.cpp b/clang/lib/AST/DeclCXX.cpp index e07eae7b20a..a068c238353 100644 --- a/clang/lib/AST/DeclCXX.cpp +++ b/clang/lib/AST/DeclCXX.cpp @@ -583,7 +583,7 @@ CXXConstructorDecl::setBaseOrMemberInitializers( if (Member->isBaseInitializer()) AllBaseFields[Member->getBaseClass()->getAs<RecordType>()] = Member; else - AllBaseFields[Member->getMember()] = Member; + AllBaseFields[Member->getMember()] = Member; } // Push virtual bases before others. @@ -635,7 +635,23 @@ CXXConstructorDecl::setBaseOrMemberInitializers( // non-static data members. for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(), E = ClassDecl->field_end(); Field != E; ++Field) { - if (CXXBaseOrMemberInitializer *Value = AllBaseFields.lookup(*Field)) { + if ((*Field)->isAnonymousStructOrUnion()) { + if (const RecordType *FieldClassType = + Field->getType()->getAs<RecordType>()) { + CXXRecordDecl *FieldClassDecl + = cast<CXXRecordDecl>(FieldClassType->getDecl()); + for(RecordDecl::field_iterator FA = FieldClassDecl->field_begin(), + EA = FieldClassDecl->field_end(); FA != EA; FA++) { + if (CXXBaseOrMemberInitializer *Value = AllBaseFields.lookup(*FA)) { + AllToInit.push_back(Value); + break; + } + } + } + continue; + } + if (CXXBaseOrMemberInitializer *Value = + AllBaseFields.lookup(*Field)) { AllToInit.push_back(Value); continue; } |

