diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2008-07-16 21:01:53 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2008-07-16 21:01:53 +0000 |
commit | 0ff12f078c70acad7ef18cb4906d17a203d2267a (patch) | |
tree | 2b16f665d9ca8afeb56a4d607948376361ac09df /lib | |
parent | b2a39459f507ca876a59f0293e46421185321b01 (diff) |
When in C++, make EnumConstant names hide tag names in the same scope, instead of colliding with them.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53702 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 00c73ea765..6acbb2d184 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -2121,7 +2121,12 @@ Sema::DeclTy *Sema::ActOnEnumConstant(Scope *S, DeclTy *theEnumDecl, // Verify that there isn't already something declared with this name in this // scope. if (Decl *PrevDecl = LookupDecl(Id, Decl::IDNS_Ordinary, S)) { - if (IdResolver.isDeclInScope(PrevDecl, CurContext, S)) { + // When in C++, we may get a TagDecl with the same name; in this case the + // enum constant will 'hide' the tag. + assert((getLangOptions().CPlusPlus || !isa<TagDecl>(PrevDecl)) && + "Received TagDecl when not in C++!"); + if (!isa<TagDecl>(PrevDecl) && + IdResolver.isDeclInScope(PrevDecl, CurContext, S)) { if (isa<EnumConstantDecl>(PrevDecl)) Diag(IdLoc, diag::err_redefinition_of_enumerator, Id->getName()); else |