aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJanis Johnson <janis187@us.ibm.com>2003-06-11 20:29:21 +0000
committerJanis Johnson <janis@gcc.gnu.org>2003-06-11 20:29:21 +0000
commit2f1c3e4934cac0582dc50a20b6ea6ee6fbdf4e43 (patch)
treedef8d0c30f7f82a6ca6e11d4f14736d190575ee2
parent3c900cb55bca213ed80b4f58d598332fcdecc533 (diff)
downloadgcc-2f1c3e4934cac0582dc50a20b6ea6ee6fbdf4e43.zip
gcc-2f1c3e4934cac0582dc50a20b6ea6ee6fbdf4e43.tar.gz
gcc-2f1c3e4934cac0582dc50a20b6ea6ee6fbdf4e43.tar.bz2
struct-by-value-11_main.c: New file.
* gcc.dg/compat/struct-by-value-11_main.c: New file. * gcc.dg/compat/struct-by-value-11_x.c: New file. * gcc.dg/compat/struct-by-value-11_y.c: New file. * gcc.dg/compat/struct-by-value-12_main.c: New file. * gcc.dg/compat/struct-by-value-12_x.c: New file. * gcc.dg/compat/struct-by-value-12_y.c: New file. * gcc.dg/compat/struct-by-value-13_main.c: New file. * gcc.dg/compat/struct-by-value-13_x.c: New file. * gcc.dg/compat/struct-by-value-13_y.c: New file. * gcc.dg/compat/struct-by-value-14_main.c: New file. * gcc.dg/compat/struct-by-value-14_x.c: New file. * gcc.dg/compat/struct-by-value-14_y.c: New file. * gcc.dg/compat/struct-by-value-15_main.c: New file. * gcc.dg/compat/struct-by-value-15_x.c: New file. * gcc.dg/compat/struct-by-value-15_y.c: New file. * gcc.dg/compat/struct-by-value-16_main.c: New file. * gcc.dg/compat/struct-by-value-16_x.c: New file. * gcc.dg/compat/struct-by-value-16_y.c: New file. * gcc.dg/compat/struct-by-value-17_main.c: New file. * gcc.dg/compat/struct-by-value-17_x.c: New file. * gcc.dg/compat/struct-by-value-17_y.c: New file. * gcc.dg/compat/struct-by-value-18_main.c: New file. * gcc.dg/compat/struct-by-value-18_x.c: New file. * gcc.dg/compat/struct-by-value-18_y.c: New file. From-SVN: r67796
-rw-r--r--gcc/testsuite/ChangeLog25
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-11_main.c14
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-11_x.c55
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-11_y.c34
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-12_main.c14
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-12_x.c55
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-12_y.c34
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-13_main.c14
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-13_x.c55
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-13_y.c34
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-14_main.c14
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-14_x.c55
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-14_y.c34
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-15_main.c14
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-15_x.c55
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-15_y.c34
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-16_main.c14
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-16_x.c55
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-16_y.c34
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-17_main.c14
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-17_x.c55
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-17_y.c34
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-18_main.c14
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-18_x.c55
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-18_y.c34
25 files changed, 849 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f11e2fb..f5ca84b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,30 @@
2003-06-11 Janis Johnson <janis187@us.ibm.com>
+ * gcc.dg/compat/struct-by-value-11_main.c: New file.
+ * gcc.dg/compat/struct-by-value-11_x.c: New file.
+ * gcc.dg/compat/struct-by-value-11_y.c: New file.
+ * gcc.dg/compat/struct-by-value-12_main.c: New file.
+ * gcc.dg/compat/struct-by-value-12_x.c: New file.
+ * gcc.dg/compat/struct-by-value-12_y.c: New file.
+ * gcc.dg/compat/struct-by-value-13_main.c: New file.
+ * gcc.dg/compat/struct-by-value-13_x.c: New file.
+ * gcc.dg/compat/struct-by-value-13_y.c: New file.
+ * gcc.dg/compat/struct-by-value-14_main.c: New file.
+ * gcc.dg/compat/struct-by-value-14_x.c: New file.
+ * gcc.dg/compat/struct-by-value-14_y.c: New file.
+ * gcc.dg/compat/struct-by-value-15_main.c: New file.
+ * gcc.dg/compat/struct-by-value-15_x.c: New file.
+ * gcc.dg/compat/struct-by-value-15_y.c: New file.
+ * gcc.dg/compat/struct-by-value-16_main.c: New file.
+ * gcc.dg/compat/struct-by-value-16_x.c: New file.
+ * gcc.dg/compat/struct-by-value-16_y.c: New file.
+ * gcc.dg/compat/struct-by-value-17_main.c: New file.
+ * gcc.dg/compat/struct-by-value-17_x.c: New file.
+ * gcc.dg/compat/struct-by-value-17_y.c: New file.
+ * gcc.dg/compat/struct-by-value-18_main.c: New file.
+ * gcc.dg/compat/struct-by-value-18_x.c: New file.
+ * gcc.dg/compat/struct-by-value-18_y.c: New file.
+
* gcc.dg/compat/scalar-by-value-3_main.c: New file.
* gcc.dg/compat/scalar-by-value-3_x.c: New file.
* gcc.dg/compat/scalar-by-value-3_y.c: New file.
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-11_main.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-11_main.c
new file mode 100644
index 0000000..400e94c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-11_main.c
@@ -0,0 +1,14 @@
+/* Test structures passed by value, including to a function with a
+ variable-length argument lists. All struct members are of type
+ _Complex char. */
+
+extern void struct_by_value_11_x (void);
+extern void exit (int);
+int fails;
+
+int
+main ()
+{
+ struct_by_value_11_x ();
+ exit (0);
+}
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-11_x.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-11_x.c
new file mode 100644
index 0000000..237f671
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-11_x.c
@@ -0,0 +1,55 @@
+#include "compat-common.h"
+
+#include "fp-struct-defs.h"
+#include "fp-struct-check.h"
+#include "fp-struct-test-by-value-x.h"
+
+DEFS(cc, _Complex char)
+CHECKS(cc, _Complex char)
+
+TEST(Scc1, _Complex char)
+TEST(Scc2, _Complex char)
+TEST(Scc3, _Complex char)
+TEST(Scc4, _Complex char)
+TEST(Scc5, _Complex char)
+TEST(Scc6, _Complex char)
+TEST(Scc7, _Complex char)
+TEST(Scc8, _Complex char)
+TEST(Scc9, _Complex char)
+TEST(Scc10, _Complex char)
+TEST(Scc11, _Complex char)
+TEST(Scc12, _Complex char)
+TEST(Scc13, _Complex char)
+TEST(Scc14, _Complex char)
+TEST(Scc15, _Complex char)
+TEST(Scc16, _Complex char)
+
+#undef T
+
+void
+struct_by_value_11_x ()
+{
+#define T(TYPE, MTYPE) testit##TYPE ();
+
+T(Scc1, _Complex char)
+T(Scc2, _Complex char)
+T(Scc3, _Complex char)
+T(Scc4, _Complex char)
+T(Scc5, _Complex char)
+T(Scc6, _Complex char)
+T(Scc7, _Complex char)
+T(Scc8, _Complex char)
+T(Scc9, _Complex char)
+T(Scc10, _Complex char)
+T(Scc11, _Complex char)
+T(Scc12, _Complex char)
+T(Scc13, _Complex char)
+T(Scc14, _Complex char)
+T(Scc15, _Complex char)
+T(Scc16, _Complex char)
+
+if (fails != 0)
+ abort ();
+
+#undef T
+}
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-11_y.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-11_y.c
new file mode 100644
index 0000000..c0f0ad5
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-11_y.c
@@ -0,0 +1,34 @@
+#include <stdarg.h>
+
+#include "compat-common.h"
+
+/* Turn off checking for variable arguments with -DSKIPVA. */
+#ifdef SKIPVA
+const int test_va = 0;
+#else
+const int test_va = 1;
+#endif
+
+#include "fp-struct-defs.h"
+#include "fp-struct-init.h"
+#include "fp-struct-test-by-value-y.h"
+
+DEFS(cc,_Complex char)
+INITS(cc, _Complex char)
+
+TEST(Scc1, _Complex char)
+TEST(Scc2, _Complex char)
+TEST(Scc3, _Complex char)
+TEST(Scc4, _Complex char)
+TEST(Scc5, _Complex char)
+TEST(Scc6, _Complex char)
+TEST(Scc7, _Complex char)
+TEST(Scc8, _Complex char)
+TEST(Scc9, _Complex char)
+TEST(Scc10, _Complex char)
+TEST(Scc11, _Complex char)
+TEST(Scc12, _Complex char)
+TEST(Scc13, _Complex char)
+TEST(Scc14, _Complex char)
+TEST(Scc15, _Complex char)
+TEST(Scc16, _Complex char)
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-12_main.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-12_main.c
new file mode 100644
index 0000000..ab4faac
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-12_main.c
@@ -0,0 +1,14 @@
+/* Test structures passed by value, including to a function with a
+ variable-length argument lists. All struct members are of type
+ _Complex short. */
+
+extern void struct_by_value_12_x (void);
+extern void exit (int);
+int fails;
+
+int
+main ()
+{
+ struct_by_value_12_x ();
+ exit (0);
+}
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-12_x.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-12_x.c
new file mode 100644
index 0000000..2ba6fc6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-12_x.c
@@ -0,0 +1,55 @@
+#include "compat-common.h"
+
+#include "fp-struct-defs.h"
+#include "fp-struct-check.h"
+#include "fp-struct-test-by-value-x.h"
+
+DEFS(cs, _Complex short)
+CHECKS(cs, _Complex short)
+
+TEST(Scs1, _Complex short)
+TEST(Scs2, _Complex short)
+TEST(Scs3, _Complex short)
+TEST(Scs4, _Complex short)
+TEST(Scs5, _Complex short)
+TEST(Scs6, _Complex short)
+TEST(Scs7, _Complex short)
+TEST(Scs8, _Complex short)
+TEST(Scs9, _Complex short)
+TEST(Scs10, _Complex short)
+TEST(Scs11, _Complex short)
+TEST(Scs12, _Complex short)
+TEST(Scs13, _Complex short)
+TEST(Scs14, _Complex short)
+TEST(Scs15, _Complex short)
+TEST(Scs16, _Complex short)
+
+#undef T
+
+void
+struct_by_value_12_x ()
+{
+#define T(TYPE, MTYPE) testit##TYPE ();
+
+T(Scs1, _Complex short)
+T(Scs2, _Complex short)
+T(Scs3, _Complex short)
+T(Scs4, _Complex short)
+T(Scs5, _Complex short)
+T(Scs6, _Complex short)
+T(Scs7, _Complex short)
+T(Scs8, _Complex short)
+T(Scs9, _Complex short)
+T(Scs10, _Complex short)
+T(Scs11, _Complex short)
+T(Scs12, _Complex short)
+T(Scs13, _Complex short)
+T(Scs14, _Complex short)
+T(Scs15, _Complex short)
+T(Scs16, _Complex short)
+
+if (fails != 0)
+ abort ();
+
+#undef T
+}
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-12_y.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-12_y.c
new file mode 100644
index 0000000..50a08b4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-12_y.c
@@ -0,0 +1,34 @@
+#include <stdarg.h>
+
+#include "compat-common.h"
+
+/* Turn off checking for variable arguments with -DSKIPVA. */
+#ifdef SKIPVA
+const int test_va = 0;
+#else
+const int test_va = 1;
+#endif
+
+#include "fp-struct-defs.h"
+#include "fp-struct-init.h"
+#include "fp-struct-test-by-value-y.h"
+
+DEFS(cs,_Complex short)
+INITS(cs, _Complex short)
+
+TEST(Scs1, _Complex short)
+TEST(Scs2, _Complex short)
+TEST(Scs3, _Complex short)
+TEST(Scs4, _Complex short)
+TEST(Scs5, _Complex short)
+TEST(Scs6, _Complex short)
+TEST(Scs7, _Complex short)
+TEST(Scs8, _Complex short)
+TEST(Scs9, _Complex short)
+TEST(Scs10, _Complex short)
+TEST(Scs11, _Complex short)
+TEST(Scs12, _Complex short)
+TEST(Scs13, _Complex short)
+TEST(Scs14, _Complex short)
+TEST(Scs15, _Complex short)
+TEST(Scs16, _Complex short)
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-13_main.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-13_main.c
new file mode 100644
index 0000000..b853bb8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-13_main.c
@@ -0,0 +1,14 @@
+/* Test structures passed by value, including to a function with a
+ variable-length argument lists. All struct members are type
+ _Complex int. */
+
+extern void struct_by_value_l3_x (void);
+extern void exit (int);
+int fails;
+
+int
+main ()
+{
+ struct_by_value_13_x ();
+ exit (0);
+}
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-13_x.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-13_x.c
new file mode 100644
index 0000000..bf7af3a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-13_x.c
@@ -0,0 +1,55 @@
+#include "compat-common.h"
+
+#include "fp-struct-defs.h"
+#include "fp-struct-check.h"
+#include "fp-struct-test-by-value-x.h"
+
+DEFS(ci, _Complex int)
+CHECKS(ci, _Complex int)
+
+TEST(Sci1, _Complex int)
+TEST(Sci2, _Complex int)
+TEST(Sci3, _Complex int)
+TEST(Sci4, _Complex int)
+TEST(Sci5, _Complex int)
+TEST(Sci6, _Complex int)
+TEST(Sci7, _Complex int)
+TEST(Sci8, _Complex int)
+TEST(Sci9, _Complex int)
+TEST(Sci10, _Complex int)
+TEST(Sci11, _Complex int)
+TEST(Sci12, _Complex int)
+TEST(Sci13, _Complex int)
+TEST(Sci14, _Complex int)
+TEST(Sci15, _Complex int)
+TEST(Sci16, _Complex int)
+
+#undef T
+
+void
+struct_by_value_13_x ()
+{
+#define T(TYPE, MTYPE) testit##TYPE ();
+
+T(Sci1, _Complex int)
+T(Sci2, _Complex int)
+T(Sci3, _Complex int)
+T(Sci4, _Complex int)
+T(Sci5, _Complex int)
+T(Sci6, _Complex int)
+T(Sci7, _Complex int)
+T(Sci8, _Complex int)
+T(Sci9, _Complex int)
+T(Sci10, _Complex int)
+T(Sci11, _Complex int)
+T(Sci12, _Complex int)
+T(Sci13, _Complex int)
+T(Sci14, _Complex int)
+T(Sci15, _Complex int)
+T(Sci16, _Complex int)
+
+if (fails != 0)
+ abort ();
+
+#undef T
+}
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-13_y.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-13_y.c
new file mode 100644
index 0000000..e53ee59
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-13_y.c
@@ -0,0 +1,34 @@
+#include <stdarg.h>
+
+#include "compat-common.h"
+
+/* Turn off checking for variable arguments with -DSKIPVA. */
+#ifdef SKIPVA
+const int test_va = 0;
+#else
+const int test_va = 1;
+#endif
+
+#include "fp-struct-defs.h"
+#include "fp-struct-init.h"
+#include "fp-struct-test-by-value-y.h"
+
+DEFS(ci,_Complex int)
+INITS(ci, _Complex int)
+
+TEST(Sci1, _Complex int)
+TEST(Sci2, _Complex int)
+TEST(Sci3, _Complex int)
+TEST(Sci4, _Complex int)
+TEST(Sci5, _Complex int)
+TEST(Sci6, _Complex int)
+TEST(Sci7, _Complex int)
+TEST(Sci8, _Complex int)
+TEST(Sci9, _Complex int)
+TEST(Sci10, _Complex int)
+TEST(Sci11, _Complex int)
+TEST(Sci12, _Complex int)
+TEST(Sci13, _Complex int)
+TEST(Sci14, _Complex int)
+TEST(Sci15, _Complex int)
+TEST(Sci16, _Complex int)
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-14_main.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-14_main.c
new file mode 100644
index 0000000..a332e93
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-14_main.c
@@ -0,0 +1,14 @@
+/* Test structures passed by value, including to a function with a
+ variable-length argument lists. All struct members are of type
+ _Complex long. */
+
+extern void struct_by_value_14_x (void);
+extern void exit (int);
+int fails;
+
+int
+main ()
+{
+ struct_by_value_14_x ();
+ exit (0);
+}
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-14_x.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-14_x.c
new file mode 100644
index 0000000..765144c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-14_x.c
@@ -0,0 +1,55 @@
+#include "compat-common.h"
+
+#include "fp-struct-defs.h"
+#include "fp-struct-check.h"
+#include "fp-struct-test-by-value-x.h"
+
+DEFS(cl, _Complex long)
+CHECKS(cl, _Complex long)
+
+TEST(Scl1, _Complex long)
+TEST(Scl2, _Complex long)
+TEST(Scl3, _Complex long)
+TEST(Scl4, _Complex long)
+TEST(Scl5, _Complex long)
+TEST(Scl6, _Complex long)
+TEST(Scl7, _Complex long)
+TEST(Scl8, _Complex long)
+TEST(Scl9, _Complex long)
+TEST(Scl10, _Complex long)
+TEST(Scl11, _Complex long)
+TEST(Scl12, _Complex long)
+TEST(Scl13, _Complex long)
+TEST(Scl14, _Complex long)
+TEST(Scl15, _Complex long)
+TEST(Scl16, _Complex long)
+
+#undef T
+
+void
+struct_by_value_14_x ()
+{
+#define T(TYPE, MTYPE) testit##TYPE ();
+
+T(Scl1, _Complex long)
+T(Scl2, _Complex long)
+T(Scl3, _Complex long)
+T(Scl4, _Complex long)
+T(Scl5, _Complex long)
+T(Scl6, _Complex long)
+T(Scl7, _Complex long)
+T(Scl8, _Complex long)
+T(Scl9, _Complex long)
+T(Scl10, _Complex long)
+T(Scl11, _Complex long)
+T(Scl12, _Complex long)
+T(Scl13, _Complex long)
+T(Scl14, _Complex long)
+T(Scl15, _Complex long)
+T(Scl16, _Complex long)
+
+if (fails != 0)
+ abort ();
+
+#undef T
+}
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-14_y.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-14_y.c
new file mode 100644
index 0000000..640b11b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-14_y.c
@@ -0,0 +1,34 @@
+#include <stdarg.h>
+
+#include "compat-common.h"
+
+/* Turn off checking for variable arguments with -DSKIPVA. */
+#ifdef SKIPVA
+const int test_va = 0;
+#else
+const int test_va = 1;
+#endif
+
+#include "fp-struct-defs.h"
+#include "fp-struct-init.h"
+#include "fp-struct-test-by-value-y.h"
+
+DEFS(cl,_Complex long)
+INITS(cl, _Complex long)
+
+TEST(Scl1, _Complex long)
+TEST(Scl2, _Complex long)
+TEST(Scl3, _Complex long)
+TEST(Scl4, _Complex long)
+TEST(Scl5, _Complex long)
+TEST(Scl6, _Complex long)
+TEST(Scl7, _Complex long)
+TEST(Scl8, _Complex long)
+TEST(Scl9, _Complex long)
+TEST(Scl10, _Complex long)
+TEST(Scl11, _Complex long)
+TEST(Scl12, _Complex long)
+TEST(Scl13, _Complex long)
+TEST(Scl14, _Complex long)
+TEST(Scl15, _Complex long)
+TEST(Scl16, _Complex long)
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-15_main.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-15_main.c
new file mode 100644
index 0000000..6e5d8e0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-15_main.c
@@ -0,0 +1,14 @@
+/* Test structures passed by value, including to a function with a
+ variable-length argument lists. All struct members are of type
+ _Complex long long. */
+
+extern void struct_by_value_15_x (void);
+extern void exit (int);
+int fails;
+
+int
+main ()
+{
+ struct_by_value_15_x ();
+ exit (0);
+}
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-15_x.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-15_x.c
new file mode 100644
index 0000000..732582e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-15_x.c
@@ -0,0 +1,55 @@
+#include "compat-common.h"
+
+#include "fp-struct-defs.h"
+#include "fp-struct-check.h"
+#include "fp-struct-test-by-value-x.h"
+
+DEFS(cll, _Complex long long)
+CHECKS(cll, _Complex long long)
+
+TEST(Scll1, _Complex long long)
+TEST(Scll2, _Complex long long)
+TEST(Scll3, _Complex long long)
+TEST(Scll4, _Complex long long)
+TEST(Scll5, _Complex long long)
+TEST(Scll6, _Complex long long)
+TEST(Scll7, _Complex long long)
+TEST(Scll8, _Complex long long)
+TEST(Scll9, _Complex long long)
+TEST(Scll10, _Complex long long)
+TEST(Scll11, _Complex long long)
+TEST(Scll12, _Complex long long)
+TEST(Scll13, _Complex long long)
+TEST(Scll14, _Complex long long)
+TEST(Scll15, _Complex long long)
+TEST(Scll16, _Complex long long)
+
+#undef T
+
+void
+struct_by_value_15_x ()
+{
+#define T(TYPE, MTYPE) testit##TYPE ();
+
+T(Scll1, _Complex long long)
+T(Scll2, _Complex long long)
+T(Scll3, _Complex long long)
+T(Scll4, _Complex long long)
+T(Scll5, _Complex long long)
+T(Scll6, _Complex long long)
+T(Scll7, _Complex long long)
+T(Scll8, _Complex long long)
+T(Scll9, _Complex long long)
+T(Scll10, _Complex long long)
+T(Scll11, _Complex long long)
+T(Scll12, _Complex long long)
+T(Scll13, _Complex long long)
+T(Scll14, _Complex long long)
+T(Scll15, _Complex long long)
+T(Scll16, _Complex long long)
+
+if (fails != 0)
+ abort ();
+
+#undef T
+}
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-15_y.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-15_y.c
new file mode 100644
index 0000000..e7cf60a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-15_y.c
@@ -0,0 +1,34 @@
+#include <stdarg.h>
+
+#include "compat-common.h"
+
+/* Turn off checking for variable arguments with -DSKIPVA. */
+#ifdef SKIPVA
+const int test_va = 0;
+#else
+const int test_va = 1;
+#endif
+
+#include "fp-struct-defs.h"
+#include "fp-struct-init.h"
+#include "fp-struct-test-by-value-y.h"
+
+DEFS(cll,_Complex long long)
+INITS(cll, _Complex long long)
+
+TEST(Scll1, _Complex long long)
+TEST(Scll2, _Complex long long)
+TEST(Scll3, _Complex long long)
+TEST(Scll4, _Complex long long)
+TEST(Scll5, _Complex long long)
+TEST(Scll6, _Complex long long)
+TEST(Scll7, _Complex long long)
+TEST(Scll8, _Complex long long)
+TEST(Scll9, _Complex long long)
+TEST(Scll10, _Complex long long)
+TEST(Scll11, _Complex long long)
+TEST(Scll12, _Complex long long)
+TEST(Scll13, _Complex long long)
+TEST(Scll14, _Complex long long)
+TEST(Scll15, _Complex long long)
+TEST(Scll16, _Complex long long)
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-16_main.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-16_main.c
new file mode 100644
index 0000000..31447be
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-16_main.c
@@ -0,0 +1,14 @@
+/* Test structures passed by value, including to a function with a
+ variable-length argument lists. All struct members are of type
+ _Complex float. */
+
+extern void struct_by_value_16_x (void);
+extern void exit (int);
+int fails;
+
+int
+main ()
+{
+ struct_by_value_16_x ();
+ exit (0);
+}
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-16_x.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-16_x.c
new file mode 100644
index 0000000..ef70176
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-16_x.c
@@ -0,0 +1,55 @@
+#include "compat-common.h"
+
+#include "fp-struct-defs.h"
+#include "fp-struct-check.h"
+#include "fp-struct-test-by-value-x.h"
+
+DEFS(cf, _Complex float)
+CHECKS(cf, _Complex float)
+
+TEST(Scf1, _Complex float)
+TEST(Scf2, _Complex float)
+TEST(Scf3, _Complex float)
+TEST(Scf4, _Complex float)
+TEST(Scf5, _Complex float)
+TEST(Scf6, _Complex float)
+TEST(Scf7, _Complex float)
+TEST(Scf8, _Complex float)
+TEST(Scf9, _Complex float)
+TEST(Scf10, _Complex float)
+TEST(Scf11, _Complex float)
+TEST(Scf12, _Complex float)
+TEST(Scf13, _Complex float)
+TEST(Scf14, _Complex float)
+TEST(Scf15, _Complex float)
+TEST(Scf16, _Complex float)
+
+#undef T
+
+void
+struct_by_value_16_x ()
+{
+#define T(TYPE, MTYPE) testit##TYPE ();
+
+T(Scf1, _Complex float)
+T(Scf2, _Complex float)
+T(Scf3, _Complex float)
+T(Scf4, _Complex float)
+T(Scf5, _Complex float)
+T(Scf6, _Complex float)
+T(Scf7, _Complex float)
+T(Scf8, _Complex float)
+T(Scf9, _Complex float)
+T(Scf10, _Complex float)
+T(Scf11, _Complex float)
+T(Scf12, _Complex float)
+T(Scf13, _Complex float)
+T(Scf14, _Complex float)
+T(Scf15, _Complex float)
+T(Scf16, _Complex float)
+
+if (fails != 0)
+ abort ();
+
+#undef T
+}
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-16_y.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-16_y.c
new file mode 100644
index 0000000..9aa8c3f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-16_y.c
@@ -0,0 +1,34 @@
+#include <stdarg.h>
+
+#include "compat-common.h"
+
+/* Turn off checking for variable arguments with -DSKIPVA. */
+#ifdef SKIPVA
+const int test_va = 0;
+#else
+const int test_va = 1;
+#endif
+
+#include "fp-struct-defs.h"
+#include "fp-struct-init.h"
+#include "fp-struct-test-by-value-y.h"
+
+DEFS(cf,_Complex float)
+INITS(cf, _Complex float)
+
+TEST(Scf1, _Complex float)
+TEST(Scf2, _Complex float)
+TEST(Scf3, _Complex float)
+TEST(Scf4, _Complex float)
+TEST(Scf5, _Complex float)
+TEST(Scf6, _Complex float)
+TEST(Scf7, _Complex float)
+TEST(Scf8, _Complex float)
+TEST(Scf9, _Complex float)
+TEST(Scf10, _Complex float)
+TEST(Scf11, _Complex float)
+TEST(Scf12, _Complex float)
+TEST(Scf13, _Complex float)
+TEST(Scf14, _Complex float)
+TEST(Scf15, _Complex float)
+TEST(Scf16, _Complex float)
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-17_main.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-17_main.c
new file mode 100644
index 0000000..3d97146
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-17_main.c
@@ -0,0 +1,14 @@
+/* Test structures passed by value, including to a function with a
+ variable-length argument lists. All struct members are of type
+ _Complex double. */
+
+extern void struct_by_value_17_x (void);
+extern void exit (int);
+int fails;
+
+int
+main ()
+{
+ struct_by_value_17_x ();
+ exit (0);
+}
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-17_x.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-17_x.c
new file mode 100644
index 0000000..624cc34
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-17_x.c
@@ -0,0 +1,55 @@
+#include "compat-common.h"
+
+#include "fp-struct-defs.h"
+#include "fp-struct-check.h"
+#include "fp-struct-test-by-value-x.h"
+
+DEFS(cd, _Complex double)
+CHECKS(cd, _Complex double)
+
+TEST(Scd1, _Complex double)
+TEST(Scd2, _Complex double)
+TEST(Scd3, _Complex double)
+TEST(Scd4, _Complex double)
+TEST(Scd5, _Complex double)
+TEST(Scd6, _Complex double)
+TEST(Scd7, _Complex double)
+TEST(Scd8, _Complex double)
+TEST(Scd9, _Complex double)
+TEST(Scd10, _Complex double)
+TEST(Scd11, _Complex double)
+TEST(Scd12, _Complex double)
+TEST(Scd13, _Complex double)
+TEST(Scd14, _Complex double)
+TEST(Scd15, _Complex double)
+TEST(Scd16, _Complex double)
+
+#undef T
+
+void
+struct_by_value_17_x ()
+{
+#define T(TYPE, MTYPE) testit##TYPE ();
+
+T(Scd1, _Complex double)
+T(Scd2, _Complex double)
+T(Scd3, _Complex double)
+T(Scd4, _Complex double)
+T(Scd5, _Complex double)
+T(Scd6, _Complex double)
+T(Scd7, _Complex double)
+T(Scd8, _Complex double)
+T(Scd9, _Complex double)
+T(Scd10, _Complex double)
+T(Scd11, _Complex double)
+T(Scd12, _Complex double)
+T(Scd13, _Complex double)
+T(Scd14, _Complex double)
+T(Scd15, _Complex double)
+T(Scd16, _Complex double)
+
+if (fails != 0)
+ abort ();
+
+#undef T
+}
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-17_y.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-17_y.c
new file mode 100644
index 0000000..f8e1a6a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-17_y.c
@@ -0,0 +1,34 @@
+#include <stdarg.h>
+
+#include "compat-common.h"
+
+/* Turn off checking for variable arguments with -DSKIPVA. */
+#ifdef SKIPVA
+const int test_va = 0;
+#else
+const int test_va = 1;
+#endif
+
+#include "fp-struct-defs.h"
+#include "fp-struct-init.h"
+#include "fp-struct-test-by-value-y.h"
+
+DEFS(cd,_Complex double)
+INITS(cd, _Complex double)
+
+TEST(Scd1, _Complex double)
+TEST(Scd2, _Complex double)
+TEST(Scd3, _Complex double)
+TEST(Scd4, _Complex double)
+TEST(Scd5, _Complex double)
+TEST(Scd6, _Complex double)
+TEST(Scd7, _Complex double)
+TEST(Scd8, _Complex double)
+TEST(Scd9, _Complex double)
+TEST(Scd10, _Complex double)
+TEST(Scd11, _Complex double)
+TEST(Scd12, _Complex double)
+TEST(Scd13, _Complex double)
+TEST(Scd14, _Complex double)
+TEST(Scd15, _Complex double)
+TEST(Scd16, _Complex double)
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-18_main.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-18_main.c
new file mode 100644
index 0000000..8a4889c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-18_main.c
@@ -0,0 +1,14 @@
+/* Test structures passed by value, including to a function with a
+ variable-length argument lists. All struct members are of type
+ _Complex long double. */
+
+extern void struct_by_value_18_x (void);
+extern void exit (int);
+int fails;
+
+int
+main ()
+{
+ struct_by_value_18_x ();
+ exit (0);
+}
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-18_x.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-18_x.c
new file mode 100644
index 0000000..ec02c56
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-18_x.c
@@ -0,0 +1,55 @@
+#include "compat-common.h"
+
+#include "fp-struct-defs.h"
+#include "fp-struct-check.h"
+#include "fp-struct-test-by-value-x.h"
+
+DEFS(cld, _Complex long double)
+CHECKS(cld, _Complex long double)
+
+TEST(Scld1, _Complex long double)
+TEST(Scld2, _Complex long double)
+TEST(Scld3, _Complex long double)
+TEST(Scld4, _Complex long double)
+TEST(Scld5, _Complex long double)
+TEST(Scld6, _Complex long double)
+TEST(Scld7, _Complex long double)
+TEST(Scld8, _Complex long double)
+TEST(Scld9, _Complex long double)
+TEST(Scld10, _Complex long double)
+TEST(Scld11, _Complex long double)
+TEST(Scld12, _Complex long double)
+TEST(Scld13, _Complex long double)
+TEST(Scld14, _Complex long double)
+TEST(Scld15, _Complex long double)
+TEST(Scld16, _Complex long double)
+
+#undef T
+
+void
+struct_by_value_18_x ()
+{
+#define T(TYPE, MTYPE) testit##TYPE ();
+
+T(Scld1, _Complex long double)
+T(Scld2, _Complex long double)
+T(Scld3, _Complex long double)
+T(Scld4, _Complex long double)
+T(Scld5, _Complex long double)
+T(Scld6, _Complex long double)
+T(Scld7, _Complex long double)
+T(Scld8, _Complex long double)
+T(Scld9, _Complex long double)
+T(Scld10, _Complex long double)
+T(Scld11, _Complex long double)
+T(Scld12, _Complex long double)
+T(Scld13, _Complex long double)
+T(Scld14, _Complex long double)
+T(Scld15, _Complex long double)
+T(Scld16, _Complex long double)
+
+if (fails != 0)
+ abort ();
+
+#undef T
+}
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-18_y.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-18_y.c
new file mode 100644
index 0000000..6624193
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-18_y.c
@@ -0,0 +1,34 @@
+#include <stdarg.h>
+
+#include "compat-common.h"
+
+/* Turn off checking for variable arguments with -DSKIPVA. */
+#ifdef SKIPVA
+const int test_va = 0;
+#else
+const int test_va = 1;
+#endif
+
+#include "fp-struct-defs.h"
+#include "fp-struct-init.h"
+#include "fp-struct-test-by-value-y.h"
+
+DEFS(cld,_Complex long double)
+INITS(cld, _Complex long double)
+
+TEST(Scld1, _Complex long double)
+TEST(Scld2, _Complex long double)
+TEST(Scld3, _Complex long double)
+TEST(Scld4, _Complex long double)
+TEST(Scld5, _Complex long double)
+TEST(Scld6, _Complex long double)
+TEST(Scld7, _Complex long double)
+TEST(Scld8, _Complex long double)
+TEST(Scld9, _Complex long double)
+TEST(Scld10, _Complex long double)
+TEST(Scld11, _Complex long double)
+TEST(Scld12, _Complex long double)
+TEST(Scld13, _Complex long double)
+TEST(Scld14, _Complex long double)
+TEST(Scld15, _Complex long double)
+TEST(Scld16, _Complex long double)