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: r64268
This commit is contained in:
Andrew Lewycky 2003-03-12 17:24:48 -05:00 committed by Jason Merrill
parent ff8b9ca85f
commit 847311f457
4 changed files with 27 additions and 5 deletions

View File

@ -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 Neil Booth <neil@daikokuya.co.uk>
* cppfiles.c (cpp_rename_file, cpp_push_include): New.
@ -9,10 +15,10 @@
2003-03-12 Nathanael Nerode <neroden@gcc.gnu.org>
* aclocal.m4: Introduce gcc_GAS_VERSION_GTE_IFELSE,
_gcc_COMPUTE_GAS_VERSION.
* configure.in: Use them.
* configure: Regenerate.
* aclocal.m4: Introduce gcc_GAS_VERSION_GTE_IFELSE,
_gcc_COMPUTE_GAS_VERSION.
* configure.in: Use them.
* configure: Regenerate.
2003-03-12 Bob Wilson <bob.wilson@acm.org>

View File

@ -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-11 Mark Mitchell <mark@codesourcery.com>
PR c++/9474

View File

@ -105,7 +105,7 @@ cxx_expand_expr (tree exp, rtx target, enum machine_mode tmode, int 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 ();

View File

@ -4354,6 +4354,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