From 42d1e31d0f0352009d851f52a9cfd5273ad303f8 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Mon, 23 May 2011 11:32:29 -0400 Subject: [PATCH] re PR c++/47336 ([C++0x] ICE: "Error reporting routines re-entered") PR c++/47336 * error.c (dump_template_bindings): Suppress access control. From-SVN: r174072 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/error.c | 2 ++ gcc/testsuite/ChangeLog | 2 ++ gcc/testsuite/g++.dg/cpp0x/error3.C | 24 ++++++++++++++++++++++++ 4 files changed, 31 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/error3.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f4f04f20f0f..4b0b3a12946 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2011-05-23 Jason Merrill + PR c++/47336 + * error.c (dump_template_bindings): Suppress access control. + PR c++/47544 * pt.c (instantiate_decl): Handle =default. diff --git a/gcc/cp/error.c b/gcc/cp/error.c index e580fd92158..a6648cc6647 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -313,7 +313,9 @@ dump_template_bindings (tree parms, tree args, VEC(tree,gc)* typenames) pp_cxx_whitespace (cxx_pp); pp_equal (cxx_pp); pp_cxx_whitespace (cxx_pp); + push_deferring_access_checks (dk_no_check); t = tsubst (t, args, tf_none, NULL_TREE); + pop_deferring_access_checks (); /* Strip typedefs. We can't just use TFF_CHASE_TYPEDEF because pp_simple_type_specifier doesn't know about it. */ t = strip_typedefs (t); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3c18295fa6d..ac13fe55c3d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,7 @@ 2011-05-23 Jason Merrill + * g++.dg/cpp0x/error3.C: New. + * g++.dg/cpp0x/defaulted27.C: New. * g++.dg/cpp0x/decltype27.C: New. diff --git a/gcc/testsuite/g++.dg/cpp0x/error3.C b/gcc/testsuite/g++.dg/cpp0x/error3.C new file mode 100644 index 00000000000..e7da961950e --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/error3.C @@ -0,0 +1,24 @@ +// PR c++/47336 +// { dg-options -std=c++0x } + +template +void g(T t) +{ + t+1; // { dg-error "no match" } +} + +template +class C +{ + struct D {} d; +public: + decltype(g(d)) h() + { + return g(d); + } +}; + +int main() +{ + C().h(); +} -- 2.30.2