modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/920501-6.c (about) 1 #include <stdio.h> 2 3 /* Convert a decimal string to a long long unsigned. No error check is 4 performed. */ 5 6 long long unsigned 7 str2llu (str) 8 char *str; 9 { 10 long long unsigned acc; 11 int d; 12 acc = *str++ - '0'; 13 for (;;) 14 { 15 d = *str++; 16 if (d == '\0') 17 break; 18 d -= '0'; 19 acc = acc * 10 + d; 20 } 21 22 return acc; 23 } 24 25 /* isqrt(t) - computes the square root of t. (tege 86-10-27) */ 26 27 long unsigned 28 sqrtllu (long long unsigned t) 29 { 30 long long unsigned s; 31 long long unsigned b; 32 33 for (b = 0, s = t; b++, (s >>= 1) != 0; ) 34 ; 35 36 s = 1LL << (b >> 1); 37 38 if (b & 1) 39 s += s >> 1; 40 41 do 42 { 43 b = t / s; 44 s = (s + b) >> 1; 45 } 46 while (b < s); 47 48 return s; 49 } 50 51 52 int plist (p0, p1, tab) 53 long long unsigned p0, p1; 54 long long unsigned *tab; 55 { 56 long long unsigned p; 57 long unsigned d; 58 long unsigned s; 59 long long unsigned *xp = tab; 60 61 for (p = p0; p <= p1; p += 2) 62 { 63 s = sqrtllu (p); 64 65 for (d = 3; d <= s; d += 2) 66 { 67 long long unsigned q = p % d; 68 if (q == 0) 69 goto not_prime; 70 } 71 72 *xp++ = p; 73 not_prime:; 74 } 75 *xp = 0; 76 return xp - tab; 77 } 78 79 main (argc, argv) 80 int argc; 81 char *argv[]; 82 { 83 long long tab[10]; 84 int nprimes; 85 nprimes = plist (str2llu ("1234111111"), str2llu ("1234111127"), tab); 86 87 if(tab[0]!=1234111117LL||tab[1]!=1234111121LL||tab[2]!=1234111127LL||tab[3]!=0) 88 abort(); 89 90 exit(0); 91 }