aboutsummaryrefslogtreecommitdiff
path: root/gcc/calls.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2012-01-05 21:47:16 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2012-01-05 21:47:16 +0100
commitf8f75b16c2c479c0f9eb2c3f8a55210a99f4b07c (patch)
tree9bec1abf57ab342191f47a5f4dedef16189d8eb7 /gcc/calls.c
parent629c2cca17ff1c931a89011abdbd3ef4761aecb6 (diff)
downloadgcc-f8f75b16c2c479c0f9eb2c3f8a55210a99f4b07c.zip
gcc-f8f75b16c2c479c0f9eb2c3f8a55210a99f4b07c.tar.gz
gcc-f8f75b16c2c479c0f9eb2c3f8a55210a99f4b07c.tar.bz2
re PR debug/51762 (ICE in maybe_record_trace_start, at dwarf2cfi.c:2231)
PR debug/51762 * calls.c (emit_call_1): For noreturn calls force a REG_ARGS_SIZE note when !ACCUMULATE_OUTGOING_ARGS. * gcc.dg/pr51762.c: New test. From-SVN: r182924
Diffstat (limited to 'gcc/calls.c')
-rw-r--r--gcc/calls.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index c8d0b84..943ab09 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -1,7 +1,7 @@
/* Convert function calls to rtl insns, for GNU C compiler.
Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
- 2011 Free Software Foundation, Inc.
+ 2011, 2012 Free Software Foundation, Inc.
This file is part of GCC.
@@ -445,6 +445,11 @@ emit_call_1 (rtx funexp, tree fntree ATTRIBUTE_UNUSED, tree fndecl ATTRIBUTE_UNU
if (SUPPORTS_STACK_ALIGNMENT)
crtl->need_drap = true;
}
+ /* For noreturn calls when not accumulating outgoing args force
+ REG_ARGS_SIZE note to prevent crossjumping of calls with different
+ args sizes. */
+ else if (!ACCUMULATE_OUTGOING_ARGS && (ecf_flags & ECF_NORETURN) != 0)
+ add_reg_note (call_insn, REG_ARGS_SIZE, GEN_INT (stack_pointer_delta));
if (!ACCUMULATE_OUTGOING_ARGS)
{