1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
// RUN: %check_clang_tidy %s modernize-use-bool-literals %t -- \
// RUN: -config="{CheckOptions: \
// RUN: [{key: modernize-use-bool-literals.IgnoreMacros, \
// RUN: value: true}]}"
bool IntToTrue = 1;
// CHECK-MESSAGES: :[[@LINE-1]]:18: warning: converting integer literal to bool, use bool literal instead [modernize-use-bool-literals]
// CHECK-FIXES: {{^}}bool IntToTrue = true;{{$}}
bool IntToFalse(0);
// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: converting integer literal to bool
// CHECK-FIXES: {{^}}bool IntToFalse(false);{{$}}
bool LongLongToTrue{0x1LL};
// CHECK-MESSAGES: :[[@LINE-1]]:21: warning: converting integer literal to bool
// CHECK-FIXES: {{^}}bool LongLongToTrue{true};{{$}}
bool ExplicitCStyleIntToFalse = (bool)0;
// CHECK-MESSAGES: :[[@LINE-1]]:33: warning: converting integer literal to bool
// CHECK-FIXES: {{^}}bool ExplicitCStyleIntToFalse = false;{{$}}
bool ExplicitFunctionalIntToFalse = bool(0);
// CHECK-MESSAGES: :[[@LINE-1]]:37: warning: converting integer literal to bool
// CHECK-FIXES: {{^}}bool ExplicitFunctionalIntToFalse = false;{{$}}
bool ExplicitStaticIntToFalse = static_cast<bool>(0);
// CHECK-MESSAGES: :[[@LINE-1]]:33: warning: converting integer literal to bool
// CHECK-FIXES: {{^}}bool ExplicitStaticIntToFalse = false;{{$}}
#define TRUE_MACRO 1
// CHECK-FIXES: {{^}}#define TRUE_MACRO 1{{$}}
bool MacroIntToTrue = TRUE_MACRO;
// CHECK-FIXES: {{^}}bool MacroIntToTrue = TRUE_MACRO;{{$}}
#define FALSE_MACRO bool(0)
// CHECK-FIXES: {{^}}#define FALSE_MACRO bool(0){{$}}
bool TrueBool = true; // OK
bool FalseBool = bool(FALSE_MACRO);
// CHECK-FIXES: {{^}}bool FalseBool = bool(FALSE_MACRO);{{$}}
void boolFunction(bool bar) {
}
char Character = 0; // OK
unsigned long long LongInteger = 1; // OK
#define MACRO_DEPENDENT_CAST(x) static_cast<bool>(x)
// CHECK-FIXES: {{^}}#define MACRO_DEPENDENT_CAST(x) static_cast<bool>(x){{$}}
bool MacroDependentBool = MACRO_DEPENDENT_CAST(0);
// CHECK-FIXES: {{^}}bool MacroDependentBool = MACRO_DEPENDENT_CAST(0);{{$}}
bool ManyMacrosDependent = MACRO_DEPENDENT_CAST(FALSE_MACRO);
// CHECK-FIXES: {{^}}bool ManyMacrosDependent = MACRO_DEPENDENT_CAST(FALSE_MACRO);{{$}}
class FooClass {
public:
FooClass() : JustBool(0) {}
// CHECK-MESSAGES: :[[@LINE-1]]:25: warning: converting integer literal to bool
// CHECK-FIXES: {{^ *}}FooClass() : JustBool(false) {}{{$}}
FooClass(int) : JustBool{0} {}
// CHECK-MESSAGES: :[[@LINE-1]]:28: warning: converting integer literal to bool
// CHECK-FIXES: {{^ *}}FooClass(int) : JustBool{false} {}{{$}}
private:
bool JustBool;
bool BoolWithBraces{0};
// CHECK-MESSAGES: :[[@LINE-1]]:23: warning: converting integer literal to bool
// CHECK-FIXES: {{^ *}}bool BoolWithBraces{false};{{$}}
bool BoolFromInt = 0;
// CHECK-MESSAGES: :[[@LINE-1]]:22: warning: converting integer literal to bool
// CHECK-FIXES: {{^ *}}bool BoolFromInt = false;{{$}}
bool SimpleBool = true; // OK
};
template<typename type>
void templateFunction(type) {
type TemplateType = 0;
// CHECK-FIXES: {{^ *}}type TemplateType = 0;{{$}}
}
template<int c>
void valueDependentTemplateFunction() {
bool Boolean = c;
// CHECK-FIXES: {{^ *}}bool Boolean = c;{{$}}
}
template<typename type>
void anotherTemplateFunction(type) {
bool JustBool = 0;
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: converting integer literal to bool
// CHECK-FIXES: {{^ *}}bool JustBool = false;{{$}}
}
int main() {
boolFunction(1);
// CHECK-MESSAGES: :[[@LINE-1]]:16: warning: converting integer literal to bool
// CHECK-FIXES: {{^ *}}boolFunction(true);{{$}}
boolFunction(false);
templateFunction(0);
templateFunction(false);
valueDependentTemplateFunction<1>();
anotherTemplateFunction(1);
IntToTrue = 1;
// CHECK-MESSAGES: :[[@LINE-1]]:15: warning: converting integer literal to bool
// CHECK-FIXES: {{^ *}}IntToTrue = true;{{$}}
}
static int Value = 1;
bool Function1() {
bool Result = Value == 1 ? 1 : 0;
// CHECK-MESSAGES: :[[@LINE-1]]:30: warning: converting integer literal to bool
// CHECK-MESSAGES: :[[@LINE-2]]:34: warning: converting integer literal to bool
// CHECK-FIXES: {{^ *}}bool Result = Value == 1 ? true : false;{{$}}
return Result;
}
bool Function2() {
return Value == 1 ? 1 : 0;
// CHECK-MESSAGES: :[[@LINE-1]]:23: warning: converting integer literal to bool
// CHECK-MESSAGES: :[[@LINE-2]]:27: warning: converting integer literal to bool
// CHECK-FIXES: {{^ *}}return Value == 1 ? true : false;{{$}}
}
void foo() {
bool Result;
Result = Value == 1 ? true : 0;
// CHECK-MESSAGES: :[[@LINE-1]]:32: warning: converting integer literal to bool
// CHECK-FIXES: {{^ *}}Result = Value == 1 ? true : false;{{$}}
Result = Value == 1 ? false : bool(0);
// CHECK-MESSAGES: :[[@LINE-1]]:33: warning: converting integer literal to bool
// CHECK-FIXES: {{^ *}}Result = Value == 1 ? false : false;{{$}}
Result = Value == 1 ? (bool)0 : false;
// CHECK-MESSAGES: :[[@LINE-1]]:25: warning: converting integer literal to bool
// CHECK-FIXES: {{^ *}}Result = Value == 1 ? false : false;{{$}}
}
|