diff options
author | H.J. Lu <hongjiu.lu@intel.com> | 2015-07-09 09:26:47 +0000 |
---|---|---|
committer | H.J. Lu <hjl@gcc.gnu.org> | 2015-07-09 02:26:47 -0700 |
commit | 661c8707bf0629bb1b69efa14dfc3d8e89e61706 (patch) | |
tree | ea2202259edd7a19acc779240272eeb8e92f407e /gcc | |
parent | ca87c493f78fc19c4196e28cfe137add40bf2932 (diff) | |
download | gcc-661c8707bf0629bb1b69efa14dfc3d8e89e61706.zip gcc-661c8707bf0629bb1b69efa14dfc3d8e89e61706.tar.gz gcc-661c8707bf0629bb1b69efa14dfc3d8e89e61706.tar.bz2 |
Check int_size_in_bytes in ix86_return_in_memory
ix86_return_in_memory should check negative return from int_size_in_bytes,
similar to other ports.
gcc/
PR target/66817
* config/i386/i386.c (ix86_return_in_memory): Return true
if int_size_in_bytes returns negative for IA MCU.
gcc/testsuite/
PR target/66817
* gcc.target/i386/pr66817.c: New test.
From-SVN: r225605
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr66817.c | 27 |
4 files changed, 39 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a0d835e..78cc6f9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-07-09 H.J. Lu <hongjiu.lu@intel.com> + + PR target/66817 + * config/i386/i386.c (ix86_return_in_memory): Return true + if int_size_in_bytes returns negative for IA MCU. + 2015-07-09 Marek Polacek <polacek@redhat.com> PR tree-optimization/66718 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 55a32ac..54ee6f3 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -8682,7 +8682,7 @@ ix86_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED) /* Intel MCU psABI returns scalars and aggregates no larger than 8 bytes in registers. */ if (TARGET_IAMCU) - return VECTOR_MODE_P (mode) || size > 8; + return VECTOR_MODE_P (mode) || size < 0 || size > 8; if (mode == BLKmode) return true; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 661ccb5..42b6203 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-07-09 H.J. Lu <hongjiu.lu@intel.com> + + PR target/66817 + * gcc.target/i386/pr66817.c: New test. + 2015-07-09 Marek Polacek <polacek@redhat.com> PR tree-optimization/66718 diff --git a/gcc/testsuite/gcc.target/i386/pr66817.c b/gcc/testsuite/gcc.target/i386/pr66817.c new file mode 100644 index 0000000..7ec18b7 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr66817.c @@ -0,0 +1,27 @@ +/* { dg-do compile { target ia32 } } */ +/* { dg-options "-O2 -mno-sse -mno-mmx -miamcu" } */ + +extern void abort (void); +int +main (int argc, char **argv) +{ + int size = 10; + typedef struct + { + char val[size]; + } + block; + block a, b; + block __attribute__((noinline)) + retframe_block () + { + return *(block *) &b; + } + b.val[0] = 1; + b.val[9] = 2; + a=retframe_block (); + if (a.val[0] != 1 + || a.val[9] != 2) + abort (); + return 0; +} |