PR middle-end/77357 - strlen of constant strings not folded
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / 920501-6.c
blob833624ff3f78563b0dc86c2fbfc67d0464ac5d06
1 #include <stdio.h>
3 /* Convert a decimal string to a long long unsigned. No error check is
4 performed. */
6 long long unsigned
7 str2llu (str)
8 char *str;
10 long long unsigned acc;
11 int d;
12 acc = *str++ - '0';
13 for (;;)
15 d = *str++;
16 if (d == '\0')
17 break;
18 d -= '0';
19 acc = acc * 10 + d;
22 return acc;
25 /* isqrt(t) - computes the square root of t. (tege 86-10-27) */
27 long unsigned
28 sqrtllu (long long unsigned t)
30 long long unsigned s;
31 long long unsigned b;
33 for (b = 0, s = t; b++, (s >>= 1) != 0; )
36 s = 1LL << (b >> 1);
38 if (b & 1)
39 s += s >> 1;
43 b = t / s;
44 s = (s + b) >> 1;
46 while (b < s);
48 return s;
52 int plist (p0, p1, tab)
53 long long unsigned p0, p1;
54 long long unsigned *tab;
56 long long unsigned p;
57 long unsigned d;
58 long unsigned s;
59 long long unsigned *xp = tab;
61 for (p = p0; p <= p1; p += 2)
63 s = sqrtllu (p);
65 for (d = 3; d <= s; d += 2)
67 long long unsigned q = p % d;
68 if (q == 0)
69 goto not_prime;
72 *xp++ = p;
73 not_prime:;
75 *xp = 0;
76 return xp - tab;
79 main (argc, argv)
80 int argc;
81 char *argv[];
83 long long tab[10];
84 int nprimes;
85 nprimes = plist (str2llu ("1234111111"), str2llu ("1234111127"), tab);
87 if(tab[0]!=1234111117LL||tab[1]!=1234111121LL||tab[2]!=1234111127LL||tab[3]!=0)
88 abort();
90 exit(0);