re PR c++/52987 (bogus expected ; before for undeclared type)
authorPaolo Carlini <paolo.carlini@oracle.com>
Thu, 23 Jul 2015 10:11:48 +0000 (10:11 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Thu, 23 Jul 2015 10:11:48 +0000 (10:11 +0000)
/cp
2015-07-23  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/52987
* parser.c (cp_parser_simple_declaration): Robustify check avoiding
redundant error messages.

/testsuite
2015-07-23  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/52987
* g++.dg/parse/error57.C: New.
* g++.dg/expr/string-2.C: Update.

From-SVN: r226097

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/expr/string-2.C
gcc/testsuite/g++.dg/parse/error57.C [new file with mode: 0644]

index bb0385d8b1715542ad3956bdd57923f65e80f38e..7626492934a23d366ca354989e6c11f93deea7ef 100644 (file)
@@ -1,3 +1,9 @@
+2015-07-23  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/52987
+       * parser.c (cp_parser_simple_declaration): Robustify check avoiding
+       redundant error messages.
+
 2015-07-21  Paolo Carlini  <paolo.carlini@oracle.com>
 
        * decl.c (grokdeclarator): For an erroneous template parameter
index f1d5656055ce06760e08ef99a9c64f582f6a3876..920cb61ee06d698f08bb68d228ef57bc63b975ef 100644 (file)
@@ -11660,7 +11660,8 @@ cp_parser_simple_declaration (cp_parser* parser,
        {
          /* If we have already issued an error message we don't need
             to issue another one.  */
-         if (decl != error_mark_node
+         if ((decl != error_mark_node
+              && DECL_INITIAL (decl) != error_mark_node)
              || cp_parser_uncommitted_to_tentative_parse_p (parser))
            cp_parser_error (parser, "expected %<,%> or %<;%>");
          /* Skip tokens until we reach the end of the statement.  */
index 20fad268d2dfdca34b48e2e6b7726a55d51888ce..fe273a8d861c128b61011f6bbf8690309b46369d 100644 (file)
@@ -1,3 +1,9 @@
+2015-07-23  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/52987
+       * g++.dg/parse/error57.C: New.
+       * g++.dg/expr/string-2.C: Update.
+
 2015-07-23  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/66945
index 252fa70364a533d93556f46d0be4d347e07d0390..224fd61e0867ec84bd61d9c6ebc88162a834b48a 100644 (file)
@@ -4,7 +4,7 @@
 char a[1];
 
 int foo(a = "") // { dg-error "invalid array assignment" }
-{ // { dg-error "" }
+{
   return 0;
 }
 
diff --git a/gcc/testsuite/g++.dg/parse/error57.C b/gcc/testsuite/g++.dg/parse/error57.C
new file mode 100644 (file)
index 0000000..8325a0c
--- /dev/null
@@ -0,0 +1,4 @@
+// PR c++/52987
+
+int foo(x a) {  // { dg-error "9:'x' was not declared in this scope" }
+}