From b1a70c6bba0e5771ab60f3d67a80b80498a374ad Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Mon, 7 Oct 2002 09:39:20 +0200 Subject: [PATCH] re PR c/7411 (cistore.c:392: Internal compiler error in instantiate_virtual_regs_1, at function.c:3974) PR c/7411 * expr.c (expand_expr) [PLUS]: Simplify after the operands have been expanded in EXPAND_NORMAL mode. Co-Authored-By: Volker Reichelt From-SVN: r57884 --- gcc/ChangeLog | 7 +++++++ gcc/expr.c | 15 +++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8edbd8f21807..315e80094387 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2002-09-25 Eric Botcazou + Volker Reichelt + + PR c/7411 + * expr.c (expand_expr) [PLUS]: Simplify after the operands + have been expanded in EXPAND_NORMAL mode. + 2002-10-06 Richard Henderson * config/rs6000/rs6000.md (load_toc_v4_PIC_2): Fix base constraint. diff --git a/gcc/expr.c b/gcc/expr.c index a7d78a121a6e..99f7fcf84b0c 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -7588,16 +7588,23 @@ expand_expr (exp, target, tmode, modifier) } } + if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1)) + subtarget = 0; + /* No sense saving up arithmetic to be done if it's all in the wrong mode to form part of an address. And force_operand won't know whether to sign-extend or zero-extend. */ if ((modifier != EXPAND_SUM && modifier != EXPAND_INITIALIZER) || mode != ptr_mode) - goto binop; - - if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1)) - subtarget = 0; + { + op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, 0); + op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, 0); + temp = simplify_binary_operation (PLUS, mode, op0, op1); + if (temp) + return temp; + goto binop2; + } op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, modifier); op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, modifier); -- 2.47.2