[Bug middle-end/64242] Longjmp expansion incorrect
wilco at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Jun 3 13:55:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64242
--- Comment #24 from Wilco <wilco at gcc dot gnu.org> ---
Author: wilco
Date: Mon Jun 3 13:55:15 2019
New Revision: 271870
URL: https://gcc.gnu.org/viewcvs?rev=271870&root=gcc&view=rev
Log:
Fix PR64242 - Longjmp expansion incorrect
Improve the fix for PR64242. Various optimizations can change a memory
reference into a frame access. Given there are multiple virtual frame pointers
which may be replaced by multiple hard frame pointers, there are no checks for
writes to the various frame pointers. So updates to a frame pointer tends to
generate incorrect code. Improve the previous fix to also add clobbers of
several frame pointers and add a scheduling barrier. This should work in most
cases until GCC supports a generic "don't optimize across this instruction"
feature.
Bootstrap OK. Testcase passes on AArch64 and x86-64. Inspected x86, Arm,
Thumb-1 and Thumb-2 assembler which looks correct.
gcc/
PR middle-end/64242
* builtins.c (expand_builtin_longjmp): Add frame clobbers and schedule
block.
(expand_builtin_nonlocal_goto): Likewise.
testsuite/
PR middle-end/64242
* gcc.c-torture/execute/pr64242.c: Update test.
Modified:
trunk/gcc/ChangeLog
trunk/gcc/builtins.c
trunk/gcc/testsuite/ChangeLog
trunk/gcc/testsuite/gcc.c-torture/execute/pr64242.c
More information about the Gcc-bugs
mailing list