From: Gabriel Dos Reis Date: Sun, 16 May 2004 20:27:22 +0000 (+0000) Subject: backport: re PR middle-end/15054 (Bad code due to overlapping stack temporaries) X-Git-Tag: releases/gcc-3.3.4~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=63f44efc40c4a1354338173189e7875135b761da;p=thirdparty%2Fgcc.git backport: re PR middle-end/15054 (Bad code due to overlapping stack temporaries) Backport from mainline 2004-05-01 Ulrich Weigand PR middle-end/15054 * expr.c (expand_expr_real): Do not call preserve_temp_slots on a TARGET_EXPR temp. * function.c (assign_stack_temp_for_type): Set 'keep' flag for TARGET_EXPR temp slots. From-SVN: r81924 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4575407b114e..3f9c4ad91059 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2004-05-16 Gabriel Dos Reis + + Backport from mainline + 2004-05-01 Ulrich Weigand + PR middle-end/15054 + * expr.c (expand_expr_real): Do not call preserve_temp_slots + on a TARGET_EXPR temp. + * function.c (assign_stack_temp_for_type): Set 'keep' flag for + TARGET_EXPR temp slots. + 2004-05-13 Kaz Kojima PR target/15130 diff --git a/gcc/expr.c b/gcc/expr.c index 7f253218a875..a2b0c8305687 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -8991,8 +8991,6 @@ expand_expr (exp, target, tmode, modifier) else { target = assign_temp (type, 2, 0, 1); - /* All temp slots at this level must not conflict. */ - preserve_temp_slots (target); SET_DECL_RTL (slot, target); if (TREE_ADDRESSABLE (slot)) put_var_into_stack (slot, /*rescan=*/false); diff --git a/gcc/function.c b/gcc/function.c index 604655ad9239..f69b78989554 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -777,7 +777,7 @@ assign_stack_temp_for_type (mode, size, keep, type) if (keep == 2) { p->level = target_temp_slot_level; - p->keep = 0; + p->keep = 1; } else if (keep == 3) {