]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/57845 (ICE with -freg-struct-return on SPARC)
authorEric Botcazou <ebotcazou@gcc.gnu.org>
Tue, 10 Nov 2015 00:49:05 +0000 (00:49 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Tue, 10 Nov 2015 00:49:05 +0000 (00:49 +0000)
PR target/57845
* config/sparc/sparc.c (sparc_function_value_1): In 32-bit mode, do
not promote the mode for aggregate types.

From-SVN: r230077

gcc/ChangeLog
gcc/config/sparc/sparc.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/sparc/sparc-ret-1.c [moved from gcc/testsuite/gcc.target/sparc/sparc-ret.c with 100% similarity]
gcc/testsuite/gcc.target/sparc/sparc-ret-2.c [new file with mode: 0644]

index 07fbdb9370c70d0afd62593937c33afcecd5be18..0c0c3df60f33e503f46485adc702e1d212935b1c 100644 (file)
@@ -1,9 +1,15 @@
+2015-11-09  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR target/57845
+       * config/sparc/sparc.c (sparc_function_value_1): In 32-bit mode, do
+       not promote the mode for aggregate types.
+
 2015-11-09  Renlin Li  <renlin.li@arm.com>
 
        Backport from mainline
        2014-09-12  Wilco Dijkstra  <wilco.dijkstra@arm.com>
 
-       * gcc/ree.c (combine_reaching_defs): Ensure inserted copy don't change
+       * ree.c (combine_reaching_defs): Ensure inserted copy don't change
        the number of hard registers.
 
 2015-11-02  Martin Jambor  <mjambor@suse.cz>
index d6449445caf2dc01552424f452bf50db50e377b1..a1aeecb76b229f1b93aabe7875fcd9d0291ebfae 100644 (file)
@@ -7384,9 +7384,10 @@ sparc_function_value_1 (const_tree type, enum machine_mode mode,
        mode = word_mode;
     }
 
-  /* We should only have pointer and integer types at this point.  This must
-     match sparc_promote_function_mode.  */
+  /* We should only have pointer and integer types at this point, except with
+     -freg-struct-return.  This must match sparc_promote_function_mode.  */
   else if (TARGET_ARCH32
+          && !(type && AGGREGATE_TYPE_P (type))
           && mclass == MODE_INT
           && GET_MODE_SIZE (mode) < UNITS_PER_WORD)
     mode = word_mode;
index 8540fb6ff9a936a30102c59f23a4117e4ce61a0d..8039aeaeb2d96d056dc624d290153d8fcf6e9e0f 100644 (file)
@@ -1,10 +1,16 @@
+2015-11-09  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc.target/sparc/sparc-ret.c: Rename to...
+       * gcc.target/sparc/sparc-ret-1.c: ...this.
+       * gcc.target/sparc/sparc-ret-2.c: New test.
+
 2015-11-02  Martin Jambor  <mjambor@suse.cz>
 
-       Backport from mainline
+       Backport from mainline
        2015-10-09  Martin Jambor  <mjambor@suse.cz>
 
-       * gcc.dg/ipa/ipa-sra-10.c: New test.
-       * gcc.dg/torture/pr67794.c: Likewise.
+       * gcc.dg/ipa/ipa-sra-10.c: New test.
+       * gcc.dg/torture/pr67794.c: Likewise.
 
 2015-10-22  Paul Thomas  <pault@gcc.gnu.org>
 
diff --git a/gcc/testsuite/gcc.target/sparc/sparc-ret-2.c b/gcc/testsuite/gcc.target/sparc/sparc-ret-2.c
new file mode 100644 (file)
index 0000000..536b9b7
--- /dev/null
@@ -0,0 +1,13 @@
+/* PR target/57845 */
+
+/* { dg-do compile } */
+/* { dg-options "-freg-struct-return" } */
+
+struct S { short int i; };
+
+struct S foo (short int i)
+{
+  struct S s;
+  s.i = i;
+  return s;
+}