PR middle-end/85602 - -Wsizeof-pointer-memaccess for strncat with size of source
[official-gcc.git] / gcc / testsuite / gcc.dg / pr65779.c
blobfa6515fedbb7a25a9f510f74d51394661ed3bbaa
1 /* PR debug/65779 */
2 /* { dg-do assemble } */
3 /* { dg-options "-O2 -fcompare-debug" } */
4 /* { dg-xfail-if "" { powerpc-ibm-aix* } } */
6 unsigned long
7 foo (unsigned long x, unsigned char *y, unsigned int z)
9 unsigned long a = x & 0xffff;
10 unsigned long b = (x >> 16) & 0xffff;
11 int k;
12 if (y == 0) return 1L;
13 while (z > 0)
15 k = z < 5552 ? z : 5552;
16 z -= k;
17 while (k >= 16)
19 a += *y++; b += a;
20 a += *y++; b += a;
21 a += *y++; b += a;
22 a += *y++; b += a;
23 a += *y++; b += a;
24 a += *y++; b += a;
25 a += *y++; b += a;
26 a += *y++; b += a;
27 a += *y++; b += a;
28 a += *y++; b += a;
29 a += *y++; b += a;
30 a += *y++; b += a;
31 a += *y++; b += a;
32 a += *y++; b += a;
33 a += *y++; b += a;
34 a += *y++; b += a;
35 k -= 16;
37 if (k != 0)
38 do { a += *y++; b += a; } while (--k);
39 a %= 65521L;
40 b %= 65521L;
42 return (b << 16) | a;