23 lines · c
1// RUN: %clang_cc1 -verify %s2// expected-no-diagnostics3 4/* WG14 N1464: ???5 * Creation of complex value6 */7 8// The paper is about the CMPLX macros, which Clang supports via the9// __builtin_complex builtin function. Test the basic functionality.10_Static_assert(__builtin_complex(5.0, 2.0) == 5.0 + 1.0j * 2.0, "");11_Static_assert(__builtin_complex(5.0f, 2.0f) == 5.0f + 1.0j * 2.0f, "");12_Static_assert(__builtin_complex(5.0L, 2.0L) == 5.0L + 1.0j * 2.0L, "");13 14// Test the edge case involving NaN or infinity.15#define INF(type) (type)__builtin_inf()16#define NAN(type) (type)__builtin_nan("")17_Static_assert(__builtin_complex(5.0f, INF(float)) != 5.0f + 1.0j * INF(float), "");18_Static_assert(__builtin_complex(5.0, INF(double)) != 5.0 + 1.0j * INF(double), "");19_Static_assert(__builtin_complex(5.0L, INF(long double)) != 5.0L + 1.0j * INF(long double), "");20_Static_assert(__builtin_complex(5.0f, NAN(float)) != 5.0f + 1.0j * NAN(float), "");21_Static_assert(__builtin_complex(5.0, NAN(double)) != 5.0 + 1.0j * NAN(double), "");22_Static_assert(__builtin_complex(5.0L, NAN(long double)) != 5.0L + 1.0j * NAN(long double), "");23