From f828503eeb79ad1f1ada6db7deccc5abcc2f3ca3 Mon Sep 17 00:00:00 2001 From: Andrew MacLeod Date: Fri, 21 Apr 2023 15:03:43 -0400 Subject: Do not fold ADDR_EXPR conditions leading to builtin_unreachable early. Ranges can not represent &var globally yet, so we cannot fold these expressions early or we lose the __builtin_unreachable information. PR tree-optimization/109546 gcc/ * tree-vrp.cc (remove_unreachable::remove_and_update_globals): Do not fold conditions with ADDR_EXPR early. gcc/testsuite/ * gcc.dg/pr109546.c: New. --- gcc/tree-vrp.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'gcc/tree-vrp.cc') diff --git a/gcc/tree-vrp.cc b/gcc/tree-vrp.cc index f4d48452..9b87064 100644 --- a/gcc/tree-vrp.cc +++ b/gcc/tree-vrp.cc @@ -150,7 +150,9 @@ remove_unreachable::remove_and_update_globals (bool final_p) // If this is already a constant condition, don't look either if (!lhs_p && !rhs_p) continue; - + // Do not remove addresses early. ie if (x == &y) + if (!final_p && lhs_p && TREE_CODE (gimple_cond_rhs (s)) == ADDR_EXPR) + continue; bool dominate_exit_p = true; FOR_EACH_GORI_EXPORT_NAME (m_ranger.gori (), e->src, name) { -- cgit v1.1