diff options
author | Jason Merrill <jason@redhat.com> | 2011-05-25 22:22:46 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-05-25 22:22:46 -0400 |
commit | eda19906998dbfcc1444296fa6a288456339cd17 (patch) | |
tree | 4d1f981999df88f8339e69192f2340e64f81747b /gcc | |
parent | dc31ddad44bb44e5f715d0f730e16166621c573c (diff) | |
download | gcc-eda19906998dbfcc1444296fa6a288456339cd17.zip gcc-eda19906998dbfcc1444296fa6a288456339cd17.tar.gz gcc-eda19906998dbfcc1444296fa6a288456339cd17.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/error.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/error4.C | 22 |
4 files changed, 34 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1d0aa92..06d5159 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 2011-05-25 Jason Merrill <jason@redhat.com> + 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 a6648cc..8d7aaa7 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 e302c74..07f4845 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,7 @@ 2011-05-25 Jason Merrill <jason@redhat.com> + * 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 0000000..29a1cdd --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/error4.C @@ -0,0 +1,22 @@ +// PR c++/49156 +// { dg-options -std=c++0x } + +template<typename T> T declval(); + +template<typename T> +struct S { + + template<typename U> + static U get(const volatile T&); + + template<typename U> + static decltype(*declval<U>()) get(...); + + typedef decltype(get<T>(declval<T>())) type; // { dg-error "no match" } +}; + +struct X { }; + +S<X>::type x; + +// { dg-prune-output "note" } |