gcc/cp/
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 8 Mar 2009 17:29:12 +0000 (17:29 +0000)
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 8 Mar 2009 17:29:12 +0000 (17:29 +0000)
2009-03-08  H.J. Lu  <hongjiu.lu@intel.com>

PR c++/39060
* parser.c (cp_parser_late_parsing_default_args): Continue
the loop when cp_parser_assignment_expression returns
error_mark_node.

gcc/testsuite/

2009-03-08  H.J. Lu  <hongjiu.lu@intel.com>

PR c++/39060
* g++.dg/other/new1.C: Adjusted.
* g++.dg/parse/crash40.C: Likewise.
* g++.dg/parse/defarg12.C: Likewise.
* g++.dg/template/error15.C: Likewise.

* g++.dg/other/pr39060.C: New.

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

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/new1.C
gcc/testsuite/g++.dg/other/pr39060.C [new file with mode: 0644]
gcc/testsuite/g++.dg/parse/crash40.C
gcc/testsuite/g++.dg/parse/defarg12.C
gcc/testsuite/g++.dg/template/error15.C

index 368843f..c4b151b 100644 (file)
@@ -1,3 +1,10 @@
+2009-03-08  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR c++/39060
+       * parser.c (cp_parser_late_parsing_default_args): Continue
+       the loop when cp_parser_assignment_expression returns
+       error_mark_node.
+
 2009-03-07  Jason Merrill  <jason@redhat.com>
 
        PR c++/39367
index 5c5c912..4c6fd4a 100644 (file)
@@ -18291,6 +18291,11 @@ cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
 
       /* Parse the assignment-expression.  */
       parsed_arg = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
+      if (parsed_arg == error_mark_node)
+       {
+         cp_parser_pop_lexer (parser);
+         continue;
+       }
 
       if (!processing_template_decl)
        parsed_arg = check_default_argument (TREE_VALUE (parm), parsed_arg);
index 1b7a69d..3d44d64 100644 (file)
@@ -1,3 +1,13 @@
+2009-03-08  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR c++/39060
+       * g++.dg/other/new1.C: Adjusted.
+       * g++.dg/parse/crash40.C: Likewise.
+       * g++.dg/parse/defarg12.C: Likewise.
+       * g++.dg/template/error15.C: Likewise.
+
+       * g++.dg/other/pr39060.C: New.
+
 2009-03-07  Jason Merrill  <jason@redhat.com>
 
        PR c++/39367
index 30b6513..7138370 100644 (file)
@@ -10,5 +10,5 @@ struct A
 
 void foo()
 {
-  new A;
+  new A;       // { dg-error "default argument" }
 }
diff --git a/gcc/testsuite/g++.dg/other/pr39060.C b/gcc/testsuite/g++.dg/other/pr39060.C
new file mode 100644 (file)
index 0000000..a625aea
--- /dev/null
@@ -0,0 +1,19 @@
+// PR c++/39060
+// { dg-do compile }
+
+struct A
+{
+  A(void* i=); // { dg-error "with|specification" }
+  A(void* i=); // { dg-error "overloaded" }
+  A(void* i=); // { dg-error "overloaded" }
+
+  void operator+ (void* i=);   // { dg-error "arguments" }
+
+  virtual void foo1(=);        // { dg-error "identifier" }
+  void foo2(=);                // { dg-error "identifier" }
+  void foo3(=);                // { dg-error "identifier" }
+  void foo4(=);                // { dg-error "identifier" }
+  void foo5(=);                // { dg-error "identifier" }
+};     // { dg-error "primary-expression" }
+
+A::A (void* i=) {}     // { dg-error "primary-expression|argument" }
index af44fdb..6a15228 100644 (file)
@@ -37,6 +37,6 @@ void bar()
   int i;
   i.C::foo<0>(); /* { dg-error "which is of non-class type" } */
 
-  S<false> s;
+  S<false> s; /* { dg-error "default argument" } */
   SS<false> ss; /* { dg-error "within this context" } */
 }
index 3717ad5..80ef5c3 100644 (file)
@@ -9,5 +9,5 @@ struct A
 
 void foo()
 {
-  A().i;
+  A().i; /* { dg-error "default argument" } */
 }
index 6bd1f77..b7c7bc8 100644 (file)
@@ -18,7 +18,7 @@ protected:
 
 template <class T>
 void B<T>::g(void) {
-  f();
+  f(); // { dg-error "default argument" }
 }
 
 template class B<long>;