aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2010-10-26 13:57:30 -0400
committerJason Merrill <jason@gcc.gnu.org>2010-10-26 13:57:30 -0400
commit701c0df13eb1258e38e1b91a459c9e08d4d42d23 (patch)
treee02a5250ffd8b2f136a3be9cd41f0d7b11bb7faa /gcc
parent2c80712872be90ceda8afb904e3b1f8d6501d070 (diff)
downloadgcc-701c0df13eb1258e38e1b91a459c9e08d4d42d23.zip
gcc-701c0df13eb1258e38e1b91a459c9e08d4d42d23.tar.gz
gcc-701c0df13eb1258e38e1b91a459c9e08d4d42d23.tar.bz2
pt.c (lookup_template_class): push_tinst_level around call to coerce_template_parms.
* pt.c (lookup_template_class): push_tinst_level around call to coerce_template_parms. From-SVN: r165974
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/pt.c18
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/template/arg8.C12
4 files changed, 30 insertions, 7 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index e4e6446..1ec3c63 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2010-10-26 Jason Merrill <jason@redhat.com>
+ * pt.c (lookup_template_class): push_tinst_level around call to
+ coerce_template_parms.
+
* tree.c (stabilize_expr): Handle xvalues properly.
* call.c (build_over_call): Use argarray[0] for 'this' argument.
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 1de5d55..f150d8f 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -6595,13 +6595,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. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b048d8c..a00180a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2010-10-26 Jason Merrill <jason@redhat.com>
+
+ * g++.dg/template/arg8.C: Test for helpful diagnostic.
+
2010-10-26 Janus Weil <janus@gcc.gnu.org>
PR fortran/42647
diff --git a/gcc/testsuite/g++.dg/template/arg8.C b/gcc/testsuite/g++.dg/template/arg8.C
new file mode 100644
index 0000000..5b3a31c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/arg8.C
@@ -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 }