cfgexpand.c (expand_gimple_cond): Always set the source location and block before...
authorEric Botcazou <ebotcazou@adacore.com>
Mon, 28 Mar 2011 21:19:23 +0000 (21:19 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Mon, 28 Mar 2011 21:19:23 +0000 (21:19 +0000)
* cfgexpand.c (expand_gimple_cond): Always set the source location and
block before expanding the statement.
(expand_gimple_stmt_1): Likewise.  Set them here...
(expand_gimple_stmt): ...and not here.  Tidy.
* cfglayout.c (curr_insn_locator): Return 0 if the current location is
unknown.

From-SVN: r171629

gcc/ChangeLog
gcc/cfgexpand.c
gcc/cfglayout.c

index 23e3da5cc11b94c18f991432dd91908a68a48169..6af0e4c2dcc4c259c91a1d045f3d6dc9bae2f890 100644 (file)
@@ -1,3 +1,12 @@
+2011-03-28  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * cfgexpand.c (expand_gimple_cond): Always set the source location and
+       block before expanding the statement.
+       (expand_gimple_stmt_1): Likewise.  Set them here...
+       (expand_gimple_stmt): ...and not here.  Tidy.
+       * cfglayout.c (curr_insn_locator): Return 0 if the current location is
+       unknown.
+
 2011-03-28  Steven Bosscher  <steven@gcc.gnu.org>
 
        * Makefile.in: New rule for cprop.o.
index ebe0a0352d48ceb486929dd8504270e7a1e0cda1..da40aaec67560992fe0d290766c37182e9f00974 100644 (file)
@@ -1745,11 +1745,8 @@ expand_gimple_cond (basic_block bb, gimple stmt)
   last2 = last = get_last_insn ();
 
   extract_true_false_edges_from_block (bb, &true_edge, &false_edge);
-  if (gimple_has_location (stmt))
-    {
-      set_curr_insn_source_location (gimple_location (stmt));
-      set_curr_insn_block (gimple_block (stmt));
-    }
+  set_curr_insn_source_location (gimple_location (stmt));
+  set_curr_insn_block (gimple_block (stmt));
 
   /* These flags have no purpose in RTL land.  */
   true_edge->flags &= ~EDGE_TRUE_VALUE;
@@ -1896,6 +1893,10 @@ static void
 expand_gimple_stmt_1 (gimple stmt)
 {
   tree op0;
+
+  set_curr_insn_source_location (gimple_location (stmt));
+  set_curr_insn_block (gimple_block (stmt));
+
   switch (gimple_code (stmt))
     {
     case GIMPLE_GOTO:
@@ -2052,32 +2053,21 @@ expand_gimple_stmt_1 (gimple stmt)
 static rtx
 expand_gimple_stmt (gimple stmt)
 {
-  int lp_nr = 0;
-  rtx last = NULL;
   location_t saved_location = input_location;
+  rtx last = get_last_insn ();
+  int lp_nr;
 
-  last = get_last_insn ();
-
-  /* If this is an expression of some kind and it has an associated line
-     number, then emit the line number before expanding the expression.
-
-     We need to save and restore the file and line information so that
-     errors discovered during expansion are emitted with the right
-     information.  It would be better of the diagnostic routines
-     used the file/line information embedded in the tree nodes rather
-     than globals.  */
   gcc_assert (cfun);
 
+  /* We need to save and restore the current source location so that errors
+     discovered during expansion are emitted with the right location.  But
+     it would be better if the diagnostic routines used the source location
+     embedded in the tree nodes rather than globals.  */
   if (gimple_has_location (stmt))
-    {
-      input_location = gimple_location (stmt);
-      set_curr_insn_source_location (input_location);
-
-      /* Record where the insns produced belong.  */
-      set_curr_insn_block (gimple_block (stmt));
-    }
+    input_location = gimple_location (stmt);
 
   expand_gimple_stmt_1 (stmt);
+
   /* Free any temporaries used to evaluate this statement.  */
   free_temp_slots ();
 
index 05aed221f0bd3881c4772eeeede903683082672d..464663642c716f2efc6482797e48254732fa1922 100644 (file)
@@ -323,7 +323,7 @@ get_curr_insn_block (void)
 int
 curr_insn_locator (void)
 {
-  if (curr_rtl_loc == -1)
+  if (curr_rtl_loc == -1 || curr_location == UNKNOWN_LOCATION)
     return 0;
   if (last_block != curr_block)
     {