From 1ad87b632908569ce4b8d01633cebf70b27a9cbe Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Sun, 10 Oct 1993 17:06:36 -0400 Subject: [PATCH] (expand_assignment): Don't short circuit store_expr when TO is a VAR_DECL since it needs special handling if promoted. From-SVN: r5712 --- gcc/expr.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/gcc/expr.c b/gcc/expr.c index 91b2d6e011a..8665f5df783 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -2399,8 +2399,14 @@ expand_assignment (to, from, want_value, suggest_reg) call the function before we start to compute the lhs. This is needed for correct code for cases such as val = setjmp (buf) on machines where reference to val - requires loading up part of an address in a separate insn. */ - if (TREE_CODE (from) == CALL_EXPR && ! aggregate_value_p (from)) + requires loading up part of an address in a separate insn. + + Don't do this if TO is a VAR_DECL whose DECL_RTL is REG since it might be + a promoted variable where the zero- or sign- extension needs to be done. + Handling this in the normal way is safe because no computation is done + before the call. */ + if (TREE_CODE (from) == CALL_EXPR && ! aggregate_value_p (from) + && ! (TREE_CODE (to) == VAR_DECL && GET_CODE (DECL_RTL (to)) == REG)) { rtx value; -- 2.30.2