On Thu, Nov 12, 2026 at 1:14 AM Kael Andrew Franco
<[email protected]> wrote:
>
> Attached testcase ICE because pass_ipa_tm::gate
> execute on invalid code.
>
> Bootstrapped and regtested on x86_64-pc-linux-gnu.
>
> gcc/ChangeLog:
>
> * trans-mem.cc (pass_ipa_tm::gate): Do not run on invalid code.
Ok.
>
> gcc/testsuite/ChangeLog:
>
> * gcc.dg/pr128491.c: New test.
> ---
> gcc/testsuite/gcc.dg/pr128491.c | 4 ++++
> gcc/trans-mem.cc | 2 +-
> 2 files changed, 5 insertions(+), 1 deletion(-)
> create mode 100644 gcc/testsuite/gcc.dg/pr128491.c
>
> diff --git a/gcc/testsuite/gcc.dg/pr128491.c b/gcc/testsuite/gcc.dg/pr128491.c
> new file mode 100644
> index 00000000000..a4bd425b8eb
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/pr128491.c
> @@ -0,0 +1,4 @@
> +/* { dg-do assemble } */
> +/* { dg-options "-fgnu-tm" } */
> +inline void __attribute__ ((strub ("internal"), always_inline)) inl (void) {
> }
> +void bat (void) { inl (); } // { dg-error "" }
> diff --git a/gcc/trans-mem.cc b/gcc/trans-mem.cc
> index 0fa71841700..89840befea1 100644
> --- a/gcc/trans-mem.cc
> +++ b/gcc/trans-mem.cc
> @@ -5693,7 +5693,7 @@ public:
> {}
>
> /* opt_pass methods: */
> - bool gate (function *) final override { return flag_tm; }
> + bool gate (function *) final override { return (flag_tm && !seen_error
> ()); }
> unsigned int execute (function *) final override { return ipa_tm_execute
> (); }
>
> }; // class pass_ipa_tm
> --
> 2.56.0
>