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

Reply via email to