aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJozef Lawrynowicz <jozef.l@mittosystems.com>2018-07-31 18:17:00 +0000
committerJozef Lawrynowicz <jozefl@gcc.gnu.org>2018-07-31 18:17:00 +0000
commitb06e1dcec5e7e29d12988dc8d2a6d4183f6c91df (patch)
treeb7e96c84e605e1248abeaed0c69f3a360b7b8e6e /gcc
parent31f52518d4a2c1446692c35de01f3b54f2f544c7 (diff)
downloadgcc-b06e1dcec5e7e29d12988dc8d2a6d4183f6c91df.zip
gcc-b06e1dcec5e7e29d12988dc8d2a6d4183f6c91df.tar.gz
gcc-b06e1dcec5e7e29d12988dc8d2a6d4183f6c91df.tar.bz2
re PR middle-end/86705 (pr45678-2.c ICE with msp430-elf -mlarge)
PR middle-end/86705 * gcc/cfgexpand.c (set_parm_rtl): Use the alignment of Pmode when MAX_SUPPORTED_STACK_ALIGNMENT would otherwise be exceeded by the requested variable alignment. (expand_one_ssa_partition): Likewise. (expand_one_var): Likewise. From-SVN: r263177
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/cfgexpand.c10
2 files changed, 14 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d300118..b48ad1f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2018-07-31 Jozef Lawrynowicz <jozef.l@mittosystems.com>
+
+ PR middle-end/86705
+ * gcc/cfgexpand.c (set_parm_rtl): Use the alignment of Pmode when
+ MAX_SUPPORTED_STACK_ALIGNMENT would otherwise be exceeded by the
+ requested variable alignment.
+ (expand_one_ssa_partition): Likewise.
+ (expand_one_var): Likewise.
+
2018-07-31 Richard Earnshaw <rearnsha@arm.com>
* config/pdp11/pdp11.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): Redefine
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index d6e3c38..7353d5d 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -1257,10 +1257,10 @@ set_parm_rtl (tree parm, rtx x)
allocate it, which means that in-frame portion is just a
pointer. ??? We've got a pseudo for sure here, do we
actually dynamically allocate its spilling area if needed?
- ??? Isn't it a problem when POINTER_SIZE also exceeds
- MAX_SUPPORTED_STACK_ALIGNMENT, as on cris and lm32? */
+ ??? Isn't it a problem when Pmode alignment also exceeds
+ MAX_SUPPORTED_STACK_ALIGNMENT, as can happen on cris and lm32? */
if (align > MAX_SUPPORTED_STACK_ALIGNMENT)
- align = POINTER_SIZE;
+ align = GET_MODE_ALIGNMENT (Pmode);
record_alignment_for_reg_var (align);
}
@@ -1381,7 +1381,7 @@ expand_one_ssa_partition (tree var)
/* If the variable alignment is very large we'll dynamicaly allocate
it, which means that in-frame portion is just a pointer. */
if (align > MAX_SUPPORTED_STACK_ALIGNMENT)
- align = POINTER_SIZE;
+ align = GET_MODE_ALIGNMENT (Pmode);
record_alignment_for_reg_var (align);
@@ -1608,7 +1608,7 @@ expand_one_var (tree var, bool toplevel, bool really_expand)
/* If the variable alignment is very large we'll dynamicaly allocate
it, which means that in-frame portion is just a pointer. */
if (align > MAX_SUPPORTED_STACK_ALIGNMENT)
- align = POINTER_SIZE;
+ align = GET_MODE_ALIGNMENT (Pmode);
}
record_alignment_for_reg_var (align);