46 lines · cpp
1// RUN: %check_clang_tidy -std=c++98 %s readability-implicit-bool-conversion %t2 3// We need NULL macro, but some buildbots don't like including <cstddef> header4// This is a portable way of getting it to work5#undef NULL6#define NULL 0L7 8template<typename T>9void functionTaking(T);10 11struct Struct {12 int member;13};14 15void useOldNullMacroInReplacements() {16 int* pointer = NULL;17 functionTaking<bool>(pointer);18 // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: implicit conversion 'int *' -> 'bool' [readability-implicit-bool-conversion]19 // CHECK-FIXES: functionTaking<bool>(pointer != 0);20 21 int Struct::* memberPointer = NULL;22 functionTaking<bool>(!memberPointer);23 // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: implicit conversion 'int Struct::*' -> 'bool'24 // CHECK-FIXES: functionTaking<bool>(memberPointer == 0);25}26 27void fixFalseLiteralConvertingToNullPointer() {28 functionTaking<int*>(false);29 // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: implicit conversion 'bool' -> 'int *'30 // CHECK-FIXES: functionTaking<int*>(0);31 32 int* pointer = NULL;33 if (pointer == false) {}34 // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: implicit conversion 'bool' -> 'int *'35 // CHECK-FIXES: if (pointer == 0) {}36 37 functionTaking<int Struct::*>(false);38 // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: implicit conversion 'bool' -> 'int Struct::*'39 // CHECK-FIXES: functionTaking<int Struct::*>(0);40 41 int Struct::* memberPointer = NULL;42 if (memberPointer != false) {}43 // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: implicit conversion 'bool' -> 'int Struct::*'44 // CHECK-FIXES: if (memberPointer != 0) {}45}46