aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2013-06-14 18:07:30 +0930
committerAlan Modra <amodra@gcc.gnu.org>2013-06-14 18:07:30 +0930
commitef7e7ab2782ad3efd51e6803e71435cd155e5fa5 (patch)
tree1efb80e66a3e16d26c1db3039a2645a1f1b9e4a2 /gcc/expr.c
parent48f316eafeb6fa1196298313a03783901c00782b (diff)
downloadgcc-ef7e7ab2782ad3efd51e6803e71435cd155e5fa5.zip
gcc-ef7e7ab2782ad3efd51e6803e71435cd155e5fa5.tar.gz
gcc-ef7e7ab2782ad3efd51e6803e71435cd155e5fa5.tar.bz2
re PR middle-end/57134 (ICE with -mstrict-align and inline assembly on ppc64)
PR middle-end/57134 PR middle-end/57586 * expr.c (expand_expr_real_1 <normal_inner_ref>): Pass EXPAND_MEMORY and EXPAND_WRITE to recursive call. Don't use bitfield expansion when EXPAND_MEMORY. (expand_expr_real_1 <VIEW_CONVERT_EXPR>): Pass modifier likewise. * gcc.dg/pr57134.c: New. From-SVN: r200086
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c12
1 files changed, 3 insertions, 9 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 2cdb87c..c68f489 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -9909,11 +9909,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
&& modifier != EXPAND_STACK_PARM
? target : NULL_RTX),
VOIDmode,
- (modifier == EXPAND_INITIALIZER
- || modifier == EXPAND_CONST_ADDRESS
- || modifier == EXPAND_STACK_PARM)
- ? modifier : EXPAND_NORMAL);
-
+ modifier == EXPAND_SUM ? EXPAND_NORMAL : modifier);
/* If the bitfield is volatile, we want to access it in the
field's mode, not the computed mode.
@@ -10072,6 +10068,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
|| (MEM_P (op0)
&& (MEM_ALIGN (op0) < GET_MODE_ALIGNMENT (mode1)
|| (bitpos % GET_MODE_ALIGNMENT (mode1) != 0))))
+ && modifier != EXPAND_MEMORY
&& ((modifier == EXPAND_CONST_ADDRESS
|| modifier == EXPAND_INITIALIZER)
? STRICT_ALIGNMENT
@@ -10271,10 +10268,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
&& modifier != EXPAND_STACK_PARM
? target : NULL_RTX),
VOIDmode,
- (modifier == EXPAND_INITIALIZER
- || modifier == EXPAND_CONST_ADDRESS
- || modifier == EXPAND_STACK_PARM)
- ? modifier : EXPAND_NORMAL);
+ modifier == EXPAND_SUM ? EXPAND_NORMAL : modifier);
if (MEM_P (orig_op0))
{