xref: /llvm-project/clang/test/Sema/c2x-bool.c (revision 48f8b74c35991fd3842e135481960449b1e25363)
1 // RUN: %clang_cc1 -std=c2x -fsyntax-only -verify %s
2 // RUN: %clang_cc1 -std=c2x -fsyntax-only -verify %s -fexperimental-new-constant-interpreter
3 
4 _Static_assert(_Generic(true, _Bool : 1, default: 0));
5 _Static_assert(_Generic(false, _Bool : 1, default: 0));
6 
7 _Static_assert(_Generic(true, bool : 1, default: 0));
8 _Static_assert(_Generic(false, bool : 1, default: 0));
9 
10 _Static_assert(_Generic(true, bool : true, default: false));
11 _Static_assert(_Generic(false, bool : true, default: false));
12 
13 _Static_assert(true == (bool)+1);
14 _Static_assert(false == (bool)+0);
15 
16 _Static_assert(_Generic(+true, bool : 0, unsigned int : 0, signed int : 1, default : 0));
17 
18 struct S {
19   bool b : 1;
20 } s;
21 _Static_assert(_Generic(+s.b, bool : 0, unsigned int : 0, signed int : 1, default : 0));
22 
23 static void *f = false; // expected-warning {{to null from a constant boolean expression}}
24 static int one = true;
25 static int zero = false;
26 
do_work()27 static void do_work() {
28   char *str = "Foo";
29   str[false] = 'f';
30   str[true] = 'f';
31 
32   char c1[true];
33   char c2[false];
34 }
35 
36 #if true != 1
37 #error true should be 1 in the preprocessor
38 #endif
39 
40 #if false != 0
41 #error false should be 0 in the preprocessor
42 #endif
43