summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-01-19 06:06:57 +0000
committerDouglas Gregor <dgregor@apple.com>2010-01-19 06:06:57 +0000
commit5204248f96edc26725746b7a0eeffe5cc3c9a10a (patch)
treec63f7230114cc3514c1d21deb8a98fc124eef5ad /clang
parentc68266f3240e76a3e0d2bc9d1125ff2116820a53 (diff)
downloadbcm5719-llvm-5204248f96edc26725746b7a0eeffe5cc3c9a10a.tar.gz
bcm5719-llvm-5204248f96edc26725746b7a0eeffe5cc3c9a10a.zip
When looking up enumerator names for redeclaration, use the
ForRedeclaration flag so that we don't look into base classes. Fixes PR6061. llvm-svn: 93862
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Sema/SemaDecl.cpp3
-rw-r--r--clang/test/SemaCXX/enum.cpp11
2 files changed, 13 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 101cae84be6..d2ac483db53 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -6095,7 +6095,8 @@ Sema::DeclPtrTy Sema::ActOnEnumConstant(Scope *S, DeclPtrTy theEnumDecl,
// Verify that there isn't already something declared with this name in this
// scope.
- NamedDecl *PrevDecl = LookupSingleName(S, Id, LookupOrdinaryName);
+ NamedDecl *PrevDecl = LookupSingleName(S, Id, LookupOrdinaryName,
+ ForRedeclaration);
if (PrevDecl && PrevDecl->isTemplateParameter()) {
// Maybe we will complain about the shadowed template parameter.
DiagnoseTemplateParameterShadow(IdLoc, PrevDecl);
diff --git a/clang/test/SemaCXX/enum.cpp b/clang/test/SemaCXX/enum.cpp
index f1b02f5d4c6..47ae06ab0e6 100644
--- a/clang/test/SemaCXX/enum.cpp
+++ b/clang/test/SemaCXX/enum.cpp
@@ -56,3 +56,14 @@ namespace test1 {
enum enum4 { v4 = __LONG_MAX__ * 2UL };
int test4[is_same<__typeof(+v4), unsigned long>::value];
}
+
+// PR6061
+namespace PR6061 {
+ struct A { enum { id }; };
+ struct B { enum { id }; };
+
+ struct C : public A, public B
+ {
+ enum { id };
+ };
+}
OpenPOWER on IntegriCloud