@@ -59,41 +59,48 @@ static_assert((1.25 / (0.25 - 0.75j)) == (0.5 + 1.5j));
59
59
60
60
// Test that infinities are preserved, don't turn into NaNs, and do form zeros
61
61
// when the divisor.
62
+ constexpr _Complex float InfC = {1.0 , __builtin_inf ()};
63
+ constexpr _Complex float InfInf = __builtin_inf() + InfC;
64
+ static_assert (__real__(InfInf) == __builtin_inf());
65
+ static_assert (__imag__(InfInf) == __builtin_inf());
66
+ static_assert (__builtin_isnan(__real__(InfInf * InfInf)));
67
+ static_assert (__builtin_isinf_sign(__imag__(InfInf * InfInf)) == 1);
68
+
62
69
static_assert (__builtin_isinf_sign(__real__((__builtin_inf() + 1.0j) * 1.0)) == 1);
63
- static_assert (__builtin_isinf_sign(__imag__((1.0 + __builtin_inf() * 1.0j ) * 1.0)) == 1);
70
+ static_assert (__builtin_isinf_sign(__imag__((1.0 + InfC ) * 1.0)) == 1);
64
71
static_assert (__builtin_isinf_sign(__real__(1.0 * (__builtin_inf() + 1.0j))) == 1);
65
- static_assert (__builtin_isinf_sign(__imag__(1.0 * (1.0 + __builtin_inf() * 1.0j))) == 1);
66
-
72
+ static_assert (__builtin_isinf_sign(__imag__(1.0 * (1.0 + InfC))) == 1);
67
73
static_assert (__builtin_isinf_sign(__real__((__builtin_inf() + 1.0j) * (1.0 + 1 .0j))) == 1);
68
74
static_assert (__builtin_isinf_sign(__real__((1.0 + 1 .0j) * (__builtin_inf() + 1.0j))) == 1);
69
75
static_assert (__builtin_isinf_sign(__real__((__builtin_inf() + 1.0j) * (__builtin_inf() + 1.0j))) == 1);
70
-
71
- static_assert (__builtin_isinf_sign(__real__((1.0 + __builtin_inf() * 1.0j) * (1.0 + 1 .0j))) == -1);
72
- static_assert (__builtin_isinf_sign(__imag__((1.0 + __builtin_inf() * 1.0j) * (1.0 + 1 .0j))) == 1);
73
- static_assert (__builtin_isinf_sign(__real__((1.0 + 1 .0j) * (1.0 + __builtin_inf() * 1.0j))) == -1);
74
- static_assert (__builtin_isinf_sign(__imag__((1.0 + 1 .0j) * (1.0 + __builtin_inf() * 1.0j))) == 1);
75
-
76
- static_assert (__builtin_isinf_sign(__real__((1.0 + __builtin_inf() * 1.0j) * (1.0 + __builtin_inf() * 1.0j))) == -1);
77
- static_assert (__builtin_isinf_sign(__real__((__builtin_inf() + __builtin_inf() * 1.0j) * (__builtin_inf() + __builtin_inf() * 1.0j))) == -1);
78
-
76
+ static_assert (__builtin_isinf_sign(__real__((1.0 + InfC) * (1.0 + 1 .0j))) == -1);
77
+ static_assert (__builtin_isinf_sign(__imag__((1.0 + InfC) * (1.0 + 1 .0j))) == 1);
78
+ static_assert (__builtin_isinf_sign(__real__((1.0 + 1 .0j) * (1.0 + InfC))) == -1);
79
+ static_assert (__builtin_isinf_sign(__imag__((1.0 + 1 .0j) * (1.0 + InfC))) == 1);
80
+ static_assert (__builtin_isinf_sign(__real__((1.0 + InfC) * (1.0 + InfC))) == -1);
81
+ static_assert (__builtin_isinf_sign(__real__(InfInf * InfInf)) == 0);
79
82
static_assert (__builtin_isinf_sign(__real__((__builtin_inf() + 1.0j) / (1.0 + 1 .0j))) == 1);
80
- static_assert (__builtin_isinf_sign(__imag__(1.0 + (__builtin_inf() * 1.0j ) / (1.0 + 1 .0j))) == 1);
81
- static_assert (__builtin_isinf_sign(__imag__((__builtin_inf() + __builtin_inf() * 1.0j) / (1.0 + 1 .0j))) == 1 );
83
+ static_assert (__builtin_isinf_sign(__imag__(1.0 + (InfC ) / (1.0 + 1 .0j))) == 1);
84
+ static_assert (__builtin_isinf_sign(__imag__((InfInf) / (1.0 + 1 .0j))) == 0 );
82
85
static_assert (__builtin_isinf_sign(__real__((__builtin_inf() + 1.0j) / 1.0)) == 1);
83
- static_assert (__builtin_isinf_sign(__imag__(1.0 + (__builtin_inf() * 1.0j) / 1.0)) == 1);
84
- static_assert (__builtin_isinf_sign(__imag__((__builtin_inf() + __builtin_inf() * 1.0j) / 1.0)) == 1);
85
-
86
+ static_assert (__builtin_isinf_sign(__imag__(1.0 + (InfC) / 1.0)) == 1);
87
+ static_assert (__builtin_isinf_sign(__imag__((InfInf) / 1.0)) == 1);
86
88
static_assert (((1.0 + 1 .0j) / (__builtin_inf() + 1.0j)) == (0.0 + 0 .0j));
87
- static_assert (((1.0 + 1 .0j) / (1.0 + __builtin_inf() * 1.0j )) == (0.0 + 0 .0j));
88
- static_assert (((1.0 + 1 .0j) / (__builtin_inf() + __builtin_inf() * 1.0j )) == (0.0 + 0 .0j));
89
+ static_assert (((1.0 + 1 .0j) / (1.0 + InfC )) == (0.0 + 0 .0j));
90
+ static_assert (((1.0 + 1 .0j) / (InfInf )) == (0.0 + 0 .0j));
89
91
static_assert (((1.0 + 1 .0j) / __builtin_inf()) == (0.0 + 0 .0j));
90
-
92
+ static_assert (1 .0j / 0.0 == 1 ); // expected-error {{static assertion}} \
93
+ // expected-note {{division by zero}}
91
94
static_assert (__builtin_isinf_sign(__real__((1.0 + 1 .0j) / (0.0 + 0 .0j))) == 1);
92
- static_assert (__builtin_isinf_sign(__real__((1.0 + 1 .0j) / 0.0)) == 1);
93
-
95
+ static_assert (__builtin_isinf_sign(__real__((1.0 + 1 .0j) / 0.0)) == 1); // expected-error {{static assertion}} \
96
+ // expected-note {{division by zero}}
94
97
static_assert (__builtin_isinf_sign(__real__((__builtin_inf() + 1.0j) / (0.0 + 0 .0j))) == 1);
95
- static_assert (__builtin_isinf_sign(__imag__((1.0 + __builtin_inf() * 1.0j) / (0.0 + 0 .0j))) == 1);
96
- static_assert (__builtin_isinf_sign(__imag__((__builtin_inf() + __builtin_inf() * 1.0j) / (0.0 + 0 .0j))) == 1);
97
- static_assert (__builtin_isinf_sign(__real__((__builtin_inf() + 1.0j) / 0.0)) == 1);
98
- static_assert (__builtin_isinf_sign(__imag__((1.0 + __builtin_inf() * 1.0j) / 0.0)) == 1);
99
- static_assert (__builtin_isinf_sign(__imag__((__builtin_inf() + __builtin_inf() * 1.0j) / 0.0)) == 1);
98
+ static_assert (__builtin_isinf_sign(__imag__((1.0 + InfC) / (0.0 + 0 .0j))) == 1);
99
+ static_assert (__builtin_isinf_sign(__imag__((InfInf) / (0.0 + 0 .0j))) == 1);
100
+ static_assert (__builtin_isinf_sign(__real__((__builtin_inf() + 1.0j) / 0.0)) == 1); // expected-error {{static assertion}} \
101
+ // expected-note {{division by zero}}
102
+ static_assert (__builtin_isinf_sign(__imag__((1.0 + InfC) / 0.0)) == 1); // expected-error {{static assertion}} \
103
+ // expected-note {{division by zero}}
104
+ static_assert (__builtin_isinf_sign(__imag__((InfInf) / 0.0)) == 1); // expected-error {{static assertion}} \
105
+ // expected-note {{division by zero}}
106
+
0 commit comments