diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 2 | ||||
-rw-r--r-- | clang/test/Sema/warn-shadow.c | 7 | ||||
-rw-r--r-- | clang/test/SemaCXX/warn-shadow.cpp | 7 |
3 files changed, 15 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 95623ef100f..ef17f8d57b9 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -16295,7 +16295,7 @@ Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, return nullptr; if (PrevDecl) { - if (!TheEnumDecl->isScoped()) { + if (!TheEnumDecl->isScoped() && isa<ValueDecl>(PrevDecl)) { // Check for other kinds of shadowing not already handled. CheckShadow(New, PrevDecl, R); } diff --git a/clang/test/Sema/warn-shadow.c b/clang/test/Sema/warn-shadow.c index 8d1d0aed693..aa8505b0c91 100644 --- a/clang/test/Sema/warn-shadow.c +++ b/clang/test/Sema/warn-shadow.c @@ -64,3 +64,10 @@ enum PR24718_1{pr24718}; // expected-note {{previous declaration is here}} void PR24718(void) { enum PR24718_2{pr24718}; // expected-warning {{declaration shadows a variable in the global scope}} } + +struct PR24718_3; +struct PR24718_4 { + enum { + PR24718_3 // Does not shadow a type. + }; +}; diff --git a/clang/test/SemaCXX/warn-shadow.cpp b/clang/test/SemaCXX/warn-shadow.cpp index e4ad352788a..33203f018c8 100644 --- a/clang/test/SemaCXX/warn-shadow.cpp +++ b/clang/test/SemaCXX/warn-shadow.cpp @@ -225,3 +225,10 @@ void f(int a) { int PR24718; enum class X { PR24718 }; // Ok, not shadowing + +struct PR24718_1; +struct PR24718_2 { + enum { + PR24718_1 // Does not shadow a type. + }; +}; |