https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111397

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |rguenth at gcc dot 
gnu.org
   Last reconfirmed|                            |2023-09-13
             Status|UNCONFIRMED                 |ASSIGNED
     Ever confirmed|0                           |1

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #1)
> Looks loop copy header change which allowed the warning not to happen.
> 
> The warning is about the argument of test_setjmpex. Because GCC does not
> realize __builtin_frame_address cannot jump to the test_setjmpex ...
> 
> In the case of GCC 12-13, the copy of the loop header happens during
> thread-full rather than earlier and inserts:
>   _4(ab) = _11(D);
> 
> Which is what is warned about.
> _11(D) does not get proped into the phi ...

We can't propagate because

  /* Similarly if DEST flows in from an abnormal edge then the copy cannot be
     propagated.  If we know we do not propagate into a PHI argument this
     does not apply.  */
  else if (!dest_not_phi_arg_p
           && TREE_CODE (dest) == SSA_NAME
           && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (dest))
    return false;

that's still not fine-grained enough - the case we cannot propagate is
when we propagate into a PHI argument for an abnormal edge.

The diagnostic doesn't happen on trunk, I still have a patch doing the
propagation.

Reply via email to