diff options
author | Aaron Ballman <aaron@aaronballman.com> | 2012-06-01 00:02:08 +0000 |
---|---|---|
committer | Aaron Ballman <aaron@aaronballman.com> | 2012-06-01 00:02:08 +0000 |
commit | a0bc07262be89b4ebeade9c7c966e972ec7b49f6 (patch) | |
tree | a914ca906b9fb08c02cf693f08e95f8ff25967ef | |
parent | 526772de294aeacd4677b6168e6ac2f5d4c8b7ce (diff) | |
download | bcm5719-llvm-a0bc07262be89b4ebeade9c7c966e972ec7b49f6.tar.gz bcm5719-llvm-a0bc07262be89b4ebeade9c7c966e972ec7b49f6.zip |
Anonymous union members within a struct are now properly handled as an unevaluated field in C++11 mode. This fixes PR12866.
llvm-svn: 157784
-rw-r--r-- | clang/lib/Sema/SemaExprMember.cpp | 2 | ||||
-rw-r--r-- | clang/test/SemaCXX/anonymous-union-cxx11.cpp | 13 |
2 files changed, 14 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaExprMember.cpp b/clang/lib/Sema/SemaExprMember.cpp index 6af4040784f..f8bf908dfc7 100644 --- a/clang/lib/Sema/SemaExprMember.cpp +++ b/clang/lib/Sema/SemaExprMember.cpp @@ -115,7 +115,7 @@ static IMAKind ClassifyImplicitMemberAccess(Sema &SemaRef, NamedDecl *D = *I; if (D->isCXXInstanceMember()) { - if (dyn_cast<FieldDecl>(D)) + if (dyn_cast<FieldDecl>(D) || dyn_cast<IndirectFieldDecl>(D)) isField = true; CXXRecordDecl *R = cast<CXXRecordDecl>(D->getDeclContext()); diff --git a/clang/test/SemaCXX/anonymous-union-cxx11.cpp b/clang/test/SemaCXX/anonymous-union-cxx11.cpp new file mode 100644 index 00000000000..8e682ebcda3 --- /dev/null +++ b/clang/test/SemaCXX/anonymous-union-cxx11.cpp @@ -0,0 +1,13 @@ +// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify -pedantic %s + +namespace PR12866 { + struct bar { + union { + int member; + }; + }; + + void foo( void ) { + (void)sizeof(bar::member); + } +} |