mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-21 23:30:59 +08:00
ipa/94947 - fix test for externally visible variables for IPA PTA
This fixes lack of an escape point of externally declared variables. 2020-05-05 Richard Biener <rguenther@suse.de> PR ipa/94947 * tree-ssa-structalias.c (ipa_pta_execute): Use varpool_node::externally_visible_p (). (refered_from_nonlocal_var): Likewise. * gcc.dg/torture/pr94947-1.c: New testcase. * gcc.dg/torture/pr94947-2.c: Likewise.
This commit is contained in:
parent
5269b24605
commit
f9b5db750b
gcc
@ -1,3 +1,10 @@
|
||||
2020-05-05 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR ipa/94947
|
||||
* tree-ssa-structalias.c (ipa_pta_execute): Use
|
||||
varpool_node::externally_visible_p ().
|
||||
(refered_from_nonlocal_var): Likewise.
|
||||
|
||||
2020-05-05 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gcc.c (LTO_PLUGIN_SPEC): Define if not already.
|
||||
|
@ -1,3 +1,9 @@
|
||||
2020-05-05 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR ipa/94947
|
||||
* gcc.dg/torture/pr94947-1.c: New testcase.
|
||||
* gcc.dg/torture/pr94947-2.c: Likewise.
|
||||
|
||||
2020-05-05 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gnat.dg/aggr29.adb: New test.
|
||||
|
23
gcc/testsuite/gcc.dg/torture/pr94947-1.c
Normal file
23
gcc/testsuite/gcc.dg/torture/pr94947-1.c
Normal file
@ -0,0 +1,23 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-additional-sources "pr94947-2.c" } */
|
||||
/* { dg-additional-options "-fipa-pta -flto-partition=1to1" } */
|
||||
|
||||
extern void abort ();
|
||||
extern void baz ();
|
||||
extern void (*baz_call)();
|
||||
static int *p;
|
||||
|
||||
static void foo ()
|
||||
{
|
||||
if (*p != 1)
|
||||
abort ();
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int x = 1;
|
||||
p = &x;
|
||||
baz_call = foo;
|
||||
baz ();
|
||||
return 0;
|
||||
}
|
7
gcc/testsuite/gcc.dg/torture/pr94947-2.c
Normal file
7
gcc/testsuite/gcc.dg/torture/pr94947-2.c
Normal file
@ -0,0 +1,7 @@
|
||||
/* { dg-do compile } */
|
||||
|
||||
void (*baz_call)();
|
||||
void baz ()
|
||||
{
|
||||
baz_call ();
|
||||
}
|
@ -8097,7 +8097,7 @@ refered_from_nonlocal_var (struct varpool_node *node, void *data)
|
||||
{
|
||||
bool *nonlocal_p = (bool *)data;
|
||||
*nonlocal_p |= (node->used_from_other_partition
|
||||
|| node->externally_visible
|
||||
|| node->externally_visible_p ()
|
||||
|| node->force_output);
|
||||
return false;
|
||||
}
|
||||
@ -8187,8 +8187,8 @@ ipa_pta_execute (void)
|
||||
|
||||
/* For the purpose of IPA PTA unit-local globals are not
|
||||
escape points. */
|
||||
bool nonlocal_p = (var->used_from_other_partition
|
||||
|| var->externally_visible
|
||||
bool nonlocal_p = (var->externally_visible_p ()
|
||||
|| var->used_from_other_partition
|
||||
|| var->force_output);
|
||||
var->call_for_symbol_and_aliases (refered_from_nonlocal_var,
|
||||
&nonlocal_p, true);
|
||||
|
Loading…
x
Reference in New Issue
Block a user