aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilco Dijkstra <wdijkstr@arm.com>2017-05-18 15:58:33 +0000
committerWilco Dijkstra <wilco@gcc.gnu.org>2017-05-18 15:58:33 +0000
commit00d600138536a4978f40b25233c2f37c0fc426d4 (patch)
tree8f1c7987efcffcb6c2d403a3ea483a1fdd783b71
parent2063b07f4de76afe602730fb51acd8aebbf5c1bd (diff)
downloadgcc-00d600138536a4978f40b25233c2f37c0fc426d4.zip
gcc-00d600138536a4978f40b25233c2f37c0fc426d4.tar.gz
gcc-00d600138536a4978f40b25233c2f37c0fc426d4.tar.bz2
Add an assert to leaf_function_p to ensure it is not called from a prolog or...
Add an assert to leaf_function_p to ensure it is not called from a prolog or epilog sequence (which would incorrectly return true in a non-leaf function). There are several targets which still call leaf_function_p, and while most appear safe or appear aware of the issue, it is likely not all such calls are safe. This check enables any such latent bugs to be found. gcc/ * final.c (leaf_function_p): Check we are not in a sequence. From-SVN: r248240
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/final.c3
2 files changed, 7 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f276258..a9a861e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2017-05-18 Wilco Dijkstra <wdijkstr@arm.com>
+
+ * final.c (leaf_function_p): Check we are not in a sequence.
+
2017-05-18 Martin Liska <mliska@suse.cz>
* cfgrtl.c (rtl_verify_edges): Remove usage of TDF_RTL.
diff --git a/gcc/final.c b/gcc/final.c
index 820162b..e61b78b 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -4309,6 +4309,9 @@ leaf_function_p (void)
{
rtx_insn *insn;
+ /* Ensure we walk the entire function body. */
+ gcc_assert (!in_sequence_p ());
+
/* Some back-ends (e.g. s390) want leaf functions to stay leaf
functions even if they call mcount. */
if (crtl->profile && !targetm.keep_leaf_when_profiled ())