diff options
author | Jason Merrill <jason@redhat.com> | 2010-10-26 13:57:30 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2010-10-26 13:57:30 -0400 |
commit | 701c0df13eb1258e38e1b91a459c9e08d4d42d23 (patch) | |
tree | e02a5250ffd8b2f136a3be9cd41f0d7b11bb7faa /gcc | |
parent | 2c80712872be90ceda8afb904e3b1f8d6501d070 (diff) | |
download | gcc-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/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/pt.c | 18 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/arg8.C | 12 |
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 } |