diff options
-rw-r--r-- | gnu/egcs/gcc/protector.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/gnu/egcs/gcc/protector.c b/gnu/egcs/gcc/protector.c index efbe22dba71..5e1f96a6448 100644 --- a/gnu/egcs/gcc/protector.c +++ b/gnu/egcs/gcc/protector.c @@ -1765,12 +1765,16 @@ assign_stack_local_for_pseudo_reg (mode, size, align) GET_MODE_SIZE (mode)); if (push_frame_offset == 0 - && check_out_of_frame_access (get_insns (), STARTING_FRAME_OFFSET)) + && check_out_of_frame_access (get_insns (), STARTING_FRAME_OFFSET + push_allocated_offset)) { - /* if there is an access beyond frame, push dummy region to seperate - the address of instantiated variables */ - push_frame (GET_MODE_SIZE (DImode), 0); - assign_stack_local (BLKmode, GET_MODE_SIZE (DImode), -1); + if (push_allocated_offset == 0) + { + /* if there is an access beyond frame, push dummy region to seperate + the address of instantiated variables */ + push_frame (GET_MODE_SIZE (DImode), 0); + assign_stack_local (BLKmode, GET_MODE_SIZE (DImode), -1); + } + else push_allocated_offset = 0; } saved_frame_offset = frame_offset; |