blob: 35c3ec45d278e566cc706bd31aeeb01df0d00788 [file] [log] [blame]
Jakub Staronf7df7262016-05-11 11:33:16 +00001// RUN: %check_clang_tidy %s modernize-use-bool-literals %t
2
3bool IntToTrue = 1;
4// CHECK-MESSAGES: :[[@LINE-1]]:18: warning: converting integer literal to bool, use bool literal instead [modernize-use-bool-literals]
5// CHECK-FIXES: {{^}}bool IntToTrue = true;{{$}}
6
7bool IntToFalse(0);
Kirill Bobyrev75de8962016-08-08 17:11:56 +00008// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: converting integer literal to bool
Jakub Staronf7df7262016-05-11 11:33:16 +00009// CHECK-FIXES: {{^}}bool IntToFalse(false);{{$}}
10
11bool LongLongToTrue{0x1LL};
Kirill Bobyrev75de8962016-08-08 17:11:56 +000012// CHECK-MESSAGES: :[[@LINE-1]]:21: warning: converting integer literal to bool
Jakub Staronf7df7262016-05-11 11:33:16 +000013// CHECK-FIXES: {{^}}bool LongLongToTrue{true};{{$}}
14
15bool ExplicitCStyleIntToFalse = (bool)0;
Kirill Bobyrev75de8962016-08-08 17:11:56 +000016// CHECK-MESSAGES: :[[@LINE-1]]:33: warning: converting integer literal to bool
Jakub Staronf7df7262016-05-11 11:33:16 +000017// CHECK-FIXES: {{^}}bool ExplicitCStyleIntToFalse = false;{{$}}
18
19bool ExplicitFunctionalIntToFalse = bool(0);
Kirill Bobyrev75de8962016-08-08 17:11:56 +000020// CHECK-MESSAGES: :[[@LINE-1]]:37: warning: converting integer literal to bool
Jakub Staronf7df7262016-05-11 11:33:16 +000021// CHECK-FIXES: {{^}}bool ExplicitFunctionalIntToFalse = false;{{$}}
22
23bool ExplicitStaticIntToFalse = static_cast<bool>(0);
Kirill Bobyrev75de8962016-08-08 17:11:56 +000024// CHECK-MESSAGES: :[[@LINE-1]]:33: warning: converting integer literal to bool
Jakub Staronf7df7262016-05-11 11:33:16 +000025// CHECK-FIXES: {{^}}bool ExplicitStaticIntToFalse = false;{{$}}
26
27#define TRUE_MACRO 1
28// CHECK-FIXES: {{^}}#define TRUE_MACRO 1{{$}}
29
30bool MacroIntToTrue = TRUE_MACRO;
Kirill Bobyrev75de8962016-08-08 17:11:56 +000031// CHECK-MESSAGES: :[[@LINE-1]]:23: warning: converting integer literal to bool
Jakub Staronf7df7262016-05-11 11:33:16 +000032// CHECK-FIXES: {{^}}bool MacroIntToTrue = TRUE_MACRO;{{$}}
33
34#define FALSE_MACRO bool(0)
35// CHECK-FIXES: {{^}}#define FALSE_MACRO bool(0){{$}}
36
Jakub Staronf7df7262016-05-11 11:33:16 +000037bool TrueBool = true; // OK
38
39bool FalseBool = bool(FALSE_MACRO);
Kirill Bobyrev75de8962016-08-08 17:11:56 +000040// CHECK-MESSAGES: :[[@LINE-1]]:23: warning: converting integer literal to bool
Jakub Staronf7df7262016-05-11 11:33:16 +000041// CHECK-FIXES: {{^}}bool FalseBool = bool(FALSE_MACRO);{{$}}
42
43void boolFunction(bool bar) {
44
45}
46
47char Character = 0; // OK
48
49unsigned long long LongInteger = 1; // OK
50
51#define MACRO_DEPENDENT_CAST(x) static_cast<bool>(x)
52// CHECK-FIXES: {{^}}#define MACRO_DEPENDENT_CAST(x) static_cast<bool>(x){{$}}
53
54bool MacroDependentBool = MACRO_DEPENDENT_CAST(0);
Kirill Bobyrev75de8962016-08-08 17:11:56 +000055// CHECK-MESSAGES: :[[@LINE-1]]:27: warning: converting integer literal to bool
Jakub Staronf7df7262016-05-11 11:33:16 +000056// CHECK-FIXES: {{^}}bool MacroDependentBool = MACRO_DEPENDENT_CAST(0);{{$}}
57
58bool ManyMacrosDependent = MACRO_DEPENDENT_CAST(FALSE_MACRO);
Kirill Bobyrev75de8962016-08-08 17:11:56 +000059// CHECK-MESSAGES: :[[@LINE-1]]:49: warning: converting integer literal to bool
Jakub Staronf7df7262016-05-11 11:33:16 +000060// CHECK-FIXES: {{^}}bool ManyMacrosDependent = MACRO_DEPENDENT_CAST(FALSE_MACRO);{{$}}
61
62class FooClass {
63 public:
64 FooClass() : JustBool(0) {}
Kirill Bobyrev75de8962016-08-08 17:11:56 +000065 // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: converting integer literal to bool
Jakub Staronf7df7262016-05-11 11:33:16 +000066 // CHECK-FIXES: {{^ *}}FooClass() : JustBool(false) {}{{$}}
67 FooClass(int) : JustBool{0} {}
Kirill Bobyrev75de8962016-08-08 17:11:56 +000068 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: converting integer literal to bool
Jakub Staronf7df7262016-05-11 11:33:16 +000069 // CHECK-FIXES: {{^ *}}FooClass(int) : JustBool{false} {}{{$}}
70 private:
71 bool JustBool;
72 bool BoolWithBraces{0};
Kirill Bobyrev75de8962016-08-08 17:11:56 +000073 // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: converting integer literal to bool
Jakub Staronf7df7262016-05-11 11:33:16 +000074 // CHECK-FIXES: {{^ *}}bool BoolWithBraces{false};{{$}}
75 bool BoolFromInt = 0;
Kirill Bobyrev75de8962016-08-08 17:11:56 +000076 // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: converting integer literal to bool
Jakub Staronf7df7262016-05-11 11:33:16 +000077 // CHECK-FIXES: {{^ *}}bool BoolFromInt = false;{{$}}
78 bool SimpleBool = true; // OK
79};
80
81template<typename type>
82void templateFunction(type) {
83 type TemplateType = 0;
84 // CHECK-FIXES: {{^ *}}type TemplateType = 0;{{$}}
Jakub Staronf7df7262016-05-11 11:33:16 +000085}
86
87template<int c>
88void valueDependentTemplateFunction() {
89 bool Boolean = c;
90 // CHECK-FIXES: {{^ *}}bool Boolean = c;{{$}}
Jakub Staronf7df7262016-05-11 11:33:16 +000091}
92
93template<typename type>
94void anotherTemplateFunction(type) {
95 bool JustBool = 0;
Kirill Bobyrev75de8962016-08-08 17:11:56 +000096 // CHECK-MESSAGES: :[[@LINE-1]]:19: warning: converting integer literal to bool
Jakub Staronf7df7262016-05-11 11:33:16 +000097 // CHECK-FIXES: {{^ *}}bool JustBool = false;{{$}}
Jakub Staronf7df7262016-05-11 11:33:16 +000098}
99
100int main() {
101 boolFunction(1);
Kirill Bobyrev75de8962016-08-08 17:11:56 +0000102 // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: converting integer literal to bool
Jakub Staronf7df7262016-05-11 11:33:16 +0000103 // CHECK-FIXES: {{^ *}}boolFunction(true);{{$}}
104
105 boolFunction(false);
106
107 templateFunction(0);
108
109 templateFunction(false);
110
111 valueDependentTemplateFunction<1>();
112
113 anotherTemplateFunction(1);
114
115 IntToTrue = 1;
Kirill Bobyrev75de8962016-08-08 17:11:56 +0000116 // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: converting integer literal to bool
Jakub Staronf7df7262016-05-11 11:33:16 +0000117 // CHECK-FIXES: {{^ *}}IntToTrue = true;{{$}}
118}
Kirill Bobyrev75de8962016-08-08 17:11:56 +0000119
120static int Value = 1;
121
122bool Function1() {
123 bool Result = Value == 1 ? 1 : 0;
124 // CHECK-MESSAGES: :[[@LINE-1]]:30: warning: converting integer literal to bool
125 // CHECK-MESSAGES: :[[@LINE-2]]:34: warning: converting integer literal to bool
126 // CHECK-FIXES: {{^ *}}bool Result = Value == 1 ? true : false;{{$}}
127 return Result;
128}
129
130bool Function2() {
131 return Value == 1 ? 1 : 0;
132 // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: converting integer literal to bool
133 // CHECK-MESSAGES: :[[@LINE-2]]:27: warning: converting integer literal to bool
134 // CHECK-FIXES: {{^ *}}return Value == 1 ? true : false;{{$}}
135}
136
137void foo() {
138 bool Result;
139 Result = Value == 1 ? true : 0;
140 // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: converting integer literal to bool
141 // CHECK-FIXES: {{^ *}}Result = Value == 1 ? true : false;{{$}}
142 Result = Value == 1 ? false : bool(0);
143 // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: converting integer literal to bool
144 // CHECK-FIXES: {{^ *}}Result = Value == 1 ? false : false;{{$}}
145 Result = Value == 1 ? (bool)0 : false;
146 // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: converting integer literal to bool
147 // CHECK-FIXES: {{^ *}}Result = Value == 1 ? false : false;{{$}}
148}