diff options
author | Jakub Jelinek <jakub@redhat.com> | 2012-11-20 09:38:11 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2012-11-20 09:38:11 +0100 |
commit | 206604dccdcd6b054c1c81d4e058b9ca4db8f1f0 (patch) | |
tree | 3f976d8db947ec504470f76bc3ab56713f7f77aa /gcc/builtins.c | |
parent | 1b845c6e70049828a6732f60e2eb03042cc6ff1b (diff) | |
download | gcc-206604dccdcd6b054c1c81d4e058b9ca4db8f1f0.zip gcc-206604dccdcd6b054c1c81d4e058b9ca4db8f1f0.tar.gz gcc-206604dccdcd6b054c1c81d4e058b9ca4db8f1f0.tar.bz2 |
re PR debug/55094 (ICE in maybe_record_trace_start, at dwarf2cfi.c:2224)
PR middle-end/55094
* builtins.c (expand_builtin_trap): Add REG_ARGS_SIZE note
on the trap insn for !ACCUMULATE_OUTGOING_ARGS.
* cfgcleanup.c (outgoing_edges_match): Don't look at debug insns
on the first old_insns_match_p call. For !ACCUMULATE_OUTGOING_ARGS
fail if the last real insn doesn't have REG_ARGS_SIZE note.
* gcc.dg/pr55094.c: New test.
From-SVN: r193649
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r-- | gcc/builtins.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c index fbeac75..b0cab51 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -4666,7 +4666,14 @@ expand_builtin_trap (void) { #ifdef HAVE_trap if (HAVE_trap) - emit_insn (gen_trap ()); + { + rtx insn = emit_insn (gen_trap ()); + /* For trap insns when not accumulating outgoing args force + REG_ARGS_SIZE note to prevent crossjumping of calls with + different args sizes. */ + if (!ACCUMULATE_OUTGOING_ARGS) + add_reg_note (insn, REG_ARGS_SIZE, GEN_INT (stack_pointer_delta)); + } else #endif emit_library_call (abort_libfunc, LCT_NORETURN, VOIDmode, 0); |