From e87d5702bce47417536d2b480163ab2f56251f86 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Wed, 16 Oct 2013 22:20:35 +0000 Subject: [PATCH] re PR c++/58633 (ICE with decltype of destructor call) /cp 2013-10-16 Paolo Carlini PR c++/58633 * parser.c (cp_parser_pseudo_destructor_name): Revert r174385 changes. /testsuite 2013-10-16 Paolo Carlini PR c++/58633 * g++.dg/cpp0x/decltype57.C: New. * g++.dg/cpp0x/enum18.C: Revert r174385 changes. From-SVN: r203731 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/parser.c | 4 ---- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/g++.dg/cpp0x/decltype57.C | 8 ++++++++ gcc/testsuite/g++.dg/cpp0x/enum18.C | 2 +- 5 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/decltype57.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 35b41c00cb5d..57246b2bb884 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2013-10-16 Paolo Carlini + + PR c++/58633 + * parser.c (cp_parser_pseudo_destructor_name): Revert r174385 changes. + 2013-09-13 Jason Merrill PR c++/58273 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 8f09b97a2302..c230d90c63d4 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -6317,10 +6317,6 @@ cp_parser_pseudo_destructor_name (cp_parser* parser, /* Look for the `~'. */ cp_parser_require (parser, CPP_COMPL, RT_COMPL); - /* Once we see the ~, this has to be a pseudo-destructor. */ - if (!processing_template_decl && !cp_parser_error_occurred (parser)) - cp_parser_commit_to_tentative_parse (parser); - /* Look for the type-name again. We are not responsible for checking that it matches the first type-name. */ *type = cp_parser_nonclass_name (parser); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9861f9106e2d..aa8d6b13f0aa 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2013-10-16 Paolo Carlini + + PR c++/58633 + * g++.dg/cpp0x/decltype57.C: New. + * g++.dg/cpp0x/enum18.C: Revert r174385 changes. + 2013-09-23 Eric Botcazou * gnat.dg/opt28.ad[sb]: New test. diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype57.C b/gcc/testsuite/g++.dg/cpp0x/decltype57.C new file mode 100644 index 000000000000..353cc72c3357 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/decltype57.C @@ -0,0 +1,8 @@ +// PR c++/58633 +// { dg-do compile { target c++11 } } + +void foo(int i) +{ + typedef int I; + decltype(i.I::~I())* p; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/enum18.C b/gcc/testsuite/g++.dg/cpp0x/enum18.C index 306ed8259f97..7361595c00e5 100644 --- a/gcc/testsuite/g++.dg/cpp0x/enum18.C +++ b/gcc/testsuite/g++.dg/cpp0x/enum18.C @@ -4,5 +4,5 @@ int main(void) { enum e {}; e ev; - ev.e::~e_u(); // { dg-error "e_u. has not been declared" } + ev.e::~e_u(); // { dg-error "" } } -- 2.47.2