aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2015-07-23 10:11:48 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2015-07-23 10:11:48 +0000
commit25f05e7bf142ad370a0da6681a6971ce565dc5c2 (patch)
tree0a40a5c43bd3f71bca72f5667af3f0cab6688b94
parent7bed1d3d811b3e609593c4ff45ec5c554fba0143 (diff)
downloadgcc-25f05e7bf142ad370a0da6681a6971ce565dc5c2.zip
gcc-25f05e7bf142ad370a0da6681a6971ce565dc5c2.tar.gz
gcc-25f05e7bf142ad370a0da6681a6971ce565dc5c2.tar.bz2
re PR c++/52987 (bogus expected ; before for undeclared type)
/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
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/parser.c3
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/expr/string-2.C2
-rw-r--r--gcc/testsuite/g++.dg/parse/error57.C4
5 files changed, 19 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index bb0385d..7626492 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index f1d5656..920cb61 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -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. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 20fad26..fe273a8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
diff --git a/gcc/testsuite/g++.dg/expr/string-2.C b/gcc/testsuite/g++.dg/expr/string-2.C
index 252fa70..224fd61e 100644
--- a/gcc/testsuite/g++.dg/expr/string-2.C
+++ b/gcc/testsuite/g++.dg/expr/string-2.C
@@ -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
index 0000000..8325a0c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/error57.C
@@ -0,0 +1,4 @@
+// PR c++/52987
+
+int foo(x a) { // { dg-error "9:'x' was not declared in this scope" }
+}