diff --git a/gcc/ree.cc b/gcc/ree.cc index 98bd80efd7b..413aec7c8eb 100644 --- a/gcc/ree.cc +++ b/gcc/ree.cc @@ -875,7 +875,8 @@ combine_reaching_defs (ext_cand *cand, const_rtx set_pat, ext_state *state) for (df_link *use = uses; use; use = use->next) if (paradoxical_subreg_p (GET_MODE (*DF_REF_LOC (use->ref)), - GET_MODE (SET_DEST (*dest_sub_rtx)))) + GET_MODE (SET_DEST (*dest_sub_rtx))) + && !DEBUG_INSN_P (DF_REF_INSN (use->ref))) return false; } @@ -963,7 +964,8 @@ combine_reaching_defs (ext_cand *cand, const_rtx set_pat, ext_state *state) rtx dest2 = SET_DEST (*dest_sub_rtx2); for (use = uses; use; use = use->next) if (paradoxical_subreg_p (GET_MODE (*DF_REF_LOC (use->ref)), - GET_MODE (dest2))) + GET_MODE (dest2)) + && !DEBUG_INSN_P (DF_REF_INSN (use->ref))) break; if (use) break; diff --git a/gcc/testsuite/gcc.dg/pr108573.c b/gcc/testsuite/gcc.dg/pr108573.c new file mode 100644 index 00000000000..5dd18043b2b --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr108573.c @@ -0,0 +1,18 @@ +/* PR debug/108573 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fcompare-debug" } */ + +unsigned g; + +int bar (void); +int baz (int); + +void +foo (unsigned short s, long l) +{ + unsigned u = bar (); + s &= __builtin_add_overflow_p (0, u, 0); + s %= g; + s -= l >> s; + baz (s); +}