FSF GCC merge 02/23/03
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / memset-1.c
blobb0b70f3e67dfacd0ade1da81beb891d73d3d4078
1 /* Copyright (C) 2002 Free Software Foundation.
3 Test memset with various combinations of pointer alignments and lengths to
4 make sure any optimizations in the library are correct.
6 Written by Michael Meissner, March 9, 2002. */
8 #include <string.h>
10 #ifndef MAX_OFFSET
11 #define MAX_OFFSET (sizeof (long long))
12 #endif
14 #ifndef MAX_COPY
15 #define MAX_COPY (10 * sizeof (long long))
16 #endif
18 #ifndef MAX_EXTRA
19 #define MAX_EXTRA (sizeof (long long))
20 #endif
22 #define MAX_LENGTH (MAX_OFFSET + MAX_COPY + MAX_EXTRA)
24 static union {
25 char buf[MAX_LENGTH];
26 long long align_int;
27 long double align_fp;
28 } u;
30 char A = 'A';
32 main ()
34 int off, len, i;
35 char *p, *q;
37 for (off = 0; off < MAX_OFFSET; off++)
38 for (len = 1; len < MAX_COPY; len++)
40 for (i = 0; i < MAX_LENGTH; i++)
41 u.buf[i] = 'a';
43 p = memset (u.buf + off, '\0', len);
44 if (p != u.buf + off)
45 abort ();
47 q = u.buf;
48 for (i = 0; i < off; i++, q++)
49 if (*q != 'a')
50 abort ();
52 for (i = 0; i < len; i++, q++)
53 if (*q != '\0')
54 abort ();
56 for (i = 0; i < MAX_EXTRA; i++, q++)
57 if (*q != 'a')
58 abort ();
60 p = memset (u.buf + off, A, len);
61 if (p != u.buf + off)
62 abort ();
64 q = u.buf;
65 for (i = 0; i < off; i++, q++)
66 if (*q != 'a')
67 abort ();
69 for (i = 0; i < len; i++, q++)
70 if (*q != 'A')
71 abort ();
73 for (i = 0; i < MAX_EXTRA; i++, q++)
74 if (*q != 'a')
75 abort ();
77 p = memset (u.buf + off, 'B', len);
78 if (p != u.buf + off)
79 abort ();
81 q = u.buf;
82 for (i = 0; i < off; i++, q++)
83 if (*q != 'a')
84 abort ();
86 for (i = 0; i < len; i++, q++)
87 if (*q != 'B')
88 abort ();
90 for (i = 0; i < MAX_EXTRA; i++, q++)
91 if (*q != 'a')
92 abort ();
95 exit (0);