diff options
author | hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-03-29 15:45:10 +0000 |
---|---|---|
committer | hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-03-29 15:45:10 +0000 |
commit | 40513f402264c4267e81fe80911296d0977eaa16 (patch) | |
tree | cba7f35352c729ab5821e99609fcba6153c1ad4d /gcc/testsuite | |
parent | 0d3a7d37d8c300e7f3486bcce423e565d26ee273 (diff) | |
download | gcc-40513f402264c4267e81fe80911296d0977eaa16.tar.gz |
gcc/
2009-03-29 H.J. Lu <hongjiu.lu@intel.com>
PR target/39545
* config/i386/i386.c (classify_argument): Ignore flexible array
member in struct and warn ABI change.
gcc/testsuite/
2009-03-29 H.J. Lu <hongjiu.lu@intel.com>
PR target/39545
* gcc.c-torture/compile/pr16566-2.c: Add -Wno-psabi for x86-64.
* gcc.target/i386/pr39545-1.c: New.
* gcc.target/i386/pr39545-2.c: Likewise.
* gcc.target/x86_64/abi/test_passing_structs.c (flex1_struct): New.
(flex2_struct): Likewise.
(check_struct_passing7): Likewise.
(check_struct_passing8): Likewise.
(f1s): Likewise.
(f2s): Likewise.
(main): Call check_struct_passing7 and check_struct_passing8.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@145237 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 16 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr16566-2.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr39545-1.c | 24 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr39545-2.c | 18 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/x86_64/abi/test_passing_structs.c | 39 |
5 files changed, 98 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2f607261565..7546a2d33a0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,19 @@ +2009-03-29 H.J. Lu <hongjiu.lu@intel.com> + + PR target/39545 + * gcc.c-torture/compile/pr16566-2.c: Add -Wno-psabi for x86-64. + + * gcc.target/i386/pr39545-1.c: New. + * gcc.target/i386/pr39545-2.c: Likewise. + + * gcc.target/x86_64/abi/test_passing_structs.c (flex1_struct): New. + (flex2_struct): Likewise. + (check_struct_passing7): Likewise. + (check_struct_passing8): Likewise. + (f1s): Likewise. + (f2s): Likewise. + (main): Call check_struct_passing7 and check_struct_passing8. + 2009-03-29 Richard Guenther <rguenther@suse.de> * gcc.c-torture/execute/20090113-1.c: New testcase. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr16566-2.c b/gcc/testsuite/gcc.c-torture/compile/pr16566-2.c index c0036f0fc64..2f7a10668a7 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr16566-2.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr16566-2.c @@ -1,5 +1,6 @@ /* ICE with flexible arrays in non-lvalue structures. Bug 16566 (comment #5). */ +/* { dg-options "-Wno-psabi" { target { { i?86-*-* x86_64-*-* } && lp64 } } } */ struct A { diff --git a/gcc/testsuite/gcc.target/i386/pr39545-1.c b/gcc/testsuite/gcc.target/i386/pr39545-1.c new file mode 100644 index 00000000000..62bc33fa21d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr39545-1.c @@ -0,0 +1,24 @@ +/* PR target/39545 */ +/* { dg-do compile } */ +/* { dg-require-effective-target lp64 } */ +/* { dg-options "-O2" } */ + +struct flex +{ + int i; + int flex []; +}; + +int +foo (struct flex s) /* { dg-message "note: The ABI of passing struct with a flexible array member has changed in GCC 4.4" } */ +{ + return s.i; +} + +struct flex +bar (int x) +{ + struct flex s; + s.i = x; + return s; +} diff --git a/gcc/testsuite/gcc.target/i386/pr39545-2.c b/gcc/testsuite/gcc.target/i386/pr39545-2.c new file mode 100644 index 00000000000..143c3827fd6 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr39545-2.c @@ -0,0 +1,18 @@ +/* PR target/39545 */ +/* { dg-do compile } */ +/* { dg-require-effective-target lp64 } */ +/* { dg-options "-O2" } */ + +struct flex +{ + int i; + int flex []; +}; + +struct flex +foo (int x) +{ /* { dg-message "note: The ABI of passing struct with a flexible array member has changed in GCC 4.4" } */ + struct flex s; + s.i = x; + return s; +} diff --git a/gcc/testsuite/gcc.target/x86_64/abi/test_passing_structs.c b/gcc/testsuite/gcc.target/x86_64/abi/test_passing_structs.c index 3ce0db14652..68eca53a2e4 100644 --- a/gcc/testsuite/gcc.target/x86_64/abi/test_passing_structs.c +++ b/gcc/testsuite/gcc.target/x86_64/abi/test_passing_structs.c @@ -92,6 +92,33 @@ check_struct_passing6 (struct m128_2_struct ms ATTRIBUTE_UNUSED) } #endif +struct flex1_struct +{ + long i; + long flex[]; +}; + +struct flex2_struct +{ + long i; + long flex[0]; +}; + +void +check_struct_passing7 (struct flex1_struct is ATTRIBUTE_UNUSED) +{ + check_int_arguments; +} + +void +check_struct_passing8 (struct flex2_struct is ATTRIBUTE_UNUSED) +{ + check_int_arguments; +} + +static struct flex1_struct f1s = { 60, { } }; +static struct flex2_struct f2s = { 61, { } }; + int main (void) { @@ -146,5 +173,17 @@ main (void) WRAP_CALL (check_struct_passing6)(m128_2s); #endif + clear_struct_registers; + iregs.I0 = f1s.i; + num_iregs = 1; + clear_int_hardware_registers; + WRAP_CALL (check_struct_passing7)(f1s); + + clear_struct_registers; + iregs.I0 = f2s.i; + num_iregs = 1; + clear_int_hardware_registers; + WRAP_CALL (check_struct_passing8)(f2s); + return 0; } |