forked from OSchip/llvm-project
When marking declarations referenced within an expression (e.g.,
within a default argument), recurse into default arguments. Fixes PR8401, a regression I introduced in r113700 while refactoring our handling of "used" declarations in default arguments. llvm-svn: 116817
This commit is contained in:
parent
418204e523
commit
f0873f4c85
|
@ -8019,6 +8019,10 @@ namespace {
|
|||
void VisitBlockDeclRefExpr(BlockDeclRefExpr *E) {
|
||||
S.MarkDeclarationReferenced(E->getLocation(), E->getDecl());
|
||||
}
|
||||
|
||||
void VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E) {
|
||||
Visit(E->getExpr());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -274,3 +274,21 @@ namespace rdar8427926 {
|
|||
x->g();
|
||||
}
|
||||
}
|
||||
|
||||
namespace PR8401 {
|
||||
template<typename T>
|
||||
struct A {
|
||||
A() { T* x = 1; } // expected-error{{cannot initialize a variable of type 'int *' with an rvalue of type 'int'}}
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct B {
|
||||
B(const A<T>& a = A<T>()); // expected-note{{in instantiation of}}
|
||||
};
|
||||
|
||||
void f(B<int> b = B<int>());
|
||||
|
||||
void g() {
|
||||
f();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue