summaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>2009-03-29 15:45:10 +0000
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>2009-03-29 15:45:10 +0000
commit40513f402264c4267e81fe80911296d0977eaa16 (patch)
treecba7f35352c729ab5821e99609fcba6153c1ad4d /gcc/testsuite
parent0d3a7d37d8c300e7f3486bcce423e565d26ee273 (diff)
downloadgcc-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/ChangeLog16
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr16566-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr39545-1.c24
-rw-r--r--gcc/testsuite/gcc.target/i386/pr39545-2.c18
-rw-r--r--gcc/testsuite/gcc.target/x86_64/abi/test_passing_structs.c39
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;
}