forked from OSchip/llvm-project
Improve -Wshadow warnings with enumerators.
Addresses PR24718 by checking for enumerators that shadow other enumerators. Catches issues like: enum E1{e1}; void f(void) { enum E2{e1}; } llvm-svn: 344259
This commit is contained in:
parent
61adf8aeb4
commit
20ea72476c
|
@ -16269,8 +16269,10 @@ Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst,
|
|||
|
||||
// Verify that there isn't already something declared with this name in this
|
||||
// scope.
|
||||
NamedDecl *PrevDecl = LookupSingleName(S, Id, IdLoc, LookupOrdinaryName,
|
||||
ForVisibleRedeclaration);
|
||||
LookupResult R(*this, Id, IdLoc, LookupOrdinaryName, ForVisibleRedeclaration);
|
||||
LookupName(R, S);
|
||||
NamedDecl *PrevDecl = R.getAsSingle<NamedDecl>();
|
||||
|
||||
if (PrevDecl && PrevDecl->isTemplateParameter()) {
|
||||
// Maybe we will complain about the shadowed template parameter.
|
||||
DiagnoseTemplateParameterShadow(IdLoc, PrevDecl);
|
||||
|
@ -16293,6 +16295,11 @@ Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst,
|
|||
return nullptr;
|
||||
|
||||
if (PrevDecl) {
|
||||
if (!TheEnumDecl->isScoped()) {
|
||||
// Check for other kinds of shadowing not already handled.
|
||||
CheckShadow(New, PrevDecl, R);
|
||||
}
|
||||
|
||||
// When in C++, we may get a TagDecl with the same name; in this case the
|
||||
// enum constant will 'hide' the tag.
|
||||
assert((getLangOpts().CPlusPlus || !isa<TagDecl>(PrevDecl)) &&
|
||||
|
|
|
@ -59,3 +59,8 @@ void rdar8883302() {
|
|||
void test8() {
|
||||
int bob; // expected-warning {{declaration shadows a variable in the global scope}}
|
||||
}
|
||||
|
||||
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}}
|
||||
}
|
||||
|
|
|
@ -222,3 +222,6 @@ void f(int a) {
|
|||
};
|
||||
}
|
||||
}
|
||||
|
||||
int PR24718;
|
||||
enum class X { PR24718 }; // Ok, not shadowing
|
||||
|
|
Loading…
Reference in New Issue