diff options
Diffstat (limited to 'gcc/function.c')
-rw-r--r-- | gcc/function.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/function.c b/gcc/function.c index 44accb8..3f47848 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -2918,6 +2918,8 @@ purge_addressof_1 (loc, insn, force, store) if (store) { + rtx p; + start_sequence (); val = gen_reg_rtx (GET_MODE (x)); if (! validate_change (insn, loc, val, 0)) @@ -2936,6 +2938,16 @@ purge_addressof_1 (loc, insn, force, store) val, GET_MODE_SIZE (GET_MODE (sub)), GET_MODE_SIZE (GET_MODE (sub))); + /* Make sure to unshare any shared rtl that store_bit_field + might have created. */ + for (p = get_insns(); p; p = NEXT_INSN (p)) + { + reset_used_flags (PATTERN (p)); + reset_used_flags (REG_NOTES (p)); + reset_used_flags (LOG_LINKS (p)); + } + unshare_all_rtl (get_insns ()); + seq = gen_sequence (); end_sequence (); emit_insn_after (seq, insn); |