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.

Reply via email to