commit 07d43402f88ca5c539d670657cbe0b7b18b43f36
Author: Jason Merrill <jason@redhat.com>
Date: Tue Oct 26 00:47:47 2010 -0400
* pt.c (lookup_template_class): push_tinst_level around call to
coerce_template_parms.
@@ -6600,13 +6600,17 @@ lookup_template_class (tree d1,
arglist = bound_args;
}
else
- arglist
- = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
- INNERMOST_TEMPLATE_ARGS (arglist),
- gen_tmpl,
- complain,
- /*require_all_args=*/true,
- /*use_default_args=*/true);
+ {
+ push_tinst_level (templ);
+ arglist
+ = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
+ INNERMOST_TEMPLATE_ARGS (arglist),
+ gen_tmpl,
+ complain,
+ /*require_all_args=*/true,
+ /*use_default_args=*/true);
+ pop_tinst_level ();
+ }
if (arglist == error_mark_node)
/* We were unable to bind the arguments. */
new file mode 100644
@@ -0,0 +1,12 @@
+// Test for a message indicating what template we're trying to convert
+// arguments for. We can't actually test for it directly because it
+// doesn't have an associated line number, but we can test for the
+// "instantiated from here" message that follows.
+
+template <int I>
+struct A { };
+
+int i;
+A<i> a; // { dg-message "instantiated from here" }
+// { dg-error "not a valid template argument" "" { target *-*-* } 10 }
+// { dg-error "invalid type in declaration" "" { target *-*-* } 10 }