re PR c++/7050 (g++ segfaults on: (i ? get_string() : throw))
PR c++/7050 * expr.c (store_expr): Don't attempt to store void-typed trees, just evaluate them for side effects. * cp/expr.c (cxx_expand_expr): Return const0_rtx for throw expressions. From-SVN: r64270
This commit is contained in:
parent
1efede7e34
commit
731361b379
|
@ -1,3 +1,9 @@
|
|||
2003-03-12 Andrew Lewycky <andrew@mxc.ca>
|
||||
|
||||
PR c++/7050
|
||||
* expr.c (store_expr): Don't attempt to store void-typed trees,
|
||||
just evaluate them for side effects.
|
||||
|
||||
2003-03-12 Bob Wilson <bob.wilson@acm.org>
|
||||
|
||||
Backport from mainline:
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2003-03-12 Andrew Lewycky <andrew@mxc.ca>
|
||||
|
||||
PR c++/7050
|
||||
* expr.c (cxx_expand_expr): Return const0_rtx for throw
|
||||
expressions.
|
||||
|
||||
2003-03-10 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/9798
|
||||
|
|
|
@ -111,7 +111,7 @@ cplus_expand_expr (exp, target, tmode, modifier)
|
|||
|
||||
case THROW_EXPR:
|
||||
expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, 0);
|
||||
return NULL;
|
||||
return const0_rtx;
|
||||
|
||||
case MUST_NOT_THROW_EXPR:
|
||||
expand_eh_region_start ();
|
||||
|
|
10
gcc/expr.c
10
gcc/expr.c
|
@ -3917,6 +3917,16 @@ store_expr (exp, target, want_value)
|
|||
int dont_return_target = 0;
|
||||
int dont_store_target = 0;
|
||||
|
||||
if (VOID_TYPE_P (TREE_TYPE (exp)))
|
||||
{
|
||||
/* C++ can generate ?: expressions with a throw expression in one
|
||||
branch and an rvalue in the other. Here, we resolve attempts to
|
||||
store the throw expression's nonexistant result. */
|
||||
if (want_value)
|
||||
abort ();
|
||||
expand_expr (exp, const0_rtx, VOIDmode, 0);
|
||||
return NULL_RTX;
|
||||
}
|
||||
if (TREE_CODE (exp) == COMPOUND_EXPR)
|
||||
{
|
||||
/* Perform first part of compound expression, then assign from second
|
||||
|
|
Loading…
Reference in New Issue