From: Qian Chao Date: Wed, 10 Jun 2020 08:46:56 +0000 (-0400) Subject: tmmark: verify_ssa failed [PR95569] X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6d9ef0621f8e1aaafd458dba1a8b5476e655b479;p=gcc.git tmmark: verify_ssa failed [PR95569] 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 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. --- diff --git a/gcc/testsuite/gcc.dg/tm/pr95569.c b/gcc/testsuite/gcc.dg/tm/pr95569.c new file mode 100644 index 00000000000..f0b0d6f4c24 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tm/pr95569.c @@ -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; + } +} diff --git a/gcc/trans-mem.c b/gcc/trans-mem.c index c23ecd2b31f..b6b9157006b 100644 --- a/gcc/trans-mem.c +++ b/gcc/trans-mem.c @@ -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);