--- lib/align_test.c.orig	Fri Nov 29 01:19:19 1996
+++ lib/align_test.c	Wed Dec 17 00:28:17 1997
@@ -31,12 +31,21 @@
 
 jmp_buf	jb;
 
+#ifdef __GNUC__
+int	check_align	__PR((int (*)(void)));
+int	check_short	__PR((void));
+int	check_int	__PR((void));
+int	check_long	__PR((void));
+int	check_longlong	__PR((void));
+int	check_double	__PR((void));
+#else
 int	check_align	__PR((int (*)(char*, int)));
 int	check_short	__PR((char *, int));
 int	check_int	__PR((char *, int));
 int	check_long	__PR((char *, int));
 int	check_longlong	__PR((char *, int));
 int	check_double	__PR((char *, int));
+#endif
 void	printmacs	__PR((void));
 void	sig		__PR((int));
 
@@ -72,7 +81,7 @@
 
 	signal(SIGBUS, sig);
 
-	i = ((int)buf) % 1024;
+	i = ((long)buf) % 1024;
 	i = 1024 - i;
 	p = &buf[i];
 	buf_aligned = p;
@@ -121,8 +130,21 @@
 	return(0);
 }
 
+#ifdef __GNUC__
 int check_align(func)
-	int	(*func)();
+	int	(*func)(void);
+{
+	return ((func)());
+}
+
+#define check_type(t)							\
+int check_##t()								\
+{									\
+	return __alignof__ (t);					       	\
+}
+#else
+int check_align(func)
+	int	(*func)(char *, int);
 {
 	register int	i;
 	register char	*p = buf_aligned;
@@ -136,81 +158,33 @@
 	return (i);
 }
 
-int check_short(p, i)
-	char	*p;
-	int	i;
-{
-	short	*sp;
-
-	sp = (short *)&p[i];
-	*sp = 1;
-	return (0);
-}
-
-int check_int(p, i)
-	char	*p;
-	int	i;
-{
-	int	*ip;
-
-	ip = (int *)&p[i];
-	*ip = 1;
-	return (0);
-}
-
-int check_long(p, i)
-	char	*p;
-	int	i;
-{
-	long	*lp;
-
-	lp = (long *)&p[i];
-	*lp = 1;
-	return (0);
-}
-
-int	speed_long(n)
-	int	n;
-{
-	long	*lp;
-	int	i;
-
-	lp = (long *)&buf_aligned[1];
-
-	for (i = 1000000; --i >= 0;)
-		*lp = i;
-	return (0);
+#define check_type(t)							\
+int check_##t(p, i)							\
+	char	*p;							\
+	int	i;							\
+{									\
+	t	*tp;							\
+									\
+	tp = (t *)&p[i];					       	\
+	*tp = 1;							\
+	return (0);							\
 }
+#endif
 
+check_type(short)
+check_type(int)
+check_type(long)
 #ifdef	HAVE_LONGLONG
-int check_longlong(p, i)
-	char	*p;
-	int	i;
-{
-	long long	*llp;
-
-	llp = (long long *)&p[i];
-	*llp = 1;
-	return (0);
-}
+typedef long long longlong;
+check_type(longlong)
 #endif
-
-int check_double(p, i)
-	char	*p;
-	int	i;
-{
-	double	*dp;
-
-	dp = (double *)&p[i];
-	*dp = 1.0;
-	return (0);
-}
+check_type(double)
 
 void printmacs()
 {
 printf("\n");
-printf("#define	xaligned(a, s)		((((int)(a)) & s) == 0 )\n");
-printf("#define	x2aligned(a, b, s)	(((((int)(a)) | ((int)(b))) & s) == 0 )\n");
+printf("#define	xaligned(a, s)		((((long)(a)) & s) == 0 )\n");
+printf("#define	x2aligned(a, b, s)	(((((long)(a)) | ((long)(b))) & s) == 0 )\n");
 printf("\n");
 printf("#define	saligned(a)		xaligned(a, ALIGN_SMASK)\n");
 printf("#define	s2aligned(a, b)		x2aligned(a, b, ALIGN_SMASK)\n");
@@ -228,7 +202,7 @@
 printf("#define	d2aligned(a, b)		x2aligned(a, b, ALIGN_DMASK)\n");
 
 printf("\n\n");
-printf("#define	xalign(x, a, m)		( ((char *)(x)) + ( (a) - (((int)(x))&(m))) )\n");
+printf("#define	xalign(x, a, m)		( ((char *)(x)) + ( (a) - (((long)(x))&(m))) )\n");
 printf("\n");
 printf("#define	salign(x)		xalign((x), ALIGN_SHORT, ALIGN_SMASK)\n");
 printf("#define	ialign(x)		xalign((x), ALIGN_INT, ALIGN_IMASK)\n");
