diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-03-29 12:42:51 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-03-29 12:42:51 +0100 |
commit | a6240447c4eb5e683cf439fa2f3cff3773f6d6fb (patch) | |
tree | f2977d6c6568cfb8342e14782ea3ae4cdf095ae4 /gcc/function.c | |
parent | 34f95cbdc5310b9ca88df0a705b615b03b685e65 (diff) | |
download | gcc-a6240447c4eb5e683cf439fa2f3cff3773f6d6fb.zip gcc-a6240447c4eb5e683cf439fa2f3cff3773f6d6fb.tar.gz gcc-a6240447c4eb5e683cf439fa2f3cff3773f6d6fb.tar.bz2 |
re PR rtl-optimization/87485 (Compile time hog w/ -O2 -fschedule-insns -fno-guess-branch-probability -fno-isolate-erroneous-paths-dereference -fno-omit-frame-pointer -fno-split-wide-types -fno-tree-ccp -fno-tree-sra)
PR rtl-optimization/87485
* function.c (expand_function_end): Move stack_protect_epilogue
before loading of return value into hard register(s).
* gcc.dg/pr87485.c: New test.
From-SVN: r270013
Diffstat (limited to 'gcc/function.c')
-rw-r--r-- | gcc/function.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/function.c b/gcc/function.c index bf5ba3d..c6e862b 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -5330,6 +5330,12 @@ expand_function_end (void) communicate between __builtin_eh_return and the epilogue. */ expand_eh_return (); + /* If stack protection is enabled for this function, check the guard. */ + if (crtl->stack_protect_guard + && targetm.stack_protect_runtime_enabled_p () + && naked_return_label == NULL_RTX) + stack_protect_epilogue (); + /* If scalar return value was computed in a pseudo-reg, or was a named return value that got dumped to the stack, copy that to the hard return register. */ @@ -5476,7 +5482,9 @@ expand_function_end (void) emit_insn (gen_blockage ()); /* If stack protection is enabled for this function, check the guard. */ - if (crtl->stack_protect_guard && targetm.stack_protect_runtime_enabled_p ()) + if (crtl->stack_protect_guard + && targetm.stack_protect_runtime_enabled_p () + && naked_return_label) stack_protect_epilogue (); /* If we had calls to alloca, and this machine needs |