re PR middle-end/64415 (ICE: verify_ssa failed / segmentation fault with LTO)
authorRichard Biener <rguenther@suse.de>
Wed, 14 Jan 2015 11:06:18 +0000 (11:06 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 14 Jan 2015 11:06:18 +0000 (11:06 +0000)
2015-01-14  Richard Biener  <rguenther@suse.de>

PR lto/64415
* tree-inline.c (insert_debug_decl_map): Check destination
function MAY_HAVE_DEBUG_STMTS.
(insert_init_debug_bind): Likewise.
(insert_init_stmt): Remove redundant check.
(remap_gimple_stmt): Drop debug stmts if the destination
function has var-tracking assignments disabled.

* gcc.dg/lto/pr64415_0.c: New testcase.
* gcc.dg/lto/pr64415_1.c: Likewise.

From-SVN: r219588

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/lto/pr64415_0.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/lto/pr64415_1.c [new file with mode: 0644]
gcc/tree-inline.c

index 3d4c8ab640edb64223c80c3d5c05803cace07b5b..c852337d88978d0b046e96e8c420f81b2e159ef1 100644 (file)
@@ -1,3 +1,13 @@
+2015-01-14  Richard Biener  <rguenther@suse.de>
+
+       PR lto/64415
+       * tree-inline.c (insert_debug_decl_map): Check destination
+       function MAY_HAVE_DEBUG_STMTS.
+       (insert_init_debug_bind): Likewise.
+       (insert_init_stmt): Remove redundant check.
+       (remap_gimple_stmt): Drop debug stmts if the destination
+       function has var-tracking assignments disabled.
+
 2015-01-14  Martin Liska  <mliska@suse.cz>
 
        * ipa-icf-gimple.c (func_checker::compare_operand): Add support for
index efb7c378b9507f0e3ebc1d8a52aa02ac6116c8ed..e2929d3d42fe69c256a751b61259efc9a6ffe1a4 100644 (file)
@@ -1,3 +1,9 @@
+2015-01-14  Richard Biener  <rguenther@suse.de>
+
+       PR lto/64415
+       * gcc.dg/lto/pr64415_0.c: New testcase.
+       * gcc.dg/lto/pr64415_1.c: Likewise. 
+
 2015-01-14  Martin Liska  <mliska@suse.cz>
 
        * gcc.dg/ipa/pr64307.c: New test.
diff --git a/gcc/testsuite/gcc.dg/lto/pr64415_0.c b/gcc/testsuite/gcc.dg/lto/pr64415_0.c
new file mode 100644 (file)
index 0000000..fdf9d82
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-lto-do link } */
+/* { dg-require-effective-target fpic } */
+/* { dg-lto-options { { -O -flto -fpic } } } */
+/* { dg-extra-ld-options { -shared } } */
+
+extern void bar(char *, int);
+
+extern char *baz;
+
+void foo()
+{
+  bar(baz, 0);
+}
diff --git a/gcc/testsuite/gcc.dg/lto/pr64415_1.c b/gcc/testsuite/gcc.dg/lto/pr64415_1.c
new file mode 100644 (file)
index 0000000..b98dfbd
--- /dev/null
@@ -0,0 +1,17 @@
+/* { dg-options "-g" } */
+
+extern int n;
+
+void bar(char *, int);
+
+inline void bar(char *s, int i)
+{
+  char *p = s;
+
+#ifdef V1
+  if (i)
+#else
+  if (n)
+#endif
+    *s = 0;
+}
index 4a47fd2842e8d2cf4ca7ee000b452f4ac949a7c3..8fe92e4eb4407ced07140d3261661e00a43a4eb0 100644 (file)
@@ -192,7 +192,7 @@ insert_debug_decl_map (copy_body_data *id, tree key, tree value)
   if (!gimple_in_ssa_p (id->src_cfun))
     return;
 
-  if (!MAY_HAVE_DEBUG_STMTS)
+  if (!opt_for_fn (id->dst_fn, flag_var_tracking_assignments))
     return;
 
   if (!target_for_debug_bind (key))
@@ -1348,6 +1348,10 @@ remap_gimple_stmt (gimple stmt, copy_body_data *id)
   bool skip_first = false;
   gimple_seq stmts = NULL;
 
+  if (is_gimple_debug (stmt)
+      && !opt_for_fn (id->dst_fn, flag_var_tracking_assignments))
+    return stmts;
+
   /* Begin by recognizing trees that we'll completely rewrite for the
      inlining context.  Our output for these trees is completely
      different from out input (e.g. RETURN_EXPR is deleted, and morphs
@@ -3007,7 +3011,7 @@ insert_init_debug_bind (copy_body_data *id,
   if (!gimple_in_ssa_p (id->src_cfun))
     return NULL;
 
-  if (!MAY_HAVE_DEBUG_STMTS)
+  if (!opt_for_fn (id->dst_fn, flag_var_tracking_assignments))
     return NULL;
 
   tracked_var = target_for_debug_bind (var);
@@ -3063,7 +3067,7 @@ insert_init_stmt (copy_body_data *id, basic_block bb, gimple init_stmt)
       gsi_insert_after (&si, init_stmt, GSI_NEW_STMT);
       gimple_regimplify_operands (init_stmt, &si);
 
-      if (!is_gimple_debug (init_stmt) && MAY_HAVE_DEBUG_STMTS)
+      if (!is_gimple_debug (init_stmt))
        {
          tree def = gimple_assign_lhs (init_stmt);
          insert_init_debug_bind (id, bb, def, def, init_stmt);