This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]