mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-22 05:19:13 +08:00
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
This commit is contained in:
parent
217c08c571
commit
683750ce09
@ -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
|
||||
|
@ -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.
|
||||
|
13
gcc/testsuite/gcc.dg/lto/pr64415_0.c
Normal file
13
gcc/testsuite/gcc.dg/lto/pr64415_0.c
Normal file
@ -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);
|
||||
}
|
17
gcc/testsuite/gcc.dg/lto/pr64415_1.c
Normal file
17
gcc/testsuite/gcc.dg/lto/pr64415_1.c
Normal file
@ -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;
|
||||
}
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user