In Sema::CheckShadow, get the DeclContext from the variable that we are checking

instead from the Scope; Inner scopes in bodies don't have DeclContexts associated with them.

Fixes http://llvm.org/PR9160 & rdar://problem/8966163.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125097 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Argyrios Kyrtzidis 2011-02-08 18:21:25 +00:00
Родитель 1e52dfc648
Коммит 651f86fb6b
2 изменённых файлов: 18 добавлений и 4 удалений

Просмотреть файл

@ -3121,10 +3121,9 @@ void Sema::CheckShadow(Scope *S, VarDecl *D, const LookupResult& R) {
Diagnostic::Ignored)
return;
// Don't diagnose declarations at file scope. The scope might not
// have a DeclContext if (e.g.) we're parsing a function prototype.
DeclContext *NewDC = static_cast<DeclContext*>(S->getEntity());
if (NewDC && NewDC->isFileContext())
// Don't diagnose declarations at file scope.
DeclContext *NewDC = D->getDeclContext();
if (NewDC->isFileContext())
return;
// Only diagnose if we're shadowing an unambiguous field or variable.

Просмотреть файл

@ -55,3 +55,18 @@ void Foo::Baz() {
double Bar = 12; // Don't warn.
}
}
// http://llvm.org/PR9160
namespace PR9160 {
struct V {
V(int);
};
struct S {
V v;
static void m() {
if (1) {
V v(0);
}
}
};
}