aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2015-07-09 09:26:47 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2015-07-09 02:26:47 -0700
commit661c8707bf0629bb1b69efa14dfc3d8e89e61706 (patch)
treeea2202259edd7a19acc779240272eeb8e92f407e /gcc
parentca87c493f78fc19c4196e28cfe137add40bf2932 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/config/i386/i386.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr66817.c27
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;
+}