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.

Reply via email to