diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr109711-1.c b/gcc/testsuite/gcc.dg/tree-ssa/pr109711-1.c new file mode 100644 index 00000000000..81777505002 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr109711-1.c @@ -0,0 +1,16 @@ +// { dg-do compile } +// { dg-options "-O2" } + +void lspf2lpc(); + +void interpolate_lpc(int subframe_num) { + float weight = 0.25 * subframe_num + 1; + if (weight) + lspf2lpc(); +} + +void qcelp_decode_frame() { + int i; + for (;; i++) + interpolate_lpc(i); +} diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr109711-2.c b/gcc/testsuite/gcc.dg/tree-ssa/pr109711-2.c new file mode 100644 index 00000000000..f80bb1afec8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr109711-2.c @@ -0,0 +1,24 @@ +// { dg-do compile } +// { dg-options "-O2" } + +void lspf2lpc(); + +int interpolate_lpc_q_0; + +void +interpolate_lpc(int subframe_num) { + float weight; + if (interpolate_lpc_q_0) + weight = subframe_num; + else + weight = 1.0; + if (weight != 1.0) + lspf2lpc(); +} + +void +qcelp_decode_frame() { + int i; + for (;; i++) + interpolate_lpc(i); +} diff --git a/gcc/value-range.cc b/gcc/value-range.cc index 655ffc2d6d4..def9299dc0e 100644 --- a/gcc/value-range.cc +++ b/gcc/value-range.cc @@ -1057,6 +1057,13 @@ irange::verify_range () return; } gcc_checking_assert (m_num_ranges <= m_max_ranges); + + // Legacy allowed these to represent VARYING for unknown types. + // Leave this in for now, until all users are converted. Eventually + // we should abort in set_varying. + if (m_kind == VR_VARYING && m_type == error_mark_node) + return; + unsigned prec = TYPE_PRECISION (m_type); if (m_kind == VR_VARYING) {