From 0230e69a3fabe6ad1d80cdf308ad1bf1934c4381 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Mon, 23 Aug 2021 15:37:48 +0200 Subject: [PATCH] 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 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. --- gcc/testsuite/g++.dg/lto/pr97565_0.C | 7 +++++++ gcc/testsuite/g++.dg/lto/pr97565_1.C | 6 ++++++ gcc/tree-ssa-structalias.c | 22 ++++++++++++++-------- 3 files changed, 27 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/g++.dg/lto/pr97565_0.C create mode 100644 gcc/testsuite/g++.dg/lto/pr97565_1.C 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); -- 2.7.4