aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2020-05-05 13:09:50 +0200
committerRichard Biener <rguenther@suse.de>2020-12-01 15:00:27 +0100
commit1cd95acac5a521937b205ace0db3f1a042561dd8 (patch)
treef5e9d4cafdd81fda4434e111dc9a46ced4d15577 /gcc
parent70ac96884811b6971b44a7ffa94d637f612e6cc4 (diff)
downloadgcc-1cd95acac5a521937b205ace0db3f1a042561dd8.zip
gcc-1cd95acac5a521937b205ace0db3f1a042561dd8.tar.gz
gcc-1cd95acac5a521937b205ace0db3f1a042561dd8.tar.bz2
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. (cherry picked from commit f9b5db750bc7fbba69fee93564907f7da1bca35f)
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr94947-1.c23
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr94947-2.c7
-rw-r--r--gcc/tree-ssa-structalias.c6
3 files changed, 33 insertions, 3 deletions
diff --git a/gcc/testsuite/gcc.dg/torture/pr94947-1.c b/gcc/testsuite/gcc.dg/torture/pr94947-1.c
new file mode 100644
index 0000000..ab8b488
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr94947-1.c
@@ -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;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr94947-2.c b/gcc/testsuite/gcc.dg/torture/pr94947-2.c
new file mode 100644
index 0000000..670dd61
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr94947-2.c
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+
+void (*baz_call)();
+void baz ()
+{
+ baz_call ();
+}
diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
index b02f57c..9bb6fbb 100644
--- a/gcc/tree-ssa-structalias.c
+++ b/gcc/tree-ssa-structalias.c
@@ -7905,7 +7905,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;
}
@@ -7994,8 +7994,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);