re PR lto/69866 (lto1: internal compiler error: in add_symbol_to_partition_1, at lto/lto-partition.c:158)
PR lto/69866 * lto-symtab.c (lto_symtab_merge_symbols): Drop useless definitions that resolved externally. * gcc.dg/lto/pr69866_0.c: New test. * gcc.dg/lto/pr69866_1.c: Likewise. From-SVN: r249224
This commit is contained in:
parent
55dabf65f0
commit
d1eed638ed
@ -1,3 +1,10 @@
|
|||||||
|
2017-06-15 Jan Hubicka <hubicka@ucw.cz>
|
||||||
|
Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||||
|
|
||||||
|
PR lto/69866
|
||||||
|
* lto-symtab.c (lto_symtab_merge_symbols): Drop useless definitions
|
||||||
|
that resolved externally.
|
||||||
|
|
||||||
2017-05-23 Jan Hubicka <hubicka@ucw.cz>
|
2017-05-23 Jan Hubicka <hubicka@ucw.cz>
|
||||||
|
|
||||||
* lto.c (do_whole_program_analysis): Replace inline_free_summary
|
* lto.c (do_whole_program_analysis): Replace inline_free_summary
|
||||||
|
@ -132,7 +132,7 @@ add_symbol_to_partition_1 (ltrans_partition part, symtab_node *node)
|
|||||||
|
|
||||||
/* Be sure that we never try to duplicate partitioned symbol
|
/* Be sure that we never try to duplicate partitioned symbol
|
||||||
or add external symbol. */
|
or add external symbol. */
|
||||||
gcc_assert (c != SYMBOL_EXTERNAL
|
gcc_assert ((c != SYMBOL_EXTERNAL || node->alias)
|
||||||
&& (c == SYMBOL_DUPLICATE || !symbol_partitioned_p (node)));
|
&& (c == SYMBOL_DUPLICATE || !symbol_partitioned_p (node)));
|
||||||
|
|
||||||
part->symbols++;
|
part->symbols++;
|
||||||
|
@ -952,6 +952,42 @@ lto_symtab_merge_symbols (void)
|
|||||||
if (tgt)
|
if (tgt)
|
||||||
node->resolve_alias (tgt, true);
|
node->resolve_alias (tgt, true);
|
||||||
}
|
}
|
||||||
|
/* If the symbol was preempted outside IR, see if we want to get rid
|
||||||
|
of the definition. */
|
||||||
|
if (node->analyzed
|
||||||
|
&& !DECL_EXTERNAL (node->decl)
|
||||||
|
&& (node->resolution == LDPR_PREEMPTED_REG
|
||||||
|
|| node->resolution == LDPR_RESOLVED_IR
|
||||||
|
|| node->resolution == LDPR_RESOLVED_EXEC
|
||||||
|
|| node->resolution == LDPR_RESOLVED_DYN))
|
||||||
|
{
|
||||||
|
DECL_EXTERNAL (node->decl) = 1;
|
||||||
|
/* If alias to local symbol was preempted by external definition,
|
||||||
|
we know it is not pointing to the local symbol. Remove it. */
|
||||||
|
if (node->alias
|
||||||
|
&& !node->weakref
|
||||||
|
&& !node->transparent_alias
|
||||||
|
&& node->get_alias_target ()->binds_to_current_def_p ())
|
||||||
|
{
|
||||||
|
node->alias = false;
|
||||||
|
node->remove_all_references ();
|
||||||
|
node->definition = false;
|
||||||
|
node->analyzed = false;
|
||||||
|
node->cpp_implicit_alias = false;
|
||||||
|
}
|
||||||
|
else if (!node->alias
|
||||||
|
&& node->definition
|
||||||
|
&& node->get_availability () <= AVAIL_INTERPOSABLE)
|
||||||
|
{
|
||||||
|
if ((cnode = dyn_cast <cgraph_node *> (node)) != NULL)
|
||||||
|
cnode->reset ();
|
||||||
|
else
|
||||||
|
{
|
||||||
|
node->analyzed = node->definition = false;
|
||||||
|
node->remove_all_references ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!(cnode = dyn_cast <cgraph_node *> (node))
|
if (!(cnode = dyn_cast <cgraph_node *> (node))
|
||||||
|| !cnode->clone_of
|
|| !cnode->clone_of
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
2017-06-15 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||||
|
|
||||||
|
PR lto/69866
|
||||||
|
* gcc.dg/lto/pr69866_0.c: New test.
|
||||||
|
* gcc.dg/lto/pr69866_1.c: Likewise.
|
||||||
|
|
||||||
2017-06-15 Jozef Lawrynowicz <jozef.l@somniumtech.com>
|
2017-06-15 Jozef Lawrynowicz <jozef.l@somniumtech.com>
|
||||||
|
|
||||||
PR target/78818
|
PR target/78818
|
||||||
|
13
gcc/testsuite/gcc.dg/lto/pr69866_0.c
Normal file
13
gcc/testsuite/gcc.dg/lto/pr69866_0.c
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
/* { dg-lto-do link } */
|
||||||
|
|
||||||
|
int _umh(int i)
|
||||||
|
{
|
||||||
|
return i+1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int weaks(int i) __attribute__((weak, alias("_umh")));
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
return weaks(10);
|
||||||
|
}
|
6
gcc/testsuite/gcc.dg/lto/pr69866_1.c
Normal file
6
gcc/testsuite/gcc.dg/lto/pr69866_1.c
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
/* { dg-options { -fno-lto } } */
|
||||||
|
|
||||||
|
int weaks(int i)
|
||||||
|
{
|
||||||
|
return i+1;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user