re PR target/43872 (VLAs are not aligned correctly on ARM)
authorChung-Lin Tang <cltang@codesourcery.com>
Thu, 17 Mar 2011 14:02:12 +0000 (14:02 +0000)
committerChung-Lin Tang <cltang@gcc.gnu.org>
Thu, 17 Mar 2011 14:02:12 +0000 (14:02 +0000)
2011-03-17  Chung-Lin Tang  <cltang@codesourcery.com>

PR target/43872
* config/arm/arm.c (arm_get_frame_offsets): Adjust early
return condition with !cfun->calls_alloca.

From-SVN: r171096

gcc/ChangeLog
gcc/config/arm/arm.c

index d5a5592e04e9b1f0692883254fca961fe1fac13d..bc80f7ab8fb0f246fba169173bf650b8223aa0eb 100644 (file)
@@ -1,3 +1,9 @@
+2011-03-17  Chung-Lin Tang  <cltang@codesourcery.com>
+
+       PR target/43872
+       * config/arm/arm.c (arm_get_frame_offsets): Adjust early
+       return condition with !cfun->calls_alloca.
+
 2011-03-17  Richard Guenther  <rguenther@suse.de>
 
        PR bootstrap/48148
index 85150027b9df5efc9cf34ccd7510993288a3adef..c6ba3fb28fe6be2ee476839d51cb3bc571faed1a 100644 (file)
@@ -15415,7 +15415,10 @@ arm_get_frame_offsets (void)
   offsets->soft_frame = offsets->saved_regs + CALLER_INTERWORKING_SLOT_SIZE;
   /* A leaf function does not need any stack alignment if it has nothing
      on the stack.  */
-  if (leaf && frame_size == 0)
+  if (leaf && frame_size == 0
+      /* However if it calls alloca(), we have a dynamically allocated
+        block of BIGGEST_ALIGNMENT on stack, so still do stack alignment.  */
+      && ! cfun->calls_alloca)
     {
       offsets->outgoing_args = offsets->soft_frame;
       offsets->locals_base = offsets->soft_frame;