OSDN Git Service

PR debug/44248
authoraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 20 Jun 2010 23:57:54 +0000 (23:57 +0000)
committeraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 20 Jun 2010 23:57:54 +0000 (23:57 +0000)
* lto-streamer-in.c (input_bb): Leave debug stmts alone.
(input_function): Drop them here, if VTA is disabled.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161056 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/lto-streamer-in.c

index b87c634..f827fab 100644 (file)
@@ -1,3 +1,9 @@
+2010-06-20  Alexandre Oliva  <aoliva@redhat.com>
+
+       PR debug/44248
+       * lto-streamer-in.c (input_bb): Leave debug stmts alone.
+       (input_function): Drop them here, if VTA is disabled.
+
 2010-06-20  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/44546
index e875460..635cff4 100644 (file)
@@ -1204,13 +1204,6 @@ input_bb (struct lto_input_block *ib, enum LTO_tags tag,
     {
       gimple stmt = input_gimple_stmt (ib, data_in, fn, tag);
 
-      /* Change debug stmts to nops on-the-fly if we do not have VTA enabled.
-        This allows us to build for example static libs with debugging
-        enabled and do the final link without.  */
-      if (!MAY_HAVE_DEBUG_STMTS
-         && is_gimple_debug (stmt))
-       stmt = gimple_build_nop ();
-
       find_referenced_vars_in (stmt);
       gsi_insert_after (&bsi, stmt, GSI_NEW_STMT);
 
@@ -1370,11 +1363,26 @@ input_function (tree fn_decl, struct data_in *data_in,
   stmts = (gimple *) xcalloc (gimple_stmt_max_uid (fn), sizeof (gimple));
   FOR_ALL_BB (bb)
     {
-      gimple_stmt_iterator bsi;
-      for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi); gsi_next (&bsi))
+      gimple_stmt_iterator bsi = gsi_start_bb (bb);
+      while (!gsi_end_p (bsi))
        {
          gimple stmt = gsi_stmt (bsi);
-         stmts[gimple_uid (stmt)] = stmt;
+         /* If we're recompiling LTO objects with debug stmts but
+            we're not supposed to have debug stmts, remove them now.
+            We can't remove them earlier because this would cause uid
+            mismatches in fixups, but we can do it at this point, as
+            long as debug stmts don't require fixups.  */
+         if (!MAY_HAVE_DEBUG_STMTS && is_gimple_debug (stmt))
+           {
+             gimple_stmt_iterator gsi = bsi;
+             gsi_next (&bsi);
+             gsi_remove (&gsi, true);
+           }
+         else
+           {
+             gsi_next (&bsi);
+             stmts[gimple_uid (stmt)] = stmt;
+           }
        }
     }