https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113109
--- Comment #3 from Hans-Peter Nilsson <hp at gcc dot gnu.org> --- It's __builtin_eh_return( that's miscompiled, such that the "handler" isn't installed and the calling function will return to its caller instead of the handler. For the example below: void f(__UINTPTR_TYPE__ p1, void *p2) { __builtin_eh_return(p1, p2); } ...there's a tell-tale diff between 6673 and 6674 in generated assembly code at -O2: @@ -23,7 +23,6 @@ _f: move.d $r13,[$sp] .LCFI5: move.d $r10,$r9 - move.d $r11,[$sp+16] move.d [$sp+],$r13 move.d [$sp+],$r12 move.d [$sp+],$r11 cris.h defines EH_RETURN_HANDLER_RTX (as a call to cris_return_addr_rtx yielding) gen_rtx_MEM (Pmode, plus_constant (Pmode, virtual_incoming_args_rtx, -4)). I'm "guessing" that the problem with the patch, is that anything any port stores through a pointer based on virtual_incoming_args_rtx before returning, is now eliminated.