http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58372

Kai Tietz <ktietz at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|WAITING                     |NEW
                 CC|                            |ktietz at gcc dot gnu.org

--- Comment #8 from Kai Tietz <ktietz at gcc dot gnu.org> ---
So assert trigger here is:
'gcc_assert (preferred_alignment <= stack_alignment_needed);'

Caused because because
(gdb) print preferred_alignment
$1 = 16
(gdb) print stack_alignment_needed
$2 = 4

So hacky variant to fix that would be to enforce that preferred and
stack-alignment_needed are set identical

Index: i386.c
===================================================================
--- i386.c      (Revision 205860)
+++ i386.c      (Arbeitskopie)
@@ -9362,6 +9362,14 @@ ix86_compute_frame_layout (struct ix86_frame *fram
       crtl->stack_alignment_needed = 128;
     }

+  /* If preferred_alignment is bigger then stack_alignment_needed
+     make both sizes equal.  */
+  if (preferred_alignment > stack_alignment_needed)
+    {
+      stack_alignment_needed = preferred_alignment;
+      crtl->stack_alignment_needed = crtl->preferred_stack_boundary;
+    }
+
   gcc_assert (!size || stack_alignment_needed);
   gcc_assert (preferred_alignment >= STACK_BOUNDARY / BITS_PER_UNIT);
   gcc_assert (preferred_alignment <= stack_alignment_needed);

Reply via email to