https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103691
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- To me it looks like the PR52329 change wasn't correct. In particular, it should have been using true as the second argument and not false and therefore should have been removed in the r12-21-g0bf8cd9d5e8ac changes rather than kept. If I modify the testcase from a(0) to a(2), then I see pr103691.f90.037t.fre1: # DEBUG D.4293 => &a[0] and pr103691.f90.038t.evrp: # DEBUG D.4293 => &2.0e+0 The &2.0e+0 is just a wrong-debug, debug info was supposed to contain address of a, not address of some constant that happens to be in the first element of the array. fold_stmt_1 earlier has: case GIMPLE_DEBUG: if (gimple_debug_bind_p (stmt)) { tree *val = gimple_debug_bind_get_value_ptr (stmt); if (*val && (REFERENCE_CLASS_P (*val) || TREE_CODE (*val) == ADDR_EXPR) && maybe_canonicalize_mem_ref_addr (val, true)) changed = true; } which I believe should perform whatever PR52329 was meant to deal with. So I think else if (val && TREE_CODE (val) == ADDR_EXPR) { tree ref = TREE_OPERAND (val, 0); tree tem = maybe_fold_reference (ref); if (tem) { tem = build_fold_addr_expr_with_type (tem, TREE_TYPE (val)); gimple_debug_bind_set_value (stmt, tem); changed = true; } } should be just dropped.