]> gcc.gnu.org Git - gcc.git/commitdiff
pt.c (lookup_template_class): push_tinst_level around call to coerce_template_parms.
authorJason Merrill <jason@redhat.com>
Tue, 26 Oct 2010 17:57:30 +0000 (13:57 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 26 Oct 2010 17:57:30 +0000 (13:57 -0400)
* pt.c (lookup_template_class): push_tinst_level around call to
coerce_template_parms.

From-SVN: r165974

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/arg8.C [new file with mode: 0644]

index e4e6446ed520f843e44af5462f3bc8ff11c67b16..1ec3c639554978aac62e7c13261e879ca6e22a57 100644 (file)
@@ -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.
index 1de5d5527fda35f99e09a030faec6706517f375f..f150d8f61308f303651b64734dbb9cd26e0ab9de 100644 (file)
@@ -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.  */
index b048d8ce27611e9254ee63cae92f86d2838b977d..a00180a3d317135e35d962ee24a637032eb6e4c6 100644 (file)
@@ -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 (file)
index 0000000..5b3a31c
--- /dev/null
@@ -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 }
This page took 0.115485 seconds and 5 git commands to generate.