tmmark: verify_ssa failed [PR95569]
authorQian Chao <qianchao9@huawei.com>
Wed, 10 Jun 2020 08:46:56 +0000 (04:46 -0400)
committerMartin Liska <mliska@suse.cz>
Wed, 10 Jun 2020 09:05:06 +0000 (11:05 +0200)
This patch fixes a latent bug exposed by eb72dc663e9070b281be83a80f6f838a3a878822.
See the discussion on the bug for details.

Bootstrapped and regtested on aarch64-linux-gnu. No new fails introduced.

2020-06-10  Qian Chao  <qianchao9@huawei.com>

gcc/ChangeLog:

PR tree-optimization/95569
* trans-mem.c (expand_assign_tm): Ensure that rtmp is marked TREE_ADDRESSABLE.

gcc/testsuite/ChangeLog:

PR tree-optimization/95569
* gcc.dg/tm/pr95569.c: New test.

gcc/testsuite/gcc.dg/tm/pr95569.c [new file with mode: 0644]
gcc/trans-mem.c

diff --git a/gcc/testsuite/gcc.dg/tm/pr95569.c b/gcc/testsuite/gcc.dg/tm/pr95569.c
new file mode 100644 (file)
index 0000000..f0b0d6f
--- /dev/null
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-options "-fgnu-tm -O0" } */
+/* { dg-do compile { target aarch64*-*-* } } */
+
+typedef int __attribute__ ((vector_size (16))) vectype;
+vectype v;
+
+void
+foo (int c)
+{
+  vectype *p = __builtin_malloc (sizeof (vectype));
+  __transaction_atomic
+  {
+    *p = v;
+    if (c)
+      __transaction_cancel;
+  }
+}
index c23ecd2b31f11608a60dfd82ff10d1d8c96b4b17..b6b9157006b53926bda25f3bc0841ac2bce161ca 100644 (file)
@@ -2424,6 +2424,7 @@ expand_assign_tm (struct tm_region *region, gimple_stmt_iterator *gsi)
       if (is_gimple_reg (rhs))
        {
          tree rtmp = create_tmp_var (TREE_TYPE (rhs));
+         TREE_ADDRESSABLE (rtmp) = 1;
          rhs_addr = build_fold_addr_expr (rtmp);
          gcall = gimple_build_assign (rtmp, rhs);
          gsi_insert_before (gsi, gcall, GSI_SAME_STMT);