diff options
author | Daniel Santos <daniel.santos@pobox.com> | 2017-10-31 21:48:55 +0000 |
---|---|---|
committer | Daniel Santos <dansan@gcc.gnu.org> | 2017-10-31 21:48:55 +0000 |
commit | 98df3ab0d97ec879ecc5bf0edf8bc0dae724e8e0 (patch) | |
tree | f6df7669ef008a6c8fe195a5a688be704d51e4f9 /gcc | |
parent | 0a9088ee137d861c70898598d1bb79408f61689e (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr82002-1.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr82002-2a.c | 14 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr82002-2b.c | 14 |
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); +} |