152 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: false}}"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-MESSAGES: :[[@LINE-1]]:23: warning: converting integer literal to bool35// CHECK-FIXES: bool MacroIntToTrue = TRUE_MACRO;36 37#define FALSE_MACRO bool(0)38// CHECK-FIXES: #define FALSE_MACRO bool(0)39 40bool TrueBool = true; // OK41 42bool FalseBool = bool(FALSE_MACRO);43// CHECK-MESSAGES: :[[@LINE-1]]:23: warning: converting integer literal to bool44// CHECK-FIXES: bool FalseBool = bool(FALSE_MACRO);45 46void boolFunction(bool bar) {47 48}49 50char Character = 0; // OK51 52unsigned long long LongInteger = 1; // OK53 54#define MACRO_DEPENDENT_CAST(x) static_cast<bool>(x)55// CHECK-FIXES: #define MACRO_DEPENDENT_CAST(x) static_cast<bool>(x)56 57bool MacroDependentBool = MACRO_DEPENDENT_CAST(0);58// CHECK-MESSAGES: :[[@LINE-1]]:27: warning: converting integer literal to bool59// CHECK-FIXES: bool MacroDependentBool = MACRO_DEPENDENT_CAST(0);60 61bool ManyMacrosDependent = MACRO_DEPENDENT_CAST(FALSE_MACRO);62// CHECK-MESSAGES: :[[@LINE-1]]:49: warning: converting integer literal to bool63// CHECK-FIXES: bool ManyMacrosDependent = MACRO_DEPENDENT_CAST(FALSE_MACRO);64 65class FooClass {66 public:67 FooClass() : JustBool(0) {}68 // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: converting integer literal to bool69 // CHECK-FIXES: FooClass() : JustBool(false) {}70 FooClass(int) : JustBool{0} {}71 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: converting integer literal to bool72 // CHECK-FIXES: FooClass(int) : JustBool{false} {}73 private:74 bool JustBool;75 bool BoolWithBraces{0};76 // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: converting integer literal to bool77 // CHECK-FIXES: bool BoolWithBraces{false};78 bool BoolFromInt = 0;79 // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: converting integer literal to bool80 // CHECK-FIXES: bool BoolFromInt = false;81 bool SimpleBool = true; // OK82};83 84template<typename type>85void templateFunction(type) {86 type TemplateType = 0;87 // CHECK-FIXES: type TemplateType = 0;88}89 90template<int c>91void valueDependentTemplateFunction() {92 bool Boolean = c;93 // CHECK-FIXES: bool Boolean = c;94}95 96template<typename type>97void anotherTemplateFunction(type) {98 bool JustBool = 0;99 // CHECK-MESSAGES: :[[@LINE-1]]:19: warning: converting integer literal to bool100 // CHECK-FIXES: bool JustBool = false;101}102 103int main() {104 boolFunction(1);105 // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: converting integer literal to bool106 // CHECK-FIXES: boolFunction(true);107 108 boolFunction(false);109 110 templateFunction(0);111 112 templateFunction(false);113 114 valueDependentTemplateFunction<1>();115 116 anotherTemplateFunction(1);117 118 IntToTrue = 1;119 // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: converting integer literal to bool120 // CHECK-FIXES: IntToTrue = true;121}122 123static int Value = 1;124 125bool Function1() {126 bool Result = Value == 1 ? 1 : 0;127 // CHECK-MESSAGES: :[[@LINE-1]]:30: warning: converting integer literal to bool128 // CHECK-MESSAGES: :[[@LINE-2]]:34: warning: converting integer literal to bool129 // CHECK-FIXES: bool Result = Value == 1 ? true : false;130 return Result;131}132 133bool Function2() {134 return Value == 1 ? 1 : 0;135 // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: converting integer literal to bool136 // CHECK-MESSAGES: :[[@LINE-2]]:27: warning: converting integer literal to bool137 // CHECK-FIXES: return Value == 1 ? true : false;138}139 140void foo() {141 bool Result;142 Result = Value == 1 ? true : 0;143 // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: converting integer literal to bool144 // CHECK-FIXES: Result = Value == 1 ? true : false;145 Result = Value == 1 ? false : bool(0);146 // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: converting integer literal to bool147 // CHECK-FIXES: Result = Value == 1 ? false : false;148 Result = Value == 1 ? (bool)0 : false;149 // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: converting integer literal to bool150 // CHECK-FIXES: Result = Value == 1 ? false : false;151}152