]>
Commit | Line | Data |
---|---|---|
5689294c L |
1 | /* { dg-do run } */ |
2 | /* { dg-options "-O2" } */ | |
3 | /* { dg-additional-options "-minline-all-stringops" { target { i?86-*-* x86_64-*-* } } } */ | |
4 | ||
5 | extern void abort (void); | |
6 | ||
7 | #define MAX_OFFSET (sizeof (long long)) | |
8 | #define MAX_COPY (8 * sizeof (long long)) | |
9 | #define MAX_EXTRA (sizeof (long long)) | |
10 | ||
11 | #define MAX_LENGTH (MAX_OFFSET + MAX_COPY + MAX_EXTRA) | |
12 | ||
13 | static union { | |
14 | char buf[MAX_LENGTH]; | |
15 | long long align_int; | |
16 | long double align_fp; | |
17 | } u; | |
18 | ||
19 | char A[MAX_LENGTH]; | |
20 | ||
21 | int | |
22 | main () | |
23 | { | |
24 | int off, len, i; | |
25 | char *p, *q; | |
26 | ||
27 | for (i = 0; i < MAX_LENGTH; i++) | |
28 | A[i] = 'A'; | |
29 | ||
30 | for (off = 0; off < MAX_OFFSET; off++) | |
31 | for (len = 1; len < MAX_COPY; len++) | |
32 | { | |
33 | for (i = 0; i < MAX_LENGTH; i++) | |
34 | u.buf[i] = 'a'; | |
35 | ||
36 | p = __builtin_memcpy (u.buf + off, A, len); | |
37 | if (p != u.buf + off) | |
38 | abort (); | |
39 | ||
40 | q = u.buf; | |
41 | for (i = 0; i < off; i++, q++) | |
42 | if (*q != 'a') | |
43 | abort (); | |
44 | ||
45 | for (i = 0; i < len; i++, q++) | |
46 | if (*q != 'A') | |
47 | abort (); | |
48 | ||
49 | for (i = 0; i < MAX_EXTRA; i++, q++) | |
50 | if (*q != 'a') | |
51 | abort (); | |
52 | } | |
53 | ||
54 | return 0; | |
55 | } |