gimple-low.c (lower_function_body): Don't remove the location of the return statement...
authorAndreas Krebbel <Andreas.Krebbel@de.ibm.com>
Tue, 8 Feb 2011 11:15:53 +0000 (11:15 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Tue, 8 Feb 2011 11:15:53 +0000 (11:15 +0000)
2011-02-08  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>

* gimple-low.c (lower_function_body): Don't remove the location of
the return statement here.
(lower_gimple_return): Do it here instead but only if the return
statement is actually used twice.

From-SVN: r169918

gcc/ChangeLog
gcc/gimple-low.c

index c4853269f16bda490e79f3532a5a29fba70e5774..36e7a731040e928550ff54e720dd7c6320672cda 100644 (file)
@@ -1,3 +1,10 @@
+2011-02-08  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
+
+       * gimple-low.c (lower_function_body): Don't remove the location of
+       the return statement here.
+       (lower_gimple_return): Do it here instead but only if the return
+       statement is actually used twice.
+
 2011-02-08  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/47632
index 4e49241429060395d52756eb771f36a989170264..67087a0aadc12907561e4c806f0d46f2f2c6728a 100644 (file)
@@ -148,11 +148,6 @@ lower_function_body (void)
 
       x = gimple_build_label (t.label);
       gsi_insert_after (&i, x, GSI_CONTINUE_LINKING);
-
-      /* Remove the line number from the representative return statement.
-        It now fills in for many such returns.  Failure to remove this
-        will result in incorrect results for coverage analysis.  */
-      gimple_set_location (t.stmt, UNKNOWN_LOCATION);
       gsi_insert_after (&i, t.stmt, GSI_CONTINUE_LINKING);
     }
 
@@ -746,7 +741,14 @@ lower_gimple_return (gimple_stmt_iterator *gsi, struct lower_data *data)
       tmp_rs = *VEC_index (return_statements_t, data->return_statements, i);
 
       if (gimple_return_retval (stmt) == gimple_return_retval (tmp_rs.stmt))
-       goto found;
+       {
+         /* Remove the line number from the representative return statement.
+            It now fills in for many such returns.  Failure to remove this
+            will result in incorrect results for coverage analysis.  */
+         gimple_set_location (tmp_rs.stmt, UNKNOWN_LOCATION);
+
+         goto found;
+       }
     }
 
   /* Not found.  Create a new label and record the return statement.  */