brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · 5b88d8d Raw
86 lines · cpp
1// RUN: %check_clang_tidy %s bugprone-multiple-statement-macro %t2 3void F();4 5#define BAD_MACRO(x) \6  F();               \7  F()8 9#define GOOD_MACRO(x) \10  do {                \11    F();              \12    F();              \13  } while (0)14 15#define GOOD_MACRO2(x) F()16 17#define GOOD_MACRO3(x) F();18 19#define MACRO_ARG_MACRO(X) \20  if (54)                  \21  X(2)22 23#define ALL_IN_MACRO(X) \24  if (43)               \25    F();                \26  F()27 28#define GOOD_NESTED(x)   \29  if (x)            \30    GOOD_MACRO3(x); \31  F();32 33#define IF(x) if(x)34 35void positives() {36  if (1)37    BAD_MACRO(1);38  // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: multiple statement macro used without braces; some statements will be unconditionally executed [bugprone-multiple-statement-macro]39  if (1) {40  } else41    BAD_MACRO(1);42  // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: multiple statement macro used43  while (1)44    BAD_MACRO(1);45  // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: multiple statement macro used46  for (;;)47    BAD_MACRO(1);48  // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: multiple statement macro used49 50  MACRO_ARG_MACRO(BAD_MACRO);51  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: multiple statement macro used52  MACRO_ARG_MACRO(F(); int);53  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: multiple statement macro used54  IF(1) BAD_MACRO(1);55  // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: multiple statement macro used56}57 58void negatives() {59  if (1) {60    BAD_MACRO(1);61  } else {62    BAD_MACRO(1);63  }64  while (1) {65    BAD_MACRO(1);66  }67  for (;;) {68    BAD_MACRO(1);69  }70 71  if (1)72    GOOD_MACRO(1);73  if (1) {74    GOOD_MACRO(1);75  }76  if (1)77    GOOD_MACRO2(1);78  if (1)79    GOOD_MACRO3(1);80 81  MACRO_ARG_MACRO(GOOD_MACRO);82  ALL_IN_MACRO(1);83 84  IF(1) GOOD_MACRO(1);85}86