So when we using the newly mapped location, we should check if
it is not unknown location and if so just use the original location.
Note this is a latent bug in remove_forwarder_block_with_phi code too.

This fixes gcc.dg/uninit-pr40635.c when doing more mergephi.

gcc/ChangeLog:

        * tree-cfg.cc (copy_phi_arg_into_existing_phi): Use the original 
location
        if the mapped location is unknown.

Signed-off-by: Andrew Pinski <[email protected]>
---
 gcc/tree-cfg.cc | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc
index 5a082eee524..1d20e6ab6ba 100644
--- a/gcc/tree-cfg.cc
+++ b/gcc/tree-cfg.cc
@@ -6828,7 +6828,10 @@ copy_phi_arg_into_existing_phi (edge src_e, edge tgt_e, 
bool use_map)
              if (val == old_arg)
                {
                  val = new_arg;
-                 locus = redirect_edge_var_map_location (vm);
+                 location_t locus1 = redirect_edge_var_map_location (vm);
+                 /* Don't remove the location if we remap one does not have 
one.  */
+                 if (locus1 != UNKNOWN_LOCATION)
+                   locus = locus1;
                  break;
                }
            }
-- 
2.43.0

Reply via email to