summaryrefslogtreecommitdiff
path: root/gcc/function.c
diff options
context:
space:
mode:
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>2012-05-12 21:35:37 +0000
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>2012-05-12 21:35:37 +0000
commitec3aa8fee567d7b8ba1bb08691630f6e3fc2e534 (patch)
tree1e2f7f7fa85efcdd3543f687f7985306339dea16 /gcc/function.c
parentbcd59a2ba0a8ac4520271bcebb54fbff293e7fcb (diff)
downloadgcc-ec3aa8fee567d7b8ba1bb08691630f6e3fc2e534.tar.gz
* function.c (requires_stack_frame_p): If the function can throw
non-call exceptions, return true if the insn can throw internally. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@187429 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/function.c')
-rw-r--r--gcc/function.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/function.c b/gcc/function.c
index b5e9011ce23..00c55a16a62 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -5316,6 +5316,10 @@ requires_stack_frame_p (rtx insn, HARD_REG_SET prologue_used,
if (CALL_P (insn))
return !SIBLING_CALL_P (insn);
+ /* We need a frame to get the unique CFA expected by the unwinder. */
+ if (cfun->can_throw_non_call_exceptions && can_throw_internal (insn))
+ return true;
+
CLEAR_HARD_REG_SET (hardregs);
for (df_rec = DF_INSN_DEFS (insn); *df_rec; df_rec++)
{