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