Commit 683750ce by Richard Biener Committed by Richard Biener

re PR middle-end/64415 (ICE: verify_ssa failed / segmentation fault with LTO)

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
parent 217c08c5
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> 2015-01-14 Martin Liska <mliska@suse.cz>
* ipa-icf-gimple.c (func_checker::compare_operand): Add support for * ipa-icf-gimple.c (func_checker::compare_operand): Add support for
......
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> 2015-01-14 Martin Liska <mliska@suse.cz>
* gcc.dg/ipa/pr64307.c: New test. * gcc.dg/ipa/pr64307.c: New test.
......
/* { 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);
}
/* { 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;
}
...@@ -192,7 +192,7 @@ insert_debug_decl_map (copy_body_data *id, tree key, tree value) ...@@ -192,7 +192,7 @@ insert_debug_decl_map (copy_body_data *id, tree key, tree value)
if (!gimple_in_ssa_p (id->src_cfun)) if (!gimple_in_ssa_p (id->src_cfun))
return; return;
if (!MAY_HAVE_DEBUG_STMTS) if (!opt_for_fn (id->dst_fn, flag_var_tracking_assignments))
return; return;
if (!target_for_debug_bind (key)) if (!target_for_debug_bind (key))
...@@ -1348,6 +1348,10 @@ remap_gimple_stmt (gimple stmt, copy_body_data *id) ...@@ -1348,6 +1348,10 @@ remap_gimple_stmt (gimple stmt, copy_body_data *id)
bool skip_first = false; bool skip_first = false;
gimple_seq stmts = NULL; 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 /* Begin by recognizing trees that we'll completely rewrite for the
inlining context. Our output for these trees is completely inlining context. Our output for these trees is completely
different from out input (e.g. RETURN_EXPR is deleted, and morphs different from out input (e.g. RETURN_EXPR is deleted, and morphs
...@@ -3007,7 +3011,7 @@ insert_init_debug_bind (copy_body_data *id, ...@@ -3007,7 +3011,7 @@ insert_init_debug_bind (copy_body_data *id,
if (!gimple_in_ssa_p (id->src_cfun)) if (!gimple_in_ssa_p (id->src_cfun))
return NULL; return NULL;
if (!MAY_HAVE_DEBUG_STMTS) if (!opt_for_fn (id->dst_fn, flag_var_tracking_assignments))
return NULL; return NULL;
tracked_var = target_for_debug_bind (var); tracked_var = target_for_debug_bind (var);
...@@ -3063,7 +3067,7 @@ insert_init_stmt (copy_body_data *id, basic_block bb, gimple init_stmt) ...@@ -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); gsi_insert_after (&si, init_stmt, GSI_NEW_STMT);
gimple_regimplify_operands (init_stmt, &si); 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); tree def = gimple_assign_lhs (init_stmt);
insert_init_debug_bind (id, bb, def, def, init_stmt); insert_init_debug_bind (id, bb, def, def, init_stmt);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment