diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2025-04-16 15:28:32 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@ucw.cz> | 2025-04-16 15:28:32 +0200 |
commit | eabba7be040e81690332070873d59d23e8c93e11 (patch) | |
tree | a9187447b91b2b63146c60683473d2f8fa6d5067 /gcc/testsuite | |
parent | 0e8b6f0dad11ece6c693e4765f3c58309ff8ef12 (diff) | |
download | gcc-eabba7be040e81690332070873d59d23e8c93e11.zip gcc-eabba7be040e81690332070873d59d23e8c93e11.tar.gz gcc-eabba7be040e81690332070873d59d23e8c93e11.tar.bz2 |
Stream ipa_return_value_summary
Add streaming of return summaries from compile time to ltrans
which are now needed for vrp to not ouput false errors on musttail.
Co-authored-by: Jakub Jelinek <jakub@redhat.com>
gcc/ChangeLog:
PR tree-optimization/119614
* ipa-prop.cc (ipa_write_return_summaries): New function.
(ipa_record_return_value_range_1): Break out from ....
(ipa_record_return_value_range): ... here.
(ipa_read_return_summaries): New function.
(ipa_prop_read_section): Read return summaries.
(read_ipcp_transformation_info): Read return summaries.
(ipcp_write_transformation_summaries): Write return summaries;
do not stream stray 0.
gcc/testsuite/ChangeLog:
* g++.dg/lto/pr119614_0.C: New test.
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/g++.dg/lto/pr119614_0.C | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/lto/pr119614_0.C b/gcc/testsuite/g++.dg/lto/pr119614_0.C new file mode 100644 index 0000000..09c07fb --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr119614_0.C @@ -0,0 +1,34 @@ +// PR tree-optimization/119614 +// { dg-lto-do link } +// { dg-lto-options { { -O2 -fPIC -flto -flto-partition=max } } } +// { dg-require-effective-target shared } +// { dg-require-effective-target fpic } +// { dg-require-effective-target musttail } +// { dg-extra-ld-options "-shared" } + +struct S {} b; +char *foo (); +int e, g; +void bar (); +void corge (S); + +[[gnu::noinline]] static char * +baz () +{ + bar (); + return 0; +} + +const char * +qux () +{ + if (e) + { + S a = b; + corge (a); + if (g) + return 0; + [[gnu::musttail]] return baz (); + } + return foo (); +} |