On Tue, 1 Jul 2025, Jakub Jelinek wrote:

> On Tue, Jul 01, 2025 at 10:43:09AM +0200, Richard Biener wrote:
> > > The following patch fixes that by
> > > 1) moving the musttail pass 2 passes earlier (this is mostly just
> > >    for -O0/-Og, for normal optimization levels musttail calls are
> > >    handled in the tailc pass), i.e. across the sanopt and cleanup_eh
> > >    passes
> > 
> > didn't we have other cases where cleanup_eh was required for musttail
> > to work?  So I think we want to have that before musttail?  We should
> > be able to swap sanopt and eh_cleanup?
> 
> I think we've discussed we want to try for GCC 16 cleanup_eh somewhere in
> the -O1+ optimization pass set, in between IPA and tailc (and I'll try to do
> that at some point during stage1).
> 
> I've actually tried
> --- gcc/passes.def    2025-06-30 22:16:11.258688529 +0200
> +++ gcc/passes.def    2025-07-01 10:47:37.020634803 +0200
> @@ -444,9 +444,9 @@ along with GCC; see the file COPYING3.
>    NEXT_PASS (pass_lower_switch_O0);
>    NEXT_PASS (pass_asan_O0);
>    NEXT_PASS (pass_tsan_O0);
> -  NEXT_PASS (pass_sanopt);
>    NEXT_PASS (pass_cleanup_eh);
>    NEXT_PASS (pass_musttail);
> +  NEXT_PASS (pass_sanopt);
>    NEXT_PASS (pass_lower_resx);
>    NEXT_PASS (pass_nrv);
>    NEXT_PASS (pass_gimple_isel);
> together with the non-empty_eh_cleanup tree-tailcall.cc changes from the
> patch, but that resulted in the following ICE:
> /home/jakub/src/gcc/gcc/testsuite/gcc.dg/asan/pr106190.c: In function 'main':
> /home/jakub/src/gcc/gcc/testsuite/gcc.dg/asan/pr106190.c:6:1: internal 
> compiler error: in expand_builtin_eh_common, at except.cc:2097
> 0x2dc62cf internal_error(char const*, ...)
>         ../../gcc/diagnostic-global-context.cc:517
> 0xeaeced fancy_abort(char const*, int, char const*)
>         ../../gcc/diagnostic.cc:1810
> 0x81940a expand_builtin_eh_common
>         ../../gcc/except.cc:2097
> 0x11ad909 expand_builtin_eh_pointer(tree_node*)
>         ../../gcc/except.cc:2108
> 0x11deac2 expand_expr_real_1(tree_node*, rtx_def*, machine_mode, 
> expand_modifier, rtx_def**, bool)
>         ../../gcc/expr.cc:12535
> 0x11ecddd store_expr(tree_node*, rtx_def*, int, bool, bool)
>         ../../gcc/expr.cc:6762
> 0x11efb28 expand_assignment(tree_node*, tree_node*, bool)
>         ../../gcc/expr.cc:6483
> 0x11efb28 expand_assignment(tree_node*, tree_node*, bool)
>         ../../gcc/expr.cc:5971
> 0x1093629 expand_call_stmt
>         ../../gcc/cfgexpand.cc:3202
> 0x1093629 expand_gimple_stmt_1
>         ../../gcc/cfgexpand.cc:4276
> 0x1093629 expand_gimple_stmt
>         ../../gcc/cfgexpand.cc:4423
> 0x1095617 expand_gimple_basic_block
>         ../../gcc/cfgexpand.cc:6539
> 0x1097a07 execute
>         ../../gcc/cfgexpand.cc:7286
> 
> Given that empty_eh_cleanup handles already almost everything, just
> didn't know how to handle the resx to internal step which was quite
> trivial, I thought it will be easier not to reorder cleanup_eh pass,
> especially for 15.2 backport and when I have no idea what went wrong
> in the pr106190 testcase (the ICE is about not finding some region).

I see.  Fine with me then.  It's a bit of a whack-a-mole with musttail,
esp. wrt sanitizers ...

Richard.

Reply via email to