brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · ad0d360 Raw
121 lines · cpp
1// RUN: %check_clang_tidy %s bugprone-assignment-in-if-condition %t2 3void f(int arg) {4  int f = 3;5  if ((f = arg) || (f == (arg + 1)))6  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: an assignment within an 'if' condition is bug-prone [bugprone-assignment-in-if-condition]7  {8    f = 5;9  }10}11 12void f1(int arg) {13  int f = 3;14  if ((f == arg) || (f = (arg + 1)))15  // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: an assignment within an 'if' condition is bug-prone [bugprone-assignment-in-if-condition]16  {17    f = 5;18  }19}20 21void f2(int arg) {22  int f = 3;23  if (f = arg)24  // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: an assignment within an 'if' condition is bug-prone [bugprone-assignment-in-if-condition]25  {26    f = 5;27  }28}29 30volatile int v = 32;31 32void f3(int arg) {33  int f = 3;34  if ((f == arg) || ((arg + 6 < f) && (f = v)))35  // CHECK-MESSAGES: :[[@LINE-1]]:42: warning: an assignment within an 'if' condition is bug-prone [bugprone-assignment-in-if-condition]36  {37    f = 5;38  }39}40 41void f4(int arg) {42  int f = 3;43  if ((f == arg) || ((arg + 6 < f) && ((f = v) || (f < 8))))44  // CHECK-MESSAGES: :[[@LINE-1]]:43: warning: an assignment within an 'if' condition is bug-prone [bugprone-assignment-in-if-condition]45  {46    f = 5;47  } else if ((arg + 8 < f) && ((f = v) || (f < 8)))48  // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: an assignment within an 'if' condition is bug-prone [bugprone-assignment-in-if-condition]49  {50    f = 6;51  }52}53 54class BrokenOperator {55public:56  int d = 0;57  int operator=(const int &val) {58    d = val + 1;59    return d;60  }61};62 63void f5(int arg) {64  BrokenOperator bo;65  int f = 3;66  bo = f;67  if (bo.d == 3) {68    f = 6;69  }70  if (bo = 3)71  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: an assignment within an 'if' condition is bug-prone [bugprone-assignment-in-if-condition]72  {73    f = 7;74  }75  if ((arg == 3) || (bo = 6))76  // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: an assignment within an 'if' condition is bug-prone [bugprone-assignment-in-if-condition]77  {78    f = 8;79  }80  v = f;81}82 83// Tests that shouldn't trigger warnings.84void awesome_f2(int arg) {85  int f = 3;86  if ((f == arg) || (f == (arg + 1))) {87    f = 5;88  }89}90 91void awesome_f3(int arg) {92  int f = 3;93  if (f == arg) {94    f = 5;95  }96}97 98void awesome_f4(int arg) {99  int f = 3;100  if ((f == arg) || ((arg + 6 < f) && ((f == v) || (f < 8)))) {101    f = 5;102  }103}104 105template <typename Func> bool exec(Func F) { return F(); }106 107void lambda_if() {108  int X;109  if ([&X] {110        X = 5;111        return true;112      }()) {113  }114 115  if (exec([&] {116        X = 5;117        return true;118      })) {119  }120}121