This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [testsuite] Re: PowerPC long double stdarg breakage
On Thu, Apr 20, 2006 at 08:14:03AM -0400, Jakub Jelinek wrote:
> On Thu, Apr 20, 2006 at 12:27:32PM +0930, Alan Modra wrote:
> > On Thu, Apr 20, 2006 at 11:27:41AM +0930, Alan Modra wrote:
> > > This patch fixes a bug in the new ppc long double support.
> >
> > And this adds some new tests that should help prevent this happening
> > again. OK mainline?
>
> I'm missing scalar-by-value-x.h and scalar-by-value-y.h in the patch.
>
> > * gcc.dg/compat/scalar-by-value-5.c: New.
> > * gcc.dg/compat/scalar-by-value-5_main.c: New.
> > * gcc.dg/compat/scalar-by-value-5_x.c: New.
> > * gcc.dg/compat/scalar-by-value-5_y.c: New.
> > * gcc.dg/compat/scalar-by-value-6.c: New.
> > * gcc.dg/compat/scalar-by-value-6_main.c: New.
> > * gcc.dg/compat/scalar-by-value-6_x.c: New.
> > * gcc.dg/compat/scalar-by-value-6_y.c: New.
Sorry. Here they are.
* gcc.dg/compat/scalar-by-value-x.h: New.
* gcc.dg/compat/scalar-by-value-y.h: New.
Index: gcc/testsuite/gcc.dg/compat/scalar-by-value-x.h
===================================================================
--- gcc/testsuite/gcc.dg/compat/scalar-by-value-x.h (revision 0)
+++ gcc/testsuite/gcc.dg/compat/scalar-by-value-x.h (revision 0)
@@ -0,0 +1,77 @@
+#if DEBUG
+#include <stdio.h>
+#define DBG(x) fputs (x, stdout); fflush (stdout);
+#else
+#define DBG(x)
+#endif
+
+#define TEST_FUNCS(NAME, TYPE, PADT, VAL, VAL2) \
+extern void NAME##_f0 (TYPE a, PADT b); \
+extern void NAME##_f1 (PADT z0, TYPE a, PADT b); \
+extern void NAME##_f2 (PADT z0, PADT z1, TYPE a, PADT b); \
+extern void NAME##_f3 (PADT z0, PADT z1, PADT z2, TYPE a, PADT b); \
+extern void NAME##_f4 (PADT z0, PADT z1, PADT z2, PADT z3, TYPE a, \
+ PADT b); \
+extern void NAME##_f5 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, \
+ TYPE a, PADT b); \
+extern void NAME##_f6 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, \
+ PADT z5, TYPE a, PADT b); \
+extern void NAME##_f7 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, \
+ PADT z5, PADT z6, TYPE a, PADT b); \
+extern void NAME##_f8 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, \
+ PADT z5, PADT z6, PADT z7, TYPE a, PADT b); \
+extern void NAME##_f9 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, \
+ PADT z5, PADT z6, PADT z7, PADT z8, TYPE a, \
+ PADT b); \
+extern void NAME##_fv (int n, ...); \
+ \
+void NAME##_doit (void) \
+{ \
+ NAME##_f0 (VAL, VAL2); \
+ DBG ("."); \
+ NAME##_f1 ((PADT) 0, VAL, VAL2); \
+ DBG ("."); \
+ NAME##_f2 ((PADT) 0, (PADT) 0, VAL, VAL2); \
+ DBG ("."); \
+ NAME##_f3 ((PADT) 0, (PADT) 0, (PADT) 0, VAL, VAL2); \
+ DBG ("."); \
+ NAME##_f4 ((PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, VAL, VAL2); \
+ DBG ("."); \
+ NAME##_f5 ((PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, \
+ VAL, VAL2); \
+ DBG ("."); \
+ NAME##_f6 ((PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, \
+ (PADT) 0, VAL, VAL2); \
+ DBG ("."); \
+ NAME##_f7 ((PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, \
+ (PADT) 0, (PADT) 0, VAL, VAL2); \
+ DBG ("."); \
+ NAME##_f8 ((PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, \
+ (PADT) 0, (PADT) 0, (PADT) 0, VAL, VAL2); \
+ DBG ("."); \
+ NAME##_f9 ((PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, \
+ (PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, VAL, VAL2); \
+ DBG ("."); \
+ NAME##_fv (0, VAL, VAL2); \
+ DBG ("."); \
+ NAME##_fv (1, (PADT) 0, VAL, VAL2); \
+ DBG ("."); \
+ NAME##_fv (2, (PADT) 0, (PADT) 0, VAL, VAL2); \
+ DBG ("."); \
+ NAME##_fv (3, (PADT) 0, (PADT) 0, (PADT) 0, VAL, VAL2); \
+ DBG ("."); \
+ NAME##_fv (4, (PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, VAL, VAL2); \
+ DBG ("."); \
+ NAME##_fv (5, (PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, \
+ VAL, VAL2); \
+ DBG ("."); \
+ NAME##_fv (6, (PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, \
+ (PADT) 0, VAL, VAL2); \
+ DBG ("."); \
+ NAME##_fv (7, (PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, \
+ (PADT) 0, (PADT) 0, VAL, VAL2); \
+ DBG ("."); \
+ NAME##_fv (8, (PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, (PADT) 0, \
+ (PADT) 0, (PADT) 0, (PADT) 0, VAL, VAL2); \
+ DBG ("\n"); \
+}
Index: gcc/testsuite/gcc.dg/compat/scalar-by-value-y.h
===================================================================
--- gcc/testsuite/gcc.dg/compat/scalar-by-value-y.h (revision 0)
+++ gcc/testsuite/gcc.dg/compat/scalar-by-value-y.h (revision 0)
@@ -0,0 +1,267 @@
+extern void abort (void);
+
+#if USE_MEMCMP
+#define TEST_FUNCS(NAME, TYPE, PADT, VAL, VAL2) \
+void NAME##_f0 (TYPE a, PADT b) \
+{ \
+ if (memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2) \
+ abort (); \
+} \
+ \
+void NAME##_f1 (PADT z0, TYPE a, PADT b) \
+{ \
+ if (z0 != (PADT) 0 \
+ || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2) \
+ abort (); \
+} \
+ \
+void NAME##_f2 (PADT z0, PADT z1, TYPE a, PADT b) \
+{ \
+ if (z0 != (PADT) 0 \
+ || z1 != (PADT) 0 \
+ || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2) \
+ abort (); \
+} \
+ \
+void NAME##_f3 (PADT z0, PADT z1, PADT z2, TYPE a, PADT b) \
+{ \
+ if (z0 != (PADT) 0 \
+ || z1 != (PADT) 0 \
+ || z2 != (PADT) 0 \
+ || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2) \
+ abort (); \
+} \
+ \
+void NAME##_f4 (PADT z0, PADT z1, PADT z2, PADT z3, TYPE a, PADT b) \
+{ \
+ if (z0 != (PADT) 0 \
+ || z1 != (PADT) 0 \
+ || z2 != (PADT) 0 \
+ || z3 != (PADT) 0 \
+ || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2) \
+ abort (); \
+} \
+ \
+void NAME##_f5 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, TYPE a, \
+ PADT b) \
+{ \
+ if (z0 != (PADT) 0 \
+ || z1 != (PADT) 0 \
+ || z2 != (PADT) 0 \
+ || z3 != (PADT) 0 \
+ || z4 != (PADT) 0 \
+ || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2) \
+ abort (); \
+} \
+ \
+void NAME##_f6 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5, \
+ TYPE a, PADT b) \
+{ \
+ if (z0 != (PADT) 0 \
+ || z1 != (PADT) 0 \
+ || z2 != (PADT) 0 \
+ || z3 != (PADT) 0 \
+ || z4 != (PADT) 0 \
+ || z5 != (PADT) 0 \
+ || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2) \
+ abort (); \
+} \
+ \
+void NAME##_f7 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5, \
+ PADT z6, TYPE a, PADT b) \
+{ \
+ if (z0 != (PADT) 0 \
+ || z1 != (PADT) 0 \
+ || z2 != (PADT) 0 \
+ || z3 != (PADT) 0 \
+ || z4 != (PADT) 0 \
+ || z5 != (PADT) 0 \
+ || z6 != (PADT) 0 \
+ || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2) \
+ abort (); \
+} \
+ \
+void NAME##_f8 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5, \
+ PADT z6, PADT z7, TYPE a, PADT b) \
+{ \
+ if (z0 != (PADT) 0 \
+ || z1 != (PADT) 0 \
+ || z2 != (PADT) 0 \
+ || z3 != (PADT) 0 \
+ || z4 != (PADT) 0 \
+ || z5 != (PADT) 0 \
+ || z6 != (PADT) 0 \
+ || z7 != (PADT) 0 \
+ || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2) \
+ abort (); \
+} \
+ \
+void NAME##_f9 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5, \
+ PADT z6, PADT z7, PADT z8, TYPE a, PADT b) \
+{ \
+ if (z0 != (PADT) 0 \
+ || z1 != (PADT) 0 \
+ || z2 != (PADT) 0 \
+ || z3 != (PADT) 0 \
+ || z4 != (PADT) 0 \
+ || z5 != (PADT) 0 \
+ || z6 != (PADT) 0 \
+ || z7 != (PADT) 0 \
+ || z8 != (PADT) 0 \
+ || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2) \
+ abort (); \
+} \
+ \
+void NAME##_fv (int n, ...) \
+{ \
+ __builtin_va_list ap; \
+ TYPE x; \
+ __builtin_va_start (ap, n); \
+ \
+ while (n-- != 0) \
+ if (__builtin_va_arg (ap, PADT) != (PADT) 0) \
+ abort (); \
+ \
+ x = __builtin_va_arg (ap, TYPE); \
+ if (memcmp (&x, &VAL, sizeof (x)) != 0 ) \
+ abort (); \
+ \
+ if (__builtin_va_arg (ap, PADT) != VAL2) \
+ abort (); \
+ \
+ __builtin_va_end (ap); \
+}
+
+#else
+
+#define TEST_FUNCS(NAME, TYPE, PADT, VAL, VAL2) \
+void NAME##_f0 (TYPE a, PADT b) \
+{ \
+ if (a != VAL || b != VAL2) \
+ abort (); \
+} \
+ \
+void NAME##_f1 (PADT z0, TYPE a, PADT b) \
+{ \
+ if (z0 != (PADT) 0 \
+ || a != VAL || b != VAL2) \
+ abort (); \
+} \
+ \
+void NAME##_f2 (PADT z0, PADT z1, TYPE a, PADT b) \
+{ \
+ if (z0 != (PADT) 0 \
+ || z1 != (PADT) 0 \
+ || a != VAL || b != VAL2) \
+ abort (); \
+} \
+ \
+void NAME##_f3 (PADT z0, PADT z1, PADT z2, TYPE a, PADT b) \
+{ \
+ if (z0 != (PADT) 0 \
+ || z1 != (PADT) 0 \
+ || z2 != (PADT) 0 \
+ || a != VAL || b != VAL2) \
+ abort (); \
+} \
+ \
+void NAME##_f4 (PADT z0, PADT z1, PADT z2, PADT z3, TYPE a, PADT b) \
+{ \
+ if (z0 != (PADT) 0 \
+ || z1 != (PADT) 0 \
+ || z2 != (PADT) 0 \
+ || z3 != (PADT) 0 \
+ || a != VAL || b != VAL2) \
+ abort (); \
+} \
+ \
+void NAME##_f5 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, TYPE a, \
+ PADT b) \
+{ \
+ if (z0 != (PADT) 0 \
+ || z1 != (PADT) 0 \
+ || z2 != (PADT) 0 \
+ || z3 != (PADT) 0 \
+ || z4 != (PADT) 0 \
+ || a != VAL || b != VAL2) \
+ abort (); \
+} \
+ \
+void NAME##_f6 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5, \
+ TYPE a, PADT b) \
+{ \
+ if (z0 != (PADT) 0 \
+ || z1 != (PADT) 0 \
+ || z2 != (PADT) 0 \
+ || z3 != (PADT) 0 \
+ || z4 != (PADT) 0 \
+ || z5 != (PADT) 0 \
+ || a != VAL || b != VAL2) \
+ abort (); \
+} \
+ \
+void NAME##_f7 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5, \
+ PADT z6, TYPE a, PADT b) \
+{ \
+ if (z0 != (PADT) 0 \
+ || z1 != (PADT) 0 \
+ || z2 != (PADT) 0 \
+ || z3 != (PADT) 0 \
+ || z4 != (PADT) 0 \
+ || z5 != (PADT) 0 \
+ || z6 != (PADT) 0 \
+ || a != VAL || b != VAL2) \
+ abort (); \
+} \
+ \
+void NAME##_f8 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5, \
+ PADT z6, PADT z7, TYPE a, PADT b) \
+{ \
+ if (z0 != (PADT) 0 \
+ || z1 != (PADT) 0 \
+ || z2 != (PADT) 0 \
+ || z3 != (PADT) 0 \
+ || z4 != (PADT) 0 \
+ || z5 != (PADT) 0 \
+ || z6 != (PADT) 0 \
+ || z7 != (PADT) 0 \
+ || a != VAL || b != VAL2) \
+ abort (); \
+} \
+ \
+void NAME##_f9 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5, \
+ PADT z6, PADT z7, PADT z8, TYPE a, PADT b) \
+{ \
+ if (z0 != (PADT) 0 \
+ || z1 != (PADT) 0 \
+ || z2 != (PADT) 0 \
+ || z3 != (PADT) 0 \
+ || z4 != (PADT) 0 \
+ || z5 != (PADT) 0 \
+ || z6 != (PADT) 0 \
+ || z7 != (PADT) 0 \
+ || z8 != (PADT) 0 \
+ || a != VAL || b != VAL2) \
+ abort (); \
+} \
+ \
+void NAME##_fv (int n, ...) \
+{ \
+ __builtin_va_list ap; \
+ \
+ __builtin_va_start (ap, n); \
+ \
+ while (n-- != 0) \
+ if (__builtin_va_arg (ap, PADT) != (PADT) 0) \
+ abort (); \
+ \
+ if (__builtin_va_arg (ap, TYPE) != VAL) \
+ abort (); \
+ \
+ if (__builtin_va_arg (ap, PADT) != VAL2) \
+ abort (); \
+ \
+ __builtin_va_end (ap); \
+}
+
+#endif
--
Alan Modra
IBM OzLabs - Linux Technology Centre