diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e7068a9a543..c85ff0e8ba0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-10-23 Joseph Myers + + PR c/40033 + * c-typeck.c (c_finish_stmt_expr): Do not wrap error_mark_node in + a C_MAYBE_CONST_EXPR. + 2009-10-23 Michael Meissner PR target/41787 diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index e7425a77d65..3274e0730ec 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -8653,11 +8653,13 @@ c_finish_stmt_expr (location_t loc, tree body) goto continue_searching; } + if (last == error_mark_node) + return last; + /* In the case that the BIND_EXPR is not necessary, return the expression out from inside it. */ - if (last == error_mark_node - || (last == BIND_EXPR_BODY (body) - && BIND_EXPR_VARS (body) == NULL)) + if (last == BIND_EXPR_BODY (body) + && BIND_EXPR_VARS (body) == NULL) { /* Even if this looks constant, do not allow it in a constant expression. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c44b4d7e1b5..e7ba1b656e0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-10-23 Joseph Myers + + PR c/40033 + * gcc.dg/noncompile/pr40033-1.c: New test. + 2009-10-23 Dodji Seketeli PR c++/40808 diff --git a/gcc/testsuite/gcc.dg/noncompile/pr40033-1.c b/gcc/testsuite/gcc.dg/noncompile/pr40033-1.c new file mode 100644 index 00000000000..4f074420783 --- /dev/null +++ b/gcc/testsuite/gcc.dg/noncompile/pr40033-1.c @@ -0,0 +1,7 @@ +/* ICE from error_mark_node being wrapped in a C_MAYBE_CONST_EXPR. PR + 40033. */ + +void foo() +{ + ({ 0,; }); /* { dg-error "expected" } */ +}