re PR c++/30158 (ICE with invalid statement-expressions)

2007-02-15  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        PR C++/30158
        * semantics.c (finish_stmt_expr_expr): Set TREE_TYPE of the
        statement expression if we had an error mark node.
2007-02-15  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        PR C++/30158
        * g++.dg/ext/stmtexpr10.C: New testcase.

From-SVN: r122028
This commit is contained in:
Andrew Pinski 2007-02-16 01:23:35 +00:00 committed by Andrew Pinski
parent d3d6f724f2
commit 76b9a2a1cd
4 changed files with 33 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2007-02-15 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR C++/30158
* semantics.c (finish_stmt_expr_expr): Set TREE_TYPE of the
statement expression if we had an error mark node.
2007-02-15 Sandra Loosemore <sandra@codesourcery.com>
Brooks Moses <brooks.moses@codesourcery.com>
Lee Millward <lee.millward@codesourcery.com>

View File

@ -1631,7 +1631,12 @@ tree
finish_stmt_expr_expr (tree expr, tree stmt_expr)
{
if (error_operand_p (expr))
return error_mark_node;
{
/* The type of the statement-expression is the type of the last
expression. */
TREE_TYPE (stmt_expr) = error_mark_node;
return error_mark_node;
}
/* If the last statement does not have "void" type, then the value
of the last statement is the value of the entire expression. */

View File

@ -1,3 +1,8 @@
2007-02-15 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR C++/30158
* g++.dg/ext/stmtexpr10.C: New testcase.
2007-02-15 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR middle-end/30729

View File

@ -0,0 +1,16 @@
/* { dg-do compile } " */
/* { dg-options "" } */
void foo(int i)
{
(i ? 1 : 2) = ({ X; }); /* { dg-error "" } */
}
struct A
{
~A ();
void foo()
{
delete this = ({ X; }); /* { dg-error "" } */
}
};