зеркало из https://github.com/microsoft/clang-1.git
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:
Родитель
1e52dfc648
Коммит
651f86fb6b
|
@ -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);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче