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.
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