xref: /openbsd-src/gnu/usr.bin/gcc/gcc/testsuite/gcc.c-torture/execute/ieee/rbug.c (revision c87b03e512fc05ed6e0222f6fb0ae86264b1d05b)
1 #if defined(__i386__) && defined(__FreeBSD__)
2 #include <ieeefp.h>
3 #endif
4 
d(unsigned long long k)5 double d (unsigned long long k)
6 {
7   double x;
8 
9   x = (double) k;
10   return x;
11 }
12 
s(unsigned long long k)13 float s (unsigned long long k)
14 {
15   float x;
16 
17   x = (float) k;
18   return x;
19 }
20 
main()21 main ()
22 {
23   unsigned long long int k;
24   double x;
25 
26 #if defined(__i386__) && defined(__FreeBSD__)
27   /* This test case assumes extended-precision, but FreeBSD defaults to
28      double-precision.  Make it so.  */
29   fpsetprec (FP_PE);
30 #endif
31 
32   if (sizeof (double) >= 8)
33     {
34       k = 0x8693ba6d7d220401ULL;
35       x = d (k);
36       k = (unsigned long long) x;
37       if (k != 0x8693ba6d7d220800ULL)
38 	abort ();
39     }
40 
41   k = 0x8234508000000001ULL;
42   x = s (k);
43   k = (unsigned long long) x;
44   if (k != 0x8234510000000000ULL)
45     abort ();
46 
47   exit (0);
48 }
49 
50