aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2021-08-23 15:37:48 +0200
committerRichard Biener <rguenther@suse.de>2021-08-23 16:30:16 +0200
commit0230e69a3fabe6ad1d80cdf308ad1bf1934c4381 (patch)
tree53aa9d1fdd3cfee992fced8f713f9ea227ae998f /gcc
parent39baa886bcfa95c06d30a0978aa83f33fcd49745 (diff)
downloadgcc-0230e69a3fabe6ad1d80cdf308ad1bf1934c4381.zip
gcc-0230e69a3fabe6ad1d80cdf308ad1bf1934c4381.tar.gz
gcc-0230e69a3fabe6ad1d80cdf308ad1bf1934c4381.tar.bz2
ipa/97565 - fix IPA PTA body availability check
Looks like the existing check using has_gimple_body_p isn't enough at LTRANS time but I need to check in_other_partition as well. 2021-08-23 Richard Biener <rguenther@suse.de> PR ipa/97565 * tree-ssa-structalias.c (ipa_pta_execute): Check in_other_partition in addition to has_gimple_body. * g++.dg/lto/pr97565_0.C: New testcase. * g++.dg/lto/pr97565_1.C: Likewise.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/g++.dg/lto/pr97565_0.C7
-rw-r--r--gcc/testsuite/g++.dg/lto/pr97565_1.C6
-rw-r--r--gcc/tree-ssa-structalias.c22
3 files changed, 27 insertions, 8 deletions
diff --git a/gcc/testsuite/g++.dg/lto/pr97565_0.C b/gcc/testsuite/g++.dg/lto/pr97565_0.C
new file mode 100644
index 0000000..f4572e1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lto/pr97565_0.C
@@ -0,0 +1,7 @@
+// { dg-lto-do link }
+// { dg-lto-options { "-O -flto -fipa-pta" } }
+
+extern "C" void abort(void)
+{
+ abort();
+}
diff --git a/gcc/testsuite/g++.dg/lto/pr97565_1.C b/gcc/testsuite/g++.dg/lto/pr97565_1.C
new file mode 100644
index 0000000..ff7b638
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lto/pr97565_1.C
@@ -0,0 +1,6 @@
+extern "C" void abort(void);
+
+int main(int argc, char * argv[])
+{
+ abort();
+}
diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
index fb0e429..c430855 100644
--- a/gcc/tree-ssa-structalias.c
+++ b/gcc/tree-ssa-structalias.c
@@ -8220,10 +8220,12 @@ ipa_pta_execute (void)
FOR_EACH_DEFINED_FUNCTION (node)
{
varinfo_t vi;
- /* Nodes without a body are not interesting. Especially do not
- visit clones at this point for now - we get duplicate decls
- there for inline clones at least. */
- if (!node->has_gimple_body_p () || node->inlined_to)
+ /* Nodes without a body in this partition are not interesting.
+ Especially do not visit clones at this point for now - we
+ get duplicate decls there for inline clones at least. */
+ if (!node->has_gimple_body_p ()
+ || node->in_other_partition
+ || node->inlined_to)
continue;
node->get_body ();
@@ -8301,8 +8303,10 @@ ipa_pta_execute (void)
struct function *func;
basic_block bb;
- /* Nodes without a body are not interesting. */
- if (!node->has_gimple_body_p () || node->clone_of)
+ /* Nodes without a body in this partition are not interesting. */
+ if (!node->has_gimple_body_p ()
+ || node->in_other_partition
+ || node->clone_of)
continue;
if (dump_file)
@@ -8431,8 +8435,10 @@ ipa_pta_execute (void)
unsigned i;
basic_block bb;
- /* Nodes without a body are not interesting. */
- if (!node->has_gimple_body_p () || node->clone_of)
+ /* Nodes without a body in this partition are not interesting. */
+ if (!node->has_gimple_body_p ()
+ || node->in_other_partition
+ || node->clone_of)
continue;
fn = DECL_STRUCT_FUNCTION (node->decl);