Fix EXECUTE_IF_SET_IN_HARD_REG_SET use
authorRichard Sandiford <richard.sandiford@arm.com>
Sun, 6 Oct 2019 15:39:27 +0000 (15:39 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Sun, 6 Oct 2019 15:39:27 +0000 (15:39 +0000)
As Maxim pointed out, r276309 broke -O3 bootstrap for aarch64-linux-gnu.
It turns out that EXECUTE_IF_SET_IN_HARD_REG_SET isn't safe to use for
temporary objects because their lifetimes don't extend to the end of
the loop.  This patch therefore uses an explicit temporary instead.

Other patches in the series already used this style (but for
full_reg_and_partial_clobbers rather than full_reg_clobbers),
so AFAICT this is the only place that needs fixing.

2019-10-06  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* var-tracking.c (dataflow_set_clear_at_call): Hoist temporary
function result outside of EXECUTE_IF_SET_IN_HARD_REG_SET.

From-SVN: r276639

gcc/ChangeLog
gcc/var-tracking.c

index a2740d2f3861b0dac45a0135d13e3553095f3887..4b7cb0e59246df247ae7d130732d4dec4681eb31 100644 (file)
@@ -1,3 +1,8 @@
+2019-10-06  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * var-tracking.c (dataflow_set_clear_at_call): Hoist temporary
+       function result outside of EXECUTE_IF_SET_IN_HARD_REG_SET.
+
 2019-10-06  Iain Sandoe  <iain@sandoe.co.uk>
 
        * config/darwin.c (darwin_override_options): Adjust objective-c
index 3d069e41323c03fb8aaf33672eb49c9f9c3cd15b..5de36ae2f47287a439a1e7ab6fc0826b882253da 100644 (file)
@@ -4902,9 +4902,10 @@ dataflow_set_clear_at_call (dataflow_set *set, rtx_insn *call_insn)
   unsigned int r;
   hard_reg_set_iterator hrsi;
 
-  function_abi callee_abi = insn_callee_abi (call_insn);
+  HARD_REG_SET callee_clobbers
+    = insn_callee_abi (call_insn).full_reg_clobbers ();
 
-  EXECUTE_IF_SET_IN_HARD_REG_SET (callee_abi.full_reg_clobbers (), 0, r, hrsi)
+  EXECUTE_IF_SET_IN_HARD_REG_SET (callee_clobbers, 0, r, hrsi)
     var_regno_delete (set, r);
 
   if (MAY_HAVE_DEBUG_BIND_INSNS)