brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · ef59194 Raw
78 lines · cpp
1// RUN: %check_clang_tidy %s readability-implicit-bool-conversion %t \2// RUN: -config='{CheckOptions: \3// RUN:  {readability-implicit-bool-conversion.AllowIntegerConditions: true, \4// RUN:   readability-implicit-bool-conversion.AllowPointerConditions: true}}'5 6template<typename T>7void functionTaking(T);8 9int functionReturningInt();10int* functionReturningPointer();11 12struct Struct {13  int member;14  unsigned bitfield : 1;15  bool boolfield : 1;16};17 18 19void regularImplicitConversionIntegerToBoolIsNotIgnored() {20  int integer = 0;21  functionTaking<bool>(integer);22  // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: implicit conversion 'int' -> 'bool' [readability-implicit-bool-conversion]23  // CHECK-FIXES: functionTaking<bool>(integer != 0);24}25 26void implicitConversionIntegerToBoolInConditionalsIsAllowed() {27  Struct s = {};28  if (s.member) {}29  if (!s.member) {}30  if (s.bitfield) {}31  if (!s.bitfield) {}32  if (s.boolfield == true) {}33  if (s.boolfield != true) {}34  if (functionReturningInt()) {}35  if (!functionReturningInt()) {}36  if (functionReturningInt() && functionReturningPointer()) {}37  if (!functionReturningInt() && !functionReturningPointer()) {}38  for (; functionReturningInt(); ) {}39  for (; functionReturningPointer(); ) {}40  for (; functionReturningInt() && !functionReturningPointer() || (!functionReturningInt() && functionReturningPointer()); ) {}41  while (functionReturningInt()) {}42  while (functionReturningPointer()) {}43  while (functionReturningInt() && !functionReturningPointer() || (!functionReturningInt() && functionReturningPointer())) {}44  do {} while (functionReturningInt());45  do {} while (functionReturningPointer());46  do {} while (functionReturningInt() && !functionReturningPointer() || (!functionReturningInt() && functionReturningPointer()));47  int value1 = functionReturningInt() ? 1 : 2;48  int value2 = !functionReturningInt() ? 1 : 2;49  int value3 = (functionReturningInt() && functionReturningPointer() || !functionReturningInt()) ? 1 : 2;50  int value4 = functionReturningInt() ?: value3;51  int *p1 = functionReturningPointer() ?: &value3;52}53 54void regularImplicitConversionPointerToBoolIsNotIgnored() {55  int* pointer = nullptr;56  functionTaking<bool>(pointer);57  // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: implicit conversion 'int *' -> 'bool'58  // CHECK-FIXES: functionTaking<bool>(pointer != nullptr);59 60  int Struct::* memberPointer = &Struct::member;61  functionTaking<bool>(memberPointer);62  // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: implicit conversion 'int Struct::*' -> 'bool'63  // CHECK-FIXES: functionTaking<bool>(memberPointer != nullptr);64}65 66void implicitConversionPointerToBoolInConditionalsIsAllowed() {67  if (functionReturningPointer()) {}68  if (not functionReturningPointer()) {}69  int value1 = functionReturningPointer() ? 1 : 2;70  int value2 = (not functionReturningPointer()) ? 1 : 2;71 72  int Struct::* memberPointer = &Struct::member;73  if (memberPointer) {}74  if (memberPointer) {}75  int value3 = memberPointer ? 1 : 2;76  int value4 = (not memberPointer) ? 1 : 2;77}78