diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-03-14 17:59:03 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-03-14 17:59:03 +0000 |
commit | 6e5b5ba9a72a35a941abf23bed60b8ef140ec927 (patch) | |
tree | 598f3180a15448548c2aff0a6280b126fe50bfd6 /gcc | |
parent | 090a3cbc4783aebb80c3a4fd5243150036965a33 (diff) | |
download | ppe42-gcc-6e5b5ba9a72a35a941abf23bed60b8ef140ec927.tar.gz ppe42-gcc-6e5b5ba9a72a35a941abf23bed60b8ef140ec927.zip |
* reg-stack.c (stack_result): Unconditionally use
FUNCTION_OUTGOING_VALUE resp. FUNCTION_VALUE.
* g++.old-deja/g++.other/regstack.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40457 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/reg-stack.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/regstack.C | 31 |
4 files changed, 41 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 54031ae237a..dd2818dadbb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c index 1d14a013cee..2f00113bab5 100644 --- a/gcc/reg-stack.c +++ b/gcc/reg-stack.c @@ -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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c86f7502246..3198df8e22c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 00000000000..ea7222156de --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/regstack.C @@ -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; +} |