From: Jason Merrill Date: Thu, 26 May 2011 02:22:46 +0000 (-0400) Subject: re PR c++/49156 ([C++0x] Error reporting routines re-entered) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=eda19906998dbfcc1444296fa6a288456339cd17;p=gcc.git re PR c++/49156 ([C++0x] Error reporting routines re-entered) PR c++/49156 * error.c (dump_template_bindings): Set processing_template_decl for a partial instantiation. From-SVN: r174256 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1d0aa92e81c..06d51594bb8 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 2011-05-25 Jason Merrill + PR c++/44944 + PR c++/49156 + * error.c (dump_template_bindings): Set processing_template_decl + for a partial instantiation. + PR c++/45401 * decl.c (grokdeclarator): Don't change type when adding rvalue ref to another reference type. diff --git a/gcc/cp/error.c b/gcc/cp/error.c index a6648cc6647..8d7aaa71c85 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -307,6 +307,7 @@ dump_template_bindings (tree parms, tree args, VEC(tree,gc)* typenames) FOR_EACH_VEC_ELT (tree, typenames, i, t) { + bool dependent = uses_template_parms (args); if (need_comma) pp_separate_with_comma (cxx_pp); dump_type (t, TFF_PLAIN_IDENTIFIER); @@ -314,7 +315,11 @@ dump_template_bindings (tree parms, tree args, VEC(tree,gc)* typenames) pp_equal (cxx_pp); pp_cxx_whitespace (cxx_pp); push_deferring_access_checks (dk_no_check); + if (dependent) + ++processing_template_decl; t = tsubst (t, args, tf_none, NULL_TREE); + if (dependent) + --processing_template_decl; pop_deferring_access_checks (); /* Strip typedefs. We can't just use TFF_CHASE_TYPEDEF because pp_simple_type_specifier doesn't know about it. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e302c74527b..07f4845ee01 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,7 @@ 2011-05-25 Jason Merrill + * g++.dg/cpp0x/error4.C: New. + * g++.dg/cpp0x/rv-restrict.C: New. * g++.dg/cpp0x/enum15.C: New. diff --git a/gcc/testsuite/g++.dg/cpp0x/error4.C b/gcc/testsuite/g++.dg/cpp0x/error4.C new file mode 100644 index 00000000000..29a1cddab16 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/error4.C @@ -0,0 +1,22 @@ +// PR c++/49156 +// { dg-options -std=c++0x } + +template T declval(); + +template +struct S { + + template + static U get(const volatile T&); + + template + static decltype(*declval()) get(...); + + typedef decltype(get(declval())) type; // { dg-error "no match" } +}; + +struct X { }; + +S::type x; + +// { dg-prune-output "note" }