On 12/18/24 7:39 PM, Alexandre Oliva wrote:

A gimple block with __builtin_unreachable () can't have code after it,
and gimple optimizers ensure there isn't any, even without
optimization.  But if the block requires stack adjustments,
e.g. because of a call that passes arguments on the stack, expand will
emit that after the barrier, and then rtl checkers rightfully
complain.  Arrange to discard adjustments after a barrier.

Strub expanders seem to be necessary to bring about the exact
conditions that require stack adjustments after the block that ends
with a __builtin_unreachable call.

Regstrapped on x86_64-linux-gnu.  Ok to install?


for  gcc/ChangeLog

        PR middle-end/118006
        * cfgexpand.cc (expand_gimple_basic_block): Do not emit
        pending stack adjustments after a barrier.

for  gcc/testsuite/ChangeLog

        PR middle-end/118006
        * gcc.target/i386/strub-pr118006.c: New.
I don't see a cleaner way given how our pending stack adjustment code works.

OK for the trunk.

jeff

Reply via email to