Fix for assertion when solving unresolved templates.

Patch by Magee, Josh.

llvm-svn: 162737
This commit is contained in:
Rafael Espindola 2012-08-28 04:13:54 +00:00
parent cdfe1d1cdb
commit 3dd531dbd4
2 changed files with 23 additions and 1 deletions

View File

@ -7487,7 +7487,8 @@ TreeTransform<Derived>::TransformUnresolvedLookupExpr(
// If we have template arguments, rebuild them, then rebuild the
// templateid expression.
TemplateArgumentListInfo TransArgs(Old->getLAngleLoc(), Old->getRAngleLoc());
if (getDerived().TransformTemplateArguments(Old->getTemplateArgs(),
if (Old->hasExplicitTemplateArgs() &&
getDerived().TransformTemplateArguments(Old->getTemplateArgs(),
Old->getNumTemplateArgs(),
TransArgs))
return ExprError();

View File

@ -0,0 +1,21 @@
// RUN: %clang_cc1 -verify -fsyntax-only %s
// Verify the absence of assertion failures when solving calls to unresolved
// template member functions.
struct A {
template <typename T>
static void bar(int) { } // expected-note {{candidate template ignored: couldn't infer template argument 'T'}}
};
struct B {
template <int i>
static void foo() {
int array[i];
A::template bar(array[0]); // expected-error {{no matching function for call to 'bar'}}
}
};
int main() {
B::foo<4>(); // expected-note {{in instantiation of function template specialization 'B::foo<4>'}}
return 0;
}