summaryrefslogtreecommitdiff
path: root/support/regression/tests/gcc-torture-execute-920501-6.c
blob: d397d98eef450f20ce42d8fee409156295b35e58 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/*
   920501-6.c from the execute part of the gcc torture suite.
 */

#include <testfwk.h>

#ifdef __SDCC
#pragma std_c99
#endif

// TODO: Enable when sdcc supports old style declarations!
#if 0
#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;
}
#endif

void
testTortureExecute (void)
{
#if 0
  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)
    ASSERT(0);

  return;
#endif
}