reg-stack.c (stack_result): Unconditionally use FUNCTION_OUTGOING_VALUE resp.
authorJakub Jelinek <jakub@redhat.com>
Wed, 14 Mar 2001 17:59:03 +0000 (18:59 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 14 Mar 2001 17:59:03 +0000 (18:59 +0100)
* reg-stack.c (stack_result): Unconditionally use
FUNCTION_OUTGOING_VALUE resp. FUNCTION_VALUE.

* g++.old-deja/g++.other/regstack.C: New test.

From-SVN: r40457

gcc/ChangeLog
gcc/reg-stack.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.old-deja/g++.other/regstack.C [new file with mode: 0644]

index 54031ae237a6a1371a84ee64622b6c9c74dd0539..dd2818dadbbf27a828b338e075ed229835c23d3a 100644 (file)
@@ -1,3 +1,8 @@
+2001-03-14  Jakub Jelinek  <jakub@redhat.com>
+
+       * reg-stack.c (stack_result): Unconditionally use
+       FUNCTION_OUTGOING_VALUE resp. FUNCTION_VALUE.
+
 Wed Mar 14 16:36:25 CET 2001  Jan Hubicka  <jh@suse.cz>
 
        * expr.c (emit_move_insn_1):  Split push of complex value when
index 1d14a013cee7ea7381d2afcf8c287c89e322974e..2f00113bab5061328be95263f0f1c0cdd2df8133 100644 (file)
@@ -786,11 +786,7 @@ stack_result (decl)
     return 0;
 
   result = DECL_RTL (DECL_RESULT (decl));
-  /* ?!?  What is this code supposed to do?  Can this code actually
-     trigger if we kick out aggregates above?  */
-  if (result != 0
-      && ! (GET_CODE (result) == REG
-           && REGNO (result) < FIRST_PSEUDO_REGISTER))
+  if (result != 0)
     {
 #ifdef FUNCTION_OUTGOING_VALUE
       result
index c86f7502246cd64b3af521c0b6c3f1ea1a3667a0..3198df8e22c42bc2846de55d66666cab469cf27f 100644 (file)
@@ -1,3 +1,7 @@
+2001-03-14  Jakub Jelinek  <jakub@redhat.com>
+
+       * g++.old-deja/g++.other/regstack.C: New test.
+
 2001-03-12  Nathan Sidwell  <nathan@codesourcery.com>
 
        * g++.old-deja/g++.other/ref4.C: New test.
diff --git a/gcc/testsuite/g++.old-deja/g++.other/regstack.C b/gcc/testsuite/g++.old-deja/g++.other/regstack.C
new file mode 100644 (file)
index 0000000..ea72221
--- /dev/null
@@ -0,0 +1,31 @@
+// Special g++ Options: -O2
+// Skip if not target: i?86-*-*
+
+inline double foo (double x)
+{
+  register double r;
+  asm volatile ("fsqrt" : "=t" (r) : "0" (x));
+  return r;
+}
+
+struct X
+{
+  ~X() {}
+};
+
+int b;
+
+double bar (X x)
+{
+  if (b)
+    return 1.0;
+  return 36.0 * foo (36.0);
+}
+
+int main ()
+{
+  X x;
+  if (bar (x) != 216.0)
+    return 1;
+  return 0;
+}