aboutsummaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2012-11-20 09:38:11 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2012-11-20 09:38:11 +0100
commit206604dccdcd6b054c1c81d4e058b9ca4db8f1f0 (patch)
tree3f976d8db947ec504470f76bc3ab56713f7f77aa /gcc/builtins.c
parent1b845c6e70049828a6732f60e2eb03042cc6ff1b (diff)
downloadgcc-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.c9
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);