aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <jeffreyalaw@gmail.com>2022-09-27 01:44:38 -0400
committerJeff Law <jeffreyalaw@gmail.com>2022-09-27 02:19:57 -0400
commit5da546d7e0561def07c783e6ec897aaa9e7837c6 (patch)
treeaed73b89b42b7c45c77767b8a9aae5f3d145f83f /gcc
parentb04208895fed34171eac6bafb60c90048eb1cb0c (diff)
downloadgcc-5da546d7e0561def07c783e6ec897aaa9e7837c6.zip
gcc-5da546d7e0561def07c783e6ec897aaa9e7837c6.tar.gz
gcc-5da546d7e0561def07c783e6ec897aaa9e7837c6.tar.bz2
Fix ICEs due to recent jump-to-return optimization
gcc/ * cfgrtl.cc (fixup_reorder_chain): Verify that simple_return and return are available before trying to use them.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cfgrtl.cc3
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/cfgrtl.cc b/gcc/cfgrtl.cc
index 90cd6ee..281a432 100644
--- a/gcc/cfgrtl.cc
+++ b/gcc/cfgrtl.cc
@@ -4049,7 +4049,8 @@ fixup_reorder_chain (void)
rtx_insn *ret, *use;
basic_block dest;
if (bb_is_just_return (e_fall->dest, &ret, &use)
- && (PATTERN (ret) == simple_return_rtx || PATTERN (ret) == ret_rtx))
+ && ((PATTERN (ret) == simple_return_rtx && targetm.have_simple_return ())
+ || (PATTERN (ret) == ret_rtx && targetm.have_return ())))
{
ret_label = PATTERN (ret);
dest = EXIT_BLOCK_PTR_FOR_FN (cfun);