https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58372
Uroš Bizjak <ubizjak at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Target|mingw32-sjlj |x86 sjlj CC| |hjl.tools at gmail dot com --- Comment #18 from Uroš Bizjak <ubizjak at gmail dot com> --- Digging a bit deeper: the testcase from Comment #14: __attribute__((__target__("rdrnd"))) void f(unsigned int * b) noexcept { __builtin_ia32_rdrand32_step(b); } also fails for all x86 targets when the compiler is configured with --enable-sjlj-exceptions, so the failure is not mingw specific. Following is x86_64-linux-gnu target: cc1plus -O2 -mpreferred-stack-boundary=4 -quiet -fpreprocessed pr58372.C during RTL pass: ira pr58372.C: In function ‘void f(unsigned int*)’: pr58372.C:4:5: internal compiler error: in ix86_compute_frame_layout, at config/i386/i386.c:11159 4 | } | ^ 0x1821b24 ix86_compute_frame_layout /home/uros/gcc-svn/trunk/gcc/config/i386/i386.c:11159 0x128b447 set_initial_elim_offsets ... -mpreferred-stack-boundary=3 (instead of 4) again "fixes" the ICE. It looks that stack realignment doesn't work with SjLj exceptions. As shown in Comment #15, building the call to _Unwind_SjLj_Register sets crtl->preferred_stack_boundary to 128, but nothing updates crtl->stack_alignment_needed. This leads to the shown assert failure. HJ, do you have an idea what is going wrong with realignment here?