@@ -59,41 +59,48 @@ static_assert((1.25 / (0.25 - 0.75j)) == (0.5 + 1.5j));
5959
6060// Test that infinities are preserved, don't turn into NaNs, and do form zeros
6161// 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+
6269static_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 );
6471static_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 );
6773static_assert (__builtin_isinf_sign(__real__((__builtin_inf() + 1 .0j) * (1.0 + 1 .0j))) == 1 );
6874static_assert (__builtin_isinf_sign(__real__((1.0 + 1 .0j) * (__builtin_inf() + 1 .0j))) == 1 );
6975static_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 );
7982static_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 );
8285static_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 );
8688static_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));
8991static_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}}
9194static_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}}
9497static_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