]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR bootstrap/55792 (Bad memory access with profiledbootstrap and LTO)
authorRichard Biener <rguenther@suse.de>
Thu, 10 Jan 2013 13:42:27 +0000 (13:42 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 10 Jan 2013 13:42:27 +0000 (13:42 +0000)
2013-01-10  Richard Biener  <rguenther@suse.de>

PR bootstrap/55792
* tree-into-ssa.c (rewrite_add_phi_arguments): Do not set
locations for virtual PHI arguments.
(rewrite_update_phi_arguments): Likewise.

From-SVN: r195084

gcc/ChangeLog
gcc/tree-into-ssa.c

index 52e883080097b4b729e03faf38b3da57d1dc8a96..42f1bd862d8b9e84ed40911efc6e54cc966e2f86 100644 (file)
@@ -1,3 +1,10 @@
+2013-01-10  Richard Biener  <rguenther@suse.de>
+
+       PR bootstrap/55792
+       * tree-into-ssa.c (rewrite_add_phi_arguments): Do not set
+       locations for virtual PHI arguments.
+       (rewrite_update_phi_arguments): Likewise.
+
 2013-01-10  Joel Sherrill  <joel.sherrill@OARcorp.com>
 
        * config/v850/rtems.h (ASM_SPEC): Pass -m8byte-align and -mgcc-abi
index 2a389895d3d2e7a69b1b3320e2c42bd77f0a4c6a..8f93b47abcb295d510889692c2ad762c9e98d51f 100644 (file)
@@ -1355,13 +1355,18 @@ rewrite_add_phi_arguments (basic_block bb)
       for (gsi = gsi_start_phis (e->dest); !gsi_end_p (gsi);
           gsi_next (&gsi))
        {
-         tree currdef;
-         gimple stmt;
+         tree currdef, res;
+         location_t loc;
 
          phi = gsi_stmt (gsi);
-         currdef = get_reaching_def (SSA_NAME_VAR (gimple_phi_result (phi)));
-         stmt = SSA_NAME_DEF_STMT (currdef);
-         add_phi_arg (phi, currdef, e, gimple_location (stmt));
+         res = gimple_phi_result (phi);
+         currdef = get_reaching_def (SSA_NAME_VAR (res));
+         /* Virtual operand PHI args do not need a location.  */
+         if (virtual_operand_p (res))
+           loc = UNKNOWN_LOCATION;
+         else
+           loc = gimple_location (SSA_NAME_DEF_STMT (currdef));
+         add_phi_arg (phi, currdef, e, loc);
        }
     }
 }
@@ -2018,20 +2023,26 @@ rewrite_update_phi_arguments (basic_block bb)
           /* Update the argument if there is a reaching def.  */
          if (reaching_def)
            {
-             gimple stmt;
              source_location locus;
              int arg_i = PHI_ARG_INDEX_FROM_USE (arg_p);
 
              SET_USE (arg_p, reaching_def);
-             stmt = SSA_NAME_DEF_STMT (reaching_def);
 
-             /* Single element PHI nodes  behave like copies, so get the
-                location from the phi argument.  */
-             if (gimple_code (stmt) == GIMPLE_PHI &&
-                 gimple_phi_num_args (stmt) == 1)
-               locus = gimple_phi_arg_location (stmt, 0);
+             /* Virtual operands do not need a location.  */
+             if (virtual_operand_p (reaching_def))
+               locus = UNKNOWN_LOCATION;
              else
-               locus = gimple_location (stmt);
+               {
+                 gimple stmt = SSA_NAME_DEF_STMT (reaching_def);
+
+                 /* Single element PHI nodes  behave like copies, so get the
+                    location from the phi argument.  */
+                 if (gimple_code (stmt) == GIMPLE_PHI
+                     && gimple_phi_num_args (stmt) == 1)
+                   locus = gimple_phi_arg_location (stmt, 0);
+                 else
+                   locus = gimple_location (stmt);
+               }
 
              gimple_phi_arg_set_location (phi, arg_i, locus);
            }