[Bug c++/58372] internal compiler error: ix86_compute_frame_layout

ubizjak at gmail dot com gcc-bugzilla@gcc.gnu.org
Thu Nov 1 15:46:00 GMT 2018


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

--- Comment #40 from Uroš Bizjak <ubizjak at gmail dot com> ---
(In reply to Terry Guo from comment #39)
> (In reply to Uroš Bizjak from comment #38)
> > (In reply to Terry Guo from comment #36)
> > 
> > > OK. Do it right now.
> > 
> > I think that latest attachment is the one that should be tested.
> > Functionally it is the same, but avoids unnecessary variable updates before
> > expand_stack_alignment is called. expand_stack_alignment will do everything
> > for us.
> 
> Yes. The latest one works perfectly. Bootstrap and regression test on x86_64
> show no problem. I also managed to build a gcc for i686-w64-mingw32 with
> SJLJ enabled, the case can be compiled successfully.

Then we can just move the call to finish_eh_generation in pass_expand::execute
in front of expand_stack_alignment:

--cut here--
Index: cfgexpand.c
===================================================================
--- cfgexpand.c (revision 265582)
+++ cfgexpand.c (working copy)
@@ -6510,6 +6510,12 @@ pass_expand::execute (function *fun)
   find_many_sub_basic_blocks (blocks);
   purge_all_dead_edges ();

+  /* After initial rtl generation, call back to finish generating
+     exception support code.  We need to do this before cleaning up
+     the CFG as the code does not expect dead landing pads.  */
+  if (fun->eh->region_tree != NULL)
+    finish_eh_generation ();
+
   expand_stack_alignment ();

   /* Fixup REG_EQUIV notes in the prologue if there are tailcalls in this
@@ -6517,12 +6523,6 @@ pass_expand::execute (function *fun)
   if (crtl->tail_call_emit)
     fixup_tail_calls ();

-  /* After initial rtl generation, call back to finish generating
-     exception support code.  We need to do this before cleaning up
-     the CFG as the code does not expect dead landing pads.  */
-  if (fun->eh->region_tree != NULL)
-    finish_eh_generation ();
-
   /* BB subdivision may have created basic blocks that are are only reachable
      from unlikely bbs but not marked as such in the profile.  */
   if (optimize)
--cut here--

And indeed, the above patch works without problems for me.


More information about the Gcc-bugs mailing list