summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture/execute/920501-6.c
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/gcc.c-torture/execute/920501-6.c
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/gcc.c-torture/execute/920501-6.c')
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/920501-6.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/execute/920501-6.c b/gcc/testsuite/gcc.c-torture/execute/920501-6.c
new file mode 100644
index 000000000..833624ff3
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/920501-6.c
@@ -0,0 +1,91 @@
+#include <stdio.h>
+
+/* Convert a decimal string to a long long unsigned. No error check is
+ performed. */
+
+long long unsigned
+str2llu (str)
+ char *str;
+{
+ long long unsigned acc;
+ int d;
+ acc = *str++ - '0';
+ for (;;)
+ {
+ d = *str++;
+ if (d == '\0')
+ break;
+ d -= '0';
+ acc = acc * 10 + d;
+ }
+
+ return acc;
+}
+
+/* isqrt(t) - computes the square root of t. (tege 86-10-27) */
+
+long unsigned
+sqrtllu (long long unsigned t)
+{
+ long long unsigned s;
+ long long unsigned b;
+
+ for (b = 0, s = t; b++, (s >>= 1) != 0; )
+ ;
+
+ s = 1LL << (b >> 1);
+
+ if (b & 1)
+ s += s >> 1;
+
+ do
+ {
+ b = t / s;
+ s = (s + b) >> 1;
+ }
+ while (b < s);
+
+ return s;
+}
+
+
+int plist (p0, p1, tab)
+ long long unsigned p0, p1;
+ long long unsigned *tab;
+{
+ long long unsigned p;
+ long unsigned d;
+ long unsigned s;
+ long long unsigned *xp = tab;
+
+ for (p = p0; p <= p1; p += 2)
+ {
+ s = sqrtllu (p);
+
+ for (d = 3; d <= s; d += 2)
+ {
+ long long unsigned q = p % d;
+ if (q == 0)
+ goto not_prime;
+ }
+
+ *xp++ = p;
+ not_prime:;
+ }
+ *xp = 0;
+ return xp - tab;
+}
+
+main (argc, argv)
+ int argc;
+ char *argv[];
+{
+ long long tab[10];
+ int nprimes;
+ nprimes = plist (str2llu ("1234111111"), str2llu ("1234111127"), tab);
+
+ if(tab[0]!=1234111117LL||tab[1]!=1234111121LL||tab[2]!=1234111127LL||tab[3]!=0)
+ abort();
+
+ exit(0);
+}