aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2009-02-18 00:38:28 +0000
committerJoseph Myers <jsm28@gcc.gnu.org>2009-02-18 00:38:28 +0000
commit5600f233ef5f740908f0480b76936e503b1d4cda (patch)
treeb808756b4789718dbb49b44aabd79d616d50a129 /gcc
parentafd1efee35d08f8807f02ce15eddae717c935047 (diff)
downloadgcc-5600f233ef5f740908f0480b76936e503b1d4cda.zip
gcc-5600f233ef5f740908f0480b76936e503b1d4cda.tar.gz
gcc-5600f233ef5f740908f0480b76936e503b1d4cda.tar.bz2
re PR c/35447 (ICE with broken statement expression)
PR c/35447 * c-parser.c (c_parser_compound_statement): Always enter and leave a scope. testsuite: * gcc.dg/noncompile/pr35447-1.c: New test. From-SVN: r144256
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/c-parser.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/noncompile/pr35447-1.c7
4 files changed, 25 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ca77fc4..17869d7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2009-02-18 Joseph Myers <joseph@codesourcery.com>
+
+ PR c/35447
+ * c-parser.c (c_parser_compound_statement): Always enter and leave
+ a scope.
+
2009-02-17 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
PR target/34587
diff --git a/gcc/c-parser.c b/gcc/c-parser.c
index 9aef031..6dfcb60 100644
--- a/gcc/c-parser.c
+++ b/gcc/c-parser.c
@@ -3307,7 +3307,13 @@ c_parser_compound_statement (c_parser *parser)
{
tree stmt;
if (!c_parser_require (parser, CPP_OPEN_BRACE, "expected %<{%>"))
- return error_mark_node;
+ {
+ /* Ensure a scope is entered and left anyway to avoid confusion
+ if we have just prepared to enter a function body. */
+ stmt = c_begin_compound_stmt (true);
+ c_end_compound_stmt (stmt, true);
+ return error_mark_node;
+ }
stmt = c_begin_compound_stmt (true);
c_parser_compound_statement_nostart (parser);
return c_end_compound_stmt (stmt, true);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3cbc3e7..055c2b1 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-02-18 Joseph Myers <joseph@codesourcery.com>
+
+ PR c/35447
+ * gcc.dg/noncompile/pr35447-1.c: New test.
+
2009-02-18 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/36922
diff --git a/gcc/testsuite/gcc.dg/noncompile/pr35447-1.c b/gcc/testsuite/gcc.dg/noncompile/pr35447-1.c
new file mode 100644
index 0000000..9c31e9b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/noncompile/pr35447-1.c
@@ -0,0 +1,7 @@
+/* ICE arising from preparing to enter a scope for a nested function
+ but never doing so. PR 35447. */
+
+void foo()
+{
+ ({ int i().; }); /* { dg-error "expected" } */
+} /* { dg-error "expected" } */