aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDaniel Santos <daniel.santos@pobox.com>2017-10-31 21:48:55 +0000
committerDaniel Santos <dansan@gcc.gnu.org>2017-10-31 21:48:55 +0000
commit98df3ab0d97ec879ecc5bf0edf8bc0dae724e8e0 (patch)
treef6df7669ef008a6c8fe195a5a688be704d51e4f9 /gcc
parent0a9088ee137d861c70898598d1bb79408f61689e (diff)
downloadgcc-98df3ab0d97ec879ecc5bf0edf8bc0dae724e8e0.zip
gcc-98df3ab0d97ec879ecc5bf0edf8bc0dae724e8e0.tar.gz
gcc-98df3ab0d97ec879ecc5bf0edf8bc0dae724e8e0.tar.bz2
PR target/82002 Part 1: Correct ICE caused by wrong calculation
gcc: config/i386/i386.c (ix86_expand_epilogue): Correct stack calculation. gcc/testsuite: gcc.target/i386/pr82002-1.c: New test. gcc.target/i386/pr82002-2a.c: New xfail test. gcc.target/i386/pr82002-2b.c: New xfail test. From-SVN: r254284
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/i386.c2
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.target/i386/pr82002-1.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/pr82002-2a.c14
-rw-r--r--gcc/testsuite/gcc.target/i386/pr82002-2b.c14
6 files changed, 52 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 689b5ab..62f81b7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2017-10-31 Daniel Santos <daniel.santos@pobox.com>
+
+ config/i386/i386.c (ix86_expand_epilogue): Correct stack
+ calculation.
+
2017-10-31 Martin Jambor <mjambor@suse.cz>
PR c++/81702
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 382635f..56c59e9 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -13812,7 +13812,7 @@ ix86_expand_epilogue (int style)
the stack pointer, if we will restore SSE regs via sp. */
if (TARGET_64BIT
&& m->fs.sp_offset > 0x7fffffff
- && sp_valid_at (frame.stack_realign_offset)
+ && sp_valid_at (frame.stack_realign_offset + 1)
&& (frame.nsseregs + frame.nregs) != 0)
{
pro_epilogue_adjust_stack (stack_pointer_rtx, stack_pointer_rtx,
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 82fd2aa..68c4b26 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2017-10-31 Daniel Santos <daniel.santos@pobox.com>
+
+ gcc.target/i386/pr82002-1.c: New test.
+ gcc.target/i386/pr82002-2a.c: New xfail test.
+ gcc.target/i386/pr82002-2b.c: New xfail test.
+
2017-10-31 Martin Jambor <mjambor@suse.cz>
PR c++/81702
diff --git a/gcc/testsuite/gcc.target/i386/pr82002-1.c b/gcc/testsuite/gcc.target/i386/pr82002-1.c
new file mode 100644
index 0000000..86678a0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr82002-1.c
@@ -0,0 +1,12 @@
+/* { dg-do compile { target lp64 } } */
+/* { dg-options "-Ofast -mstackrealign -mabi=ms" } */
+
+void a (char *);
+void
+b ()
+{
+ char c[10000000000];
+ c[1099511627776] = 'b';
+ a (c);
+ a (c);
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr82002-2a.c b/gcc/testsuite/gcc.target/i386/pr82002-2a.c
new file mode 100644
index 0000000..bc85080
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr82002-2a.c
@@ -0,0 +1,14 @@
+/* { dg-do compile { target lp64 } } */
+/* { dg-options "-Ofast -mstackrealign -mabi=ms" } */
+/* { dg-xfail-if "" { *-*-* } } */
+/* { dg-xfail-run-if "" { *-*-* } } */
+
+void __attribute__((sysv_abi)) a (char *);
+void
+b ()
+{
+ char c[10000000000];
+ c[1099511627776] = 'b';
+ a (c);
+ a (c);
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr82002-2b.c b/gcc/testsuite/gcc.target/i386/pr82002-2b.c
new file mode 100644
index 0000000..10e44cd
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr82002-2b.c
@@ -0,0 +1,14 @@
+/* { dg-do compile { target lp64 } } */
+/* { dg-options "-Ofast -mstackrealign -mabi=ms -mcall-ms2sysv-xlogues" } */
+/* { dg-xfail-if "" { *-*-* } } */
+/* { dg-xfail-run-if "" { *-*-* } } */
+
+void __attribute__((sysv_abi)) a (char *);
+void
+b ()
+{
+ char c[10000000000];
+ c[1099511627776] = 'b';
+ a (c);
+ a (c);
+}