https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124454
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |pinskia at gcc dot gnu.org
Keywords| |EH
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #3)
> Means delete_unreachable_blocks is missing somewhere. Possibly the -fno-*
> suppresses that and some parts leaving dangling blocks fail to cleanup
> themselves.
>
> Needs a look at which pass exposes the unreachable blocks.
-fnon-call-exceptions which tells me most likely it is an unreachable eh
landing pad.
In fact it looks like we remove REG_EH_REGION in split3 from:
(insn 69 62 70 4 (set (reg:SI 1 x1 [orig:107 _12 ] [107])
(zero_extend:SI (mem:QI (plus:DI (reg/f:DI 31 sp)
(const_int 56 [0x38])) [0 MEM[(char *)_4]+0 S1 A64])))
"/app/example.cpp":8:7 discrim 1 149 {*zero_extendqisi2_aarch64}
(expr_list:REG_EH_REGION (const_int 2 [0x2])
(nil)))
to:
(insn 69 62 70 12 (set (reg:SI 1 x1 [orig:107 _12 ] [107])
(zero_extend:SI (mem:QI (plus:DI (reg/f:DI 31 sp)
(const_int 56 [0x38])) [0 MEM[(char *)_4]+0 S1 A64])))
"/app/example.cpp":8:7 discrim 1 149 {*zero_extendqisi2_aarch64}
(nil))
(which is correct as it is a store the stack) and most likely don't cleanup
after that.
I have not looked into split to see where it removes the REG_EH_REGION/checks
the trapping part yet.