6f929a81fd6cd0de0093be57a50cbb6d1cfeee46
[gcc.git] / gcc / testsuite / gcc.dg / pr28796-2.c
1 /* { dg-do run } */
2 /* { dg-options "-O2 -funsafe-math-optimizations -fno-finite-math-only" } */
3 /* { dg-options "-mieee -O2 -funsafe-math-optimizations -fno-finite-math-only" { target alpha*-*-* } } */
4
5 extern void abort (void);
6
7 void __attribute__ ((__noinline__))
8 foo_1 (float f, double d, long double ld,
9 int res_unord, int res_isnan, int res_isinf, int res_isfin)
10 {
11 if (__builtin_isunordered (f, 0) != res_unord)
12 abort ();
13 if (__builtin_isunordered (0, f) != res_unord)
14 abort ();
15 if (__builtin_isunordered (d, 0) != res_unord)
16 abort ();
17 if (__builtin_isunordered (0, d) != res_unord)
18 abort ();
19 if (__builtin_isunordered (ld, 0) != res_unord)
20 abort ();
21 if (__builtin_isunordered (0, ld) != res_unord)
22 abort ();
23
24 if (__builtin_isnan (f) != res_isnan)
25 abort ();
26 if (__builtin_isnan (d) != res_isnan)
27 abort ();
28 if (__builtin_isnan (ld) != res_isnan)
29 abort ();
30 if (__builtin_isnanf (f) != res_isnan)
31 abort ();
32 if (__builtin_isnanl (ld) != res_isnan)
33 abort ();
34
35 if (__builtin_isinf (f) != res_isinf)
36 abort ();
37 if (__builtin_isinf (d) != res_isinf)
38 abort ();
39 if (__builtin_isinf (ld) != res_isinf)
40 abort ();
41 if (__builtin_isinff (f) != res_isinf)
42 abort ();
43 if (__builtin_isinfl (ld) != res_isinf)
44 abort ();
45
46 if (__builtin_isfinite (f) != res_isfin)
47 abort ();
48 if (__builtin_isfinite (d) != res_isfin)
49 abort ();
50 if (__builtin_isfinite (ld) != res_isfin)
51 abort ();
52
53 if (__builtin_finitef (f) != res_isfin)
54 abort ();
55 if (__builtin_finite (f) != res_isfin)
56 abort ();
57 if (__builtin_finite (d) != res_isfin)
58 abort ();
59 if (__builtin_finitel (d) != res_isfin)
60 abort ();
61 if (__builtin_finitel (ld) != res_isfin)
62 abort ();
63 }
64
65 void __attribute__ ((__noinline__))
66 foo (float f, double d, long double ld,
67 int res_unord, int res_isnan, int res_isinf, int res_isfin)
68 {
69 foo_1 (f, d, ld, res_unord, res_isnan, res_isinf, res_isfin);
70 foo_1 (-f, -d, -ld, res_unord, res_isnan, res_isinf, res_isfin);
71 }
72
73 int main()
74 {
75 float f;
76 double d;
77 long double ld;
78
79 f = __builtin_nanf(""); d = __builtin_nan(""); ld = __builtin_nanl("");
80 foo(f, d, ld, /*unord=*/ 1, /*isnan=*/ 1, /*isinf=*/ 0, /*isfin=*/ 0);
81
82 f = __builtin_inff(); d = __builtin_inf(); ld = __builtin_infl();
83 foo(f, d, ld, /*unord=*/ 0, /*isnan=*/ 0, /*isinf=*/ 1, /*isfin=*/ 0);
84
85 f = 0; d = 0; ld = 0;
86 foo(f, d, ld, /*unord=*/ 0, /*isnan=*/ 0, /*isinf=*/ 0, /*isfin=*/ 1);
87
88 f = __FLT_MIN__; d = __DBL_MIN__; ld = __LDBL_MIN__;
89 foo(f, d, ld, /*unord=*/ 0, /*isnan=*/ 0, /*isinf=*/ 0, /*isfin=*/ 1);
90
91 f = __FLT_MAX__; d = __DBL_MAX__; ld = __LDBL_MAX__;
92 foo(f, d, ld, /*unord=*/ 0, /*isnan=*/ 0, /*isinf=*/ 0, /*isfin=*/ 1);
93
94 return 0;
95 }