| // RUN: %clang_cc1 -fexperimental-new-constant-interpreter -verify=expected,both -Wno-unused-value %s |
| // RUN: %clang_cc1 -verify=ref,both -Wno-unused-value %s |
| |
| void blah() { |
| __complex__ unsigned xx; |
| __complex__ signed yy; |
| __complex__ int result; |
| |
| /// The following line calls into the constant interpreter. |
| result = xx * yy; |
| } |
| |
| |
| _Static_assert((0.0 + 0.0j) == (0.0 + 0.0j), ""); |
| _Static_assert((0.0 + 0.0j) != (0.0 + 0.0j), ""); // both-error {{static assertion}} \ |
| // both-note {{evaluates to}} |
| |
| const _Complex float FC = {0.0f, 0.0f}; |
| _Static_assert(!FC, ""); |
| const _Complex float FI = {0, 0}; |
| _Static_assert(!FI, ""); |
| |
| |
| /// Make sure we're stripping the _Atomic part from the |
| /// complex type. |
| void testComplexFloat(_Atomic(_Complex float) *fp) { |
| _Atomic(_Complex float) x = 2.0f; |
| _Complex float f = *fp; |
| *fp = f; |
| } |