| // RUN: %clang_cc1 -std=c2x -fsyntax-only -verify %s |
| // RUN: %clang_cc1 -std=c2x -fsyntax-only -verify %s -fexperimental-new-constant-interpreter |
| |
| _Static_assert(_Generic(true, _Bool : 1, default: 0)); |
| _Static_assert(_Generic(false, _Bool : 1, default: 0)); |
| |
| _Static_assert(_Generic(true, bool : 1, default: 0)); |
| _Static_assert(_Generic(false, bool : 1, default: 0)); |
| |
| _Static_assert(_Generic(true, bool : true, default: false)); |
| _Static_assert(_Generic(false, bool : true, default: false)); |
| |
| _Static_assert(true == (bool)+1); |
| _Static_assert(false == (bool)+0); |
| |
| _Static_assert(_Generic(+true, bool : 0, unsigned int : 0, signed int : 1, default : 0)); |
| |
| struct S { |
| bool b : 1; |
| } s; |
| _Static_assert(_Generic(+s.b, bool : 0, unsigned int : 0, signed int : 1, default : 0)); |
| |
| static void *f = false; // expected-warning {{to null from a constant boolean expression}} |
| static int one = true; |
| static int zero = false; |
| |
| static void do_work() { |
| char *str = "Foo"; |
| str[false] = 'f'; |
| str[true] = 'f'; |
| |
| char c1[true]; |
| char c2[false]; |
| } |
| |
| #if true != 1 |
| #error true should be 1 in the preprocessor |
| #endif |
| |
| #if false != 0 |
| #error false should be 0 in the preprocessor |
| #endif |