diff options
| author | Douglas Gregor <dgregor@apple.com> | 2008-11-05 16:20:31 +0000 | 
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2008-11-05 16:20:31 +0000 | 
| commit | cfd8ddc6de536ccc4f1903ad56fabc9f1245fbf6 (patch) | |
| tree | 0b1e2317d1cfc8e01506ad9ff56aa513bd746d3a /clang/lib/Sema/SemaDeclCXX.cpp | |
| parent | 6f5431543a701c54293a977c28844e9862f8f491 (diff) | |
| download | bcm5719-llvm-cfd8ddc6de536ccc4f1903ad56fabc9f1245fbf6.tar.gz bcm5719-llvm-cfd8ddc6de536ccc4f1903ad56fabc9f1245fbf6.zip | |
Keep track of whether a C++ class is an aggregate. Don't allow initialization of non-aggregates with initializer lists.
llvm-svn: 58757
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 9 | 
1 files changed, 9 insertions, 0 deletions
| diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index b95ebf0bad8..53051ff57fb 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -461,6 +461,15 @@ Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,    // member decls.    CXXClassMemberWrapper(Member).setAccess(AS); +  // C++ [dcl.init.aggr]p1: +  //   An aggregate is an array or a class (clause 9) with [...] no +  //   private or protected non-static data members (clause 11). +  if (isInstField && (AS == AS_private || AS == AS_protected)) +    cast<CXXRecordDecl>(CurContext)->setAggregate(false); + +  // FIXME: If the member is a virtual function, mark it its class as +  // a non-aggregate. +    if (BitWidth) {      // C++ 9.6p2: Only when declaring an unnamed bit-field may the      // constant-expression be a value equal to zero. | 

