From 4993465992b6711d8bda90247122135d01ed6f3d Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Fri, 9 Nov 2012 09:10:04 +0000 Subject: [PATCH] i386.c (release_scratch_register_on_entry): Also adjust sp_offset manually. * config/i386/i386.c (release_scratch_register_on_entry): Also adjust sp_offset manually. From-SVN: r193352 --- gcc/ChangeLog | 6 ++++- gcc/config/i386/i386.c | 2 ++ gcc/testsuite/ChangeLog | 4 +++ gcc/testsuite/gnat.dg/stack_check3.adb | 36 ++++++++++++++++++++++++++ gcc/testsuite/gnat.dg/stack_check3.ads | 5 ++++ 5 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gnat.dg/stack_check3.adb create mode 100644 gcc/testsuite/gnat.dg/stack_check3.ads diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a45d72b71a7..f8f19bad0e4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2012-11-09 Eric Botcazou + + * config/i386/i386.c (release_scratch_register_on_entry): Also adjust + sp_offset manually. + 2012-11-08 Christian Bruel * tree-ssa-tail-merge.c (replace_block_by): Update bb2 profile count. @@ -55,7 +60,6 @@ * ipa-prop.c (determine_known_aggregate_parts): Skip writes to different declarations when tracking writes to a declaration. ->>>>>>> .r193349 2012-11-07 David S. Miller * config/sparc/constraints.md ("U"): Document, in detail, diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index ec33622ceb9..3a6f494e4e0 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -9462,6 +9462,7 @@ release_scratch_register_on_entry (struct scratch_reg *sr) { if (sr->saved) { + struct machine_function *m = cfun->machine; rtx x, insn = emit_insn (gen_pop (sr->reg)); /* The RTX_FRAME_RELATED_P mechanism doesn't know about pop. */ @@ -9469,6 +9470,7 @@ release_scratch_register_on_entry (struct scratch_reg *sr) x = gen_rtx_PLUS (Pmode, stack_pointer_rtx, GEN_INT (UNITS_PER_WORD)); x = gen_rtx_SET (VOIDmode, stack_pointer_rtx, x); add_reg_note (insn, REG_FRAME_RELATED_EXPR, x); + m->fs.sp_offset -= UNITS_PER_WORD; } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3d81982ea93..226c5f8cefe 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-11-09 Eric Botcazou + + * gnat.dg/stack_check3.ad[sb]: New test. + 2012-11-08 Ian Lance Taylor * go.test/go-test.exp (go-gc-tests): Handle runoutput test type diff --git a/gcc/testsuite/gnat.dg/stack_check3.adb b/gcc/testsuite/gnat.dg/stack_check3.adb new file mode 100644 index 00000000000..734ed422733 --- /dev/null +++ b/gcc/testsuite/gnat.dg/stack_check3.adb @@ -0,0 +1,36 @@ +-- { dg-do compile } +-- { dg-options "-O -fstack-check" } + +package body Stack_Check3 is + + type Int_Arr is array (1 .. 34) of Integer; + + type Rec (D : Boolean := False) is + record + case D is + when True => IA : Int_Arr; + when False => null; + end case; + end record; + + type Rec_Arr is array (1 .. 256) of Rec; + + protected Prot_Arr is + procedure Reset; + private + A : Rec_Arr; + end Prot_Arr; + + protected body Prot_Arr is + procedure Reset is + begin + A := (others => (D => False)); + end Reset; + end Prot_Arr; + + procedure Reset is + begin + Prot_Arr.Reset; + end Reset; + +end Stack_Check3; diff --git a/gcc/testsuite/gnat.dg/stack_check3.ads b/gcc/testsuite/gnat.dg/stack_check3.ads new file mode 100644 index 00000000000..869c418839e --- /dev/null +++ b/gcc/testsuite/gnat.dg/stack_check3.ads @@ -0,0 +1,5 @@ +package Stack_Check3 is + + procedure Reset; + +end Stack_Check3; -- 2.30.2