OSDN Git Service

PR c++/47277
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 28 May 2011 22:01:28 +0000 (22:01 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 28 May 2011 22:01:28 +0000 (22:01 +0000)
* parser.c (cp_parser_pseudo_destructor_name): Commit to parse
after we see the ~.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@174385 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/enum18.C

index 269e0d1..1f39aeb 100644 (file)
@@ -1,5 +1,9 @@
 2011-05-27  Jason Merrill  <jason@redhat.com>
 
+       PR c++/47277
+       * parser.c (cp_parser_pseudo_destructor_name): Commit to parse
+       after we see the ~.
+
        * mangle.c (mangle_decl_string): Make sure we don't try to mangle
        templates.
 
index a16ba89..75ad3f8 100644 (file)
@@ -5642,6 +5642,11 @@ 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);
index 36edc22..8e55e4b 100644 (file)
@@ -1,5 +1,7 @@
 2011-05-27  Jason Merrill  <jason@redhat.com>
 
+       * g++.dg/cpp0x/enum18.C: Adjust.
+
        * g++.dg/cpp0x/lambda/lambda-template2.C: New.
 
 2011-05-27  Tobias Burnus  <burnus@net-b.de>
index 5575ca6..306ed82 100644 (file)
@@ -2,7 +2,7 @@
 // { dg-options -std=c++0x }
 
 int main(void) {
-           enum e {};
-           e ev;
-           ev.e::~e_u();       // { dg-error "" }
+  enum e {};
+  e ev;
+  ev.e::~e_u();        // { dg-error "e_u. has not been declared" }
 }