diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2018-11-11 18:49:33 +0100 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2018-11-11 18:49:33 +0100 |
commit | bd5d3961572e2d65ed0e612235f0c7a28305cf98 (patch) | |
tree | 74893fc8fd88cf2b75ad46388bd8faa031dbba13 | |
parent | 6d6fbec5f3f41709c1f3d3d83c5345fbf90bf321 (diff) | |
download | gcc-bd5d3961572e2d65ed0e612235f0c7a28305cf98.zip gcc-bd5d3961572e2d65ed0e612235f0c7a28305cf98.tar.gz gcc-bd5d3961572e2d65ed0e612235f0c7a28305cf98.tar.bz2 |
re PR target/87928 (ICE in ix86_compute_frame_layout, at config/i386/i386.c:11161 since r228607)
PR target/87928
* config/i386/i386.h (STACK_BOUNDARY): Use TARGET_64BIT_MS_ABI
instead of (TARGET_64BIT && ix86_abi == MS_ABI).
* config/i386/darwin.h (STACK_BOUNDARY): Ditto.
* config/i386/cygming.h (STACK_BOUNDARY): Remove.
testsuite /Changelog:
PR target/87928
* gcc.target/i386/pr87928.c: New test.
From-SVN: r266016
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/i386/cygming.h | 3 | ||||
-rw-r--r-- | gcc/config/i386/darwin.h | 3 | ||||
-rw-r--r-- | gcc/config/i386/i386.h | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr87928.c | 23 |
6 files changed, 38 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c19badc..67a6b80 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2018-11-11 Uros Bizjak <ubizjak@gmail.com> + + PR target/87928 + * config/i386/i386.h (STACK_BOUNDARY): Use TARGET_64BIT_MS_ABI + instead of (TARGET_64BIT && ix86_abi == MS_ABI). + * config/i386/darwin.h (STACK_BOUNDARY): Ditto. + * config/i386/cygming.h (STACK_BOUNDARY): Remove. + 2018-11-11 Xianmiao Qu <xianmiao_qu@c-sky.com> * config/csky/csky-linux-elf.h (CC1_SPEC): Support -profile. diff --git a/gcc/config/i386/cygming.h b/gcc/config/i386/cygming.h index d7c7dd7..0a3c9a0 100644 --- a/gcc/config/i386/cygming.h +++ b/gcc/config/i386/cygming.h @@ -268,9 +268,6 @@ do { \ bytes in one go. */ #define CHECK_STACK_LIMIT 4000 -#undef STACK_BOUNDARY -#define STACK_BOUNDARY (TARGET_64BIT && ix86_abi == MS_ABI ? 128 : BITS_PER_WORD) - /* By default, target has a 80387, uses IEEE compatible arithmetic, returns float values in the 387 and needs stack probes. We also align doubles to 64-bits for MSVC default compatibility. */ diff --git a/gcc/config/i386/darwin.h b/gcc/config/i386/darwin.h index cf7d4ef..1ea5dc3 100644 --- a/gcc/config/i386/darwin.h +++ b/gcc/config/i386/darwin.h @@ -113,8 +113,7 @@ extern int darwin_emit_branch_islands; or dynamic loader. */ #undef STACK_BOUNDARY #define STACK_BOUNDARY \ - ((profile_flag || (TARGET_64BIT && ix86_abi == MS_ABI)) \ - ? 128 : BITS_PER_WORD) + ((profile_flag || TARGET_64BIT_MS_ABI) ? 128 : BITS_PER_WORD) #undef MAIN_STACK_BOUNDARY #define MAIN_STACK_BOUNDARY 128 diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 3a26644..813c86d 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -809,8 +809,7 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); #define PARM_BOUNDARY BITS_PER_WORD /* Boundary (in *bits*) on which stack pointer should be aligned. */ -#define STACK_BOUNDARY \ - (TARGET_64BIT && ix86_abi == MS_ABI ? 128 : BITS_PER_WORD) +#define STACK_BOUNDARY (TARGET_64BIT_MS_ABI ? 128 : BITS_PER_WORD) /* Stack boundary of the main function guaranteed by OS. */ #define MAIN_STACK_BOUNDARY (TARGET_64BIT ? 128 : 32) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 562c4e2..dd2cc13 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-11-11 Uros Bizjak <ubizjak@gmail.com> + + PR target/87928 + * gcc.target/i386/pr87928.c: New test. + 2018-11-09 Martin Sebor <msebor@redhat.com> PR testsuite/87965 diff --git a/gcc/testsuite/gcc.target/i386/pr87928.c b/gcc/testsuite/gcc.target/i386/pr87928.c new file mode 100644 index 0000000..5edaa5f --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr87928.c @@ -0,0 +1,23 @@ +/* { dg-do compile { target lp64 } } */ +/* { dg-options "-O1 -mstackrealign -mabi=ms" } */ + +struct foo +{ + int a; + int b; + int c; + int d; +}; + +__attribute__ ((sysv_abi)) +struct foo bar (void) +{ + struct foo retval; + + retval.a = 1; + retval.b = 2; + retval.c = 3; + retval.d = 4; + + return retval; +} |