summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDeclCXX.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-03-11 20:50:30 +0000
committerDouglas Gregor <dgregor@apple.com>2009-03-11 20:50:30 +0000
commit4261e4c3633fcb18fc4defe9cbd796b0e57decf1 (patch)
tree0e9e80e95cc0a3d494559431ec9192b5992e8a12 /clang/lib/Sema/SemaDeclCXX.cpp
parent5202cc00364eaa34db7d45f2c9ae25bbf6f388a1 (diff)
downloadbcm5719-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.cpp17
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);
OpenPOWER on IntegriCloud