re PR middle-end/86705 (pr45678-2.c ICE with msp430-elf -mlarge)
authorJozef Lawrynowicz <jozef.l@mittosystems.com>
Tue, 31 Jul 2018 18:17:00 +0000 (18:17 +0000)
committerJozef Lawrynowicz <jozefl@gcc.gnu.org>
Tue, 31 Jul 2018 18:17:00 +0000 (18:17 +0000)
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

gcc/ChangeLog
gcc/cfgexpand.c

index d300118cb02623751b46b5a71dbc7e1ac0ce4df2..b48ad1fd491aa4107496239cb5e74643db9ed08b 100644 (file)
@@ -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
index d6e3c382085106f698df85e939136ae7d3d196f5..7353d5dce1285d720de488ad2203b540acd90da3 100644 (file)
@@ -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);