aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDale Johannesen <dalej@apple.com>2005-03-30 20:21:37 +0000
committerDale Johannesen <dalej@gcc.gnu.org>2005-03-30 20:21:37 +0000
commit63579539f1ba8e2985327e52965906f09d6f0e36 (patch)
treedd64ef4e28c90879ca44da928504b00c70604195 /gcc
parent86472dc31700e9fc684a27fcee2dc743c9d1216f (diff)
downloadgcc-63579539f1ba8e2985327e52965906f09d6f0e36.zip
gcc-63579539f1ba8e2985327e52965906f09d6f0e36.tar.gz
gcc-63579539f1ba8e2985327e52965906f09d6f0e36.tar.bz2
re PR middle-end/19225 (g++.dg/eh/omit-frame-pointer2.C fails with -fpic/-fPIC on i686-pc-linux-gnu)
2005-03-30 Dale Johannesen <dalej@apple.com> PR middle-end/19225 * calls.c (expand_call): Flush pending deferrals before throwing call. From-SVN: r97277
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/calls.c6
2 files changed, 11 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f65e3f9..1d20452 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2005-03-30 Dale Johannesen <dalej@apple.com>
+
+ PR middle-end/19225
+ * calls.c (expand_call): Flush pending deferrals before
+ throwing call.
+
2005-03-30 Joseph S. Myers <joseph@codesourcery.com>
PR c/772
diff --git a/gcc/calls.c b/gcc/calls.c
index 54307bf..3eb16c0 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -2261,10 +2261,14 @@ expand_call (tree exp, rtx target, int ignore)
Also, do all pending adjustments now if there is any chance
this might be a call to alloca or if we are expanding a sibling
call sequence or if we are calling a function that is to return
- with stack pointer depressed. */
+ with stack pointer depressed.
+ Also do the adjustments before a throwing call, otherwise
+ exception handling can fail; PR 19225. */
if (pending_stack_adjust >= 32
|| (pending_stack_adjust > 0
&& (flags & (ECF_MAY_BE_ALLOCA | ECF_SP_DEPRESSED)))
+ || (pending_stack_adjust > 0
+ && flag_exceptions && !(flags & ECF_NOTHROW))
|| pass == 0)
do_pending_stack_adjust ();