diff options
| author | Douglas Gregor <dgregor@apple.com> | 2009-03-11 20:50:30 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2009-03-11 20:50:30 +0000 |
| commit | 4261e4c3633fcb18fc4defe9cbd796b0e57decf1 (patch) | |
| tree | 0e9e80e95cc0a3d494559431ec9192b5992e8a12 /clang/lib/Sema/SemaDeclCXX.cpp | |
| parent | 5202cc00364eaa34db7d45f2c9ae25bbf6f388a1 (diff) | |
| download | bcm5719-llvm-4261e4c3633fcb18fc4defe9cbd796b0e57decf1.tar.gz bcm5719-llvm-4261e4c3633fcb18fc4defe9cbd796b0e57decf1.zip | |
Make sure that we set the access specifier for an instantiated FieldDecl, and that the aggregate and POD flags for an instantiated class template are updated based on instantiation of a FieldDecl
llvm-svn: 66701
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 17 |
1 files changed, 4 insertions, 13 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index bedea3a7cd7..0ea501d993d 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -547,7 +547,8 @@ Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, Decl *Member; if (isInstField) { - Member = HandleField(S, cast<CXXRecordDecl>(CurContext), Loc, D, BitWidth); + Member = HandleField(S, cast<CXXRecordDecl>(CurContext), Loc, D, BitWidth, + AS); assert(Member && "HandleField never returns null"); } else { Member = static_cast<Decl*>(ActOnDeclarator(S, D, LastInGroup)); @@ -581,22 +582,12 @@ Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, BitWidth = 0; Member->setInvalidDecl(); } + + Member->setAccess(AS); } assert((Name || isInstField) && "No identifier for non-field ?"); - 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). - // A POD must be an aggregate. - if (isInstField && (AS == AS_private || AS == AS_protected)) { - CXXRecordDecl *Record = cast<CXXRecordDecl>(CurContext); - Record->setAggregate(false); - Record->setPOD(false); - } - if (DS.isVirtualSpecified()) { if (!isFunc || DS.getStorageClassSpec() == DeclSpec::SCS_static) { Diag(DS.getVirtualSpecLoc(), diag::err_virtual_non_function); |

