diff options
author | Alexander Kornienko <alexfh@google.com> | 2017-11-24 14:16:29 +0000 |
---|---|---|
committer | Alexander Kornienko <alexfh@google.com> | 2017-11-24 14:16:29 +0000 |
commit | d4ac4afda75c9ef174e85eea7f40a6ae6cc50ab4 (patch) | |
tree | c43c0be034454ea297f0ccdc84302e9636abed63 /clang-tools-extra/test/clang-tidy/bugprone-multiple-statement-macro.cpp | |
parent | 70cdb5b3914803ca89a96a867a47936d049a4b32 (diff) | |
download | bcm5719-llvm-d4ac4afda75c9ef174e85eea7f40a6ae6cc50ab4.tar.gz bcm5719-llvm-d4ac4afda75c9ef174e85eea7f40a6ae6cc50ab4.zip |
[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
Diffstat (limited to 'clang-tools-extra/test/clang-tidy/bugprone-multiple-statement-macro.cpp')
-rw-r--r-- | clang-tools-extra/test/clang-tidy/bugprone-multiple-statement-macro.cpp | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/clang-tools-extra/test/clang-tidy/bugprone-multiple-statement-macro.cpp b/clang-tools-extra/test/clang-tidy/bugprone-multiple-statement-macro.cpp new file mode 100644 index 00000000000..5b88d8dcf1d --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/bugprone-multiple-statement-macro.cpp @@ -0,0 +1,85 @@ +// 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); +} |