diff options
author | Geoffrey Keating <geoffk@apple.com> | 2003-09-23 21:37:32 +0000 |
---|---|---|
committer | Geoffrey Keating <geoffk@gcc.gnu.org> | 2003-09-23 21:37:32 +0000 |
commit | fff2cb99c987f4e9f0a8dffc0c3acd363f8a097f (patch) | |
tree | 9941b421b5d06bb02a64dfe48d6f1ec11d0330c7 /gcc | |
parent | e5f1132858753ef5c8857323dbef71018fe65822 (diff) | |
download | gcc-fff2cb99c987f4e9f0a8dffc0c3acd363f8a097f.zip gcc-fff2cb99c987f4e9f0a8dffc0c3acd363f8a097f.tar.gz gcc-fff2cb99c987f4e9f0a8dffc0c3acd363f8a097f.tar.bz2 |
rs6000.c (function_arg_pass_by_reference): Don't pass zero-size arrays by reference.
2003-09-23 Geoffrey Keating <geoffk@apple.com>
* config/rs6000/rs6000.c (function_arg_pass_by_reference): Don't
pass zero-size arrays by reference.
(rs6000_va_arg): Likewise.
2003-09-23 Geoffrey Keating <geoffk@apple.com>
* gcc.dg/darwin-abi-1.c: New file.
From-SVN: r71698
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/darwin-abi-1.c | 12 |
4 files changed, 24 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2a175b8..dcb14a9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2003-09-23 Geoffrey Keating <geoffk@apple.com> + + * config/rs6000/rs6000.c (function_arg_pass_by_reference): Don't + pass zero-size arrays by reference. + (rs6000_va_arg): Likewise. + 2003-09-23 Nathanael Nerode <neroden@gcc.gnu.org> * config.gcc: Set use_fixproto=no in each specific *-gnu* diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 0b7be5a..c3e532e 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -3977,7 +3977,7 @@ function_arg_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED, return 1; } - return type && int_size_in_bytes (type) <= 0; + return type && int_size_in_bytes (type) < 0; } /* Perform any needed actions needed for a function that is receiving a @@ -4206,7 +4206,7 @@ rs6000_va_arg (tree valist, tree type) if (DEFAULT_ABI != ABI_V4) { /* Variable sized types are passed by reference. */ - if (int_size_in_bytes (type) <= 0) + if (int_size_in_bytes (type) < 0) { u = build_pointer_type (type); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a061186..494bedb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2003-09-23 Geoffrey Keating <geoffk@apple.com> + + * gcc.dg/darwin-abi-1.c: New file. + 2003-09-21 Andrew Pinski <pinskia@physics.uc.edu> PR target/12281 diff --git a/gcc/testsuite/gcc.dg/darwin-abi-1.c b/gcc/testsuite/gcc.dg/darwin-abi-1.c new file mode 100644 index 0000000..c7c0288 --- /dev/null +++ b/gcc/testsuite/gcc.dg/darwin-abi-1.c @@ -0,0 +1,12 @@ +/* { dg-do compile { target powerpc*-*-darwin* } } */ +/* { dg-options "-O" } */ +/* { dg-final { scan-assembler "li r3,12345\n\tbl " } } */ + +/* Check that zero-size structures don't affect parameter passing. */ + +struct empty { }; +extern void foo (struct empty e, int a); +void bar (void) { + struct empty e; + foo (e, 12345); +} |