diff options
author | Richard Biener <rguenther@suse.de> | 2023-02-21 10:26:30 +0100 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2023-02-21 10:26:30 +0100 |
commit | 19ec4092a74821055d3bd61023b3bc2bd1ec4f10 (patch) | |
tree | eebcab08a95236f0accc9c28b36e68d81b29dc81 | |
parent | a804419c89db9e1c0b99e772dda6c95095bab0bf (diff) | |
download | gcc-19ec4092a74821055d3bd61023b3bc2bd1ec4f10.zip gcc-19ec4092a74821055d3bd61023b3bc2bd1ec4f10.tar.gz gcc-19ec4092a74821055d3bd61023b3bc2bd1ec4f10.tar.bz2 |
Revert "tree-optimization/108691 - indirect calls to setjmp"
This reverts commit 6436add49ed9ecf74f1f01b4fe18961df4f3e83d.
-rw-r--r-- | gcc/calls.cc | 10 | ||||
-rw-r--r-- | gcc/cfgexpand.cc | 7 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr108691.c | 9 | ||||
-rw-r--r-- | gcc/tree-cfg.cc | 4 |
4 files changed, 6 insertions, 24 deletions
diff --git a/gcc/calls.cc b/gcc/calls.cc index 0242d52..4d7f6c3 100644 --- a/gcc/calls.cc +++ b/gcc/calls.cc @@ -506,11 +506,11 @@ emit_call_1 (rtx funexp, tree fntree ATTRIBUTE_UNUSED, tree fndecl ATTRIBUTE_UNU if (ecf_flags & ECF_NORETURN) add_reg_note (call_insn, REG_NORETURN, const0_rtx); - if (ecf_flags & ECF_RETURNS_TWICE - /* We rely on GIMPLE setting this flag and here use it to - catch formerly indirect and not control-altering calls. */ - && cfun->calls_setjmp) - add_reg_note (call_insn, REG_SETJMP, const0_rtx); + if (ecf_flags & ECF_RETURNS_TWICE) + { + add_reg_note (call_insn, REG_SETJMP, const0_rtx); + cfun->calls_setjmp = 1; + } SIBLING_CALL_P (call_insn) = ((ecf_flags & ECF_SIBCALL) != 0); diff --git a/gcc/cfgexpand.cc b/gcc/cfgexpand.cc index ab143a6..25b1558 100644 --- a/gcc/cfgexpand.cc +++ b/gcc/cfgexpand.cc @@ -2808,11 +2808,6 @@ expand_call_stmt (gcall *stmt) /* Must come after copying location. */ copy_warning (exp, stmt); - /* For calls that do not alter control flow avoid REG_SETJMP notes. */ - bool saved_calls_setjmp = cfun->calls_setjmp; - if (!gimple_call_ctrl_altering_p (stmt)) - cfun->calls_setjmp = false; - /* Ensure RTL is created for debug args. */ if (decl && DECL_HAS_DEBUG_ARGS_P (decl)) { @@ -2851,8 +2846,6 @@ expand_call_stmt (gcall *stmt) } mark_transaction_restart_calls (stmt); - - cfun->calls_setjmp = saved_calls_setjmp; } diff --git a/gcc/testsuite/gcc.dg/pr108691.c b/gcc/testsuite/gcc.dg/pr108691.c deleted file mode 100644 index e412df1..0000000 --- a/gcc/testsuite/gcc.dg/pr108691.c +++ /dev/null @@ -1,9 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "-O2" } */ - -extern int __attribute__((returns_twice)) setjmp(void*); - -void bbb(void) { - int (*fnptr)(void*) = setjmp; - fnptr(0); -} diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc index e23293e..a9fcc7f 100644 --- a/gcc/tree-cfg.cc +++ b/gcc/tree-cfg.cc @@ -2280,9 +2280,7 @@ notice_special_calls (gcall *call) if (flags & ECF_MAY_BE_ALLOCA) cfun->calls_alloca = true; - if (flags & ECF_RETURNS_TWICE - && (!(cfun->curr_properties & PROP_cfg) - || gimple_call_ctrl_altering_p (call))) + if (flags & ECF_RETURNS_TWICE) cfun->calls_setjmp = true; } |