Files
llvm-project/clang-tools-extra/test/clang-tidy/bugprone-multiple-statement-macro.cpp
Alexander Kornienko d4ac4afda7 [clang-tidy] Move a few more checks from misc to bugprone.
Summary:
clang_tidy/rename_check.py misc-assert-side-effect bugprone-assert-side-effect
clang_tidy/rename_check.py misc-bool-pointer-implicit-conversion bugprone-bool-pointer-implicit-conversion
clang_tidy/rename_check.py misc-fold-init-type bugprone-fold-init-type
clang_tidy/rename_check.py misc-forward-declaration-namespace bugprone-forward-declaration-namespace
clang_tidy/rename_check.py misc-inaccurate-erase bugprone-inaccurate-erase
clang_tidy/rename_check.py misc-move-forwarding-reference bugprone-move-forwarding-reference
clang_tidy/rename_check.py misc-multiple-statement-macro bugprone-multiple-statement-macro
clang_tidy/rename_check.py misc-use-after-move bugprone-use-after-move
clang_tidy/rename_check.py misc-virtual-near-miss bugprone-virtual-near-miss

Manually fixed a reference to UseAfterMoveCheck in the hicpp module.
Manually fixed header guards.

Reviewers: hokein

Reviewed By: hokein

Subscribers: nemanjai, mgorny, javed.absar, xazax.hun, kbarton, cfe-commits

Differential Revision: https://reviews.llvm.org/D40426

llvm-svn: 318950
2017-11-24 14:16:29 +00:00

86 lines
1.7 KiB
C++

// RUN: %check_clang_tidy %s bugprone-multiple-statement-macro %t
void F();
#define BAD_MACRO(x) \
F(); \
F()
#define GOOD_MACRO(x) \
do { \
F(); \
F(); \
} while (0)
#define GOOD_MACRO2(x) F()
#define GOOD_MACRO3(x) F();
#define MACRO_ARG_MACRO(X) \
if (54) \
X(2)
#define ALL_IN_MACRO(X) \
if (43) \
F(); \
F()
#define GOOD_NESTED(x) \
if (x) \
GOOD_MACRO3(x); \
F();
#define IF(x) if(x)
void positives() {
if (1)
BAD_MACRO(1);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: multiple statement macro used without braces; some statements will be unconditionally executed [bugprone-multiple-statement-macro]
if (1) {
} else
BAD_MACRO(1);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: multiple statement macro used
while (1)
BAD_MACRO(1);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: multiple statement macro used
for (;;)
BAD_MACRO(1);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: multiple statement macro used
MACRO_ARG_MACRO(BAD_MACRO);
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: multiple statement macro used
MACRO_ARG_MACRO(F(); int);
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: multiple statement macro used
IF(1) BAD_MACRO(1);
// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: multiple statement macro used
}
void negatives() {
if (1) {
BAD_MACRO(1);
} else {
BAD_MACRO(1);
}
while (1) {
BAD_MACRO(1);
}
for (;;) {
BAD_MACRO(1);
}
if (1)
GOOD_MACRO(1);
if (1) {
GOOD_MACRO(1);
}
if (1)
GOOD_MACRO2(1);
if (1)
GOOD_MACRO3(1);
MACRO_ARG_MACRO(GOOD_MACRO);
ALL_IN_MACRO(1);
IF(1) GOOD_MACRO(1);
}