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.
+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.
+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.
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { dg-do compile } */
+
+void (*baz_call)();
+void baz ()
+{
+ baz_call ();
+}
{
bool *nonlocal_p = (bool *)data;
*nonlocal_p |= (node->used_from_other_partition
- || node->externally_visible
+ || node->externally_visible_p ()
|| node->force_output);
return false;
}
/* 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);