i386.c (release_scratch_register_on_entry): Also adjust sp_offset manually.
authorEric Botcazou <ebotcazou@adacore.com>
Fri, 9 Nov 2012 09:10:04 +0000 (09:10 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Fri, 9 Nov 2012 09:10:04 +0000 (09:10 +0000)
* config/i386/i386.c (release_scratch_register_on_entry): Also adjust
sp_offset manually.

From-SVN: r193352

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/stack_check3.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/stack_check3.ads [new file with mode: 0644]

index a45d72b71a74aad9ec253df0fbaf768d2ee5fd83..f8f19bad0e4667ae788c297c3cda067b70028163 100644 (file)
@@ -1,3 +1,8 @@
+2012-11-09  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * config/i386/i386.c (release_scratch_register_on_entry): Also adjust
+       sp_offset manually.
+
 2012-11-08  Christian Bruel  <christian.bruel@st.com>
 
        * 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  <davem@davemloft.net>
 
        * config/sparc/constraints.md ("U"): Document, in detail,
index ec33622ceb9a97698bf68fe1a3bae0baada1dc0f..3a6f494e4e0e258adf19cca7b0807ee4f29c526a 100644 (file)
@@ -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;
     }
 }
 
index 3d81982ea9360be8001dd46a27fd9d8a902215b5..226c5f8cefe808c6562d99b6dfaf86b78938c0d4 100644 (file)
@@ -1,3 +1,7 @@
+2012-11-09  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/stack_check3.ad[sb]: New test.
+
 2012-11-08  Ian Lance Taylor  <iant@google.com>
 
        * 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 (file)
index 0000000..734ed42
--- /dev/null
@@ -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 (file)
index 0000000..869c418
--- /dev/null
@@ -0,0 +1,5 @@
+package Stack_Check3 is
+
+  procedure Reset;
+
+end Stack_Check3;