Author: Artem Dergachev Date: 2021-01-28T22:31:49-08:00 New Revision: b92a39ac1319c796777bca19a3af2856acbc69c1
URL: https://github.com/llvm/llvm-project/commit/b92a39ac1319c796777bca19a3af2856acbc69c1 DIFF: https://github.com/llvm/llvm-project/commit/b92a39ac1319c796777bca19a3af2856acbc69c1.diff LOG: [clang-tidy] bugprone-assert-side-effect: Warn on NSAssert by default. NSAssert and NSCAssert are Objective-C Foundation's standard assert macros. Differential Revision: https://reviews.llvm.org/D95519 Added: clang-tools-extra/test/clang-tidy/checkers/bugprone-assert-side-effect.m Modified: clang-tools-extra/clang-tidy/bugprone/AssertSideEffectCheck.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/bugprone/AssertSideEffectCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/AssertSideEffectCheck.cpp index 0d8834e4135f..4e2359ff4f67 100644 --- a/clang-tools-extra/clang-tidy/bugprone/AssertSideEffectCheck.cpp +++ b/clang-tools-extra/clang-tidy/bugprone/AssertSideEffectCheck.cpp @@ -72,7 +72,8 @@ AssertSideEffectCheck::AssertSideEffectCheck(StringRef Name, ClangTidyContext *Context) : ClangTidyCheck(Name, Context), CheckFunctionCalls(Options.get("CheckFunctionCalls", false)), - RawAssertList(Options.get("AssertMacros", "assert")) { + RawAssertList(Options.get("AssertMacros", + "assert,NSAssert,NSCAssert")) { StringRef(RawAssertList).split(AssertMacros, ",", -1, false); } diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone-assert-side-effect.m b/clang-tools-extra/test/clang-tidy/checkers/bugprone-assert-side-effect.m new file mode 100644 index 000000000000..bca79565cea0 --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone-assert-side-effect.m @@ -0,0 +1,53 @@ +// RUN: %check_clang_tidy %s bugprone-assert-side-effect %t + +int abort(); + +@interface NSObject +@end + +@interface NSString +@end + +@interface NSAssertionHandler ++ (NSAssertionHandler *)currentHandler; +- handleFailureInMethod:(SEL)cmd object:(NSObject *)obj desc:(NSString *)desc; +- handleFailureInFunction:(NSString *)desc; +@end + +#ifndef NDEBUG +#define NSAssert(condition, description, ...) \ + do { \ + if (__builtin_expect(!(condition), 0)) { \ + [[NSAssertionHandler currentHandler] handleFailureInMethod:_cmd \ + object:self \ + desc:(description)]; \ + } \ + } while (0); +#define NSCAssert(condition, description, ...) \ + do { \ + if (__builtin_expect(!(condition), 0)) { \ + [[NSAssertionHandler currentHandler] handleFailureInFunction:(description)]; \ + } \ + } while (0); +#else +#define NSAssert(condition, description, ...) do {} while (0) +#define NSCAssert(condition, description, ...) do {} while (0) +#endif + +@interface I : NSObject +- (void)foo; +@end + +@implementation I +- (void)foo { + int x = 0; + NSAssert((++x) == 1, @"Ugh."); + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: side effect in NSAssert() condition discarded in release builds [bugprone-assert-side-effect] +} +@end + +void foo() { + int x = 0; + NSCAssert((++x) == 1, @"Ugh."); + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: side effect in NSCAssert() condition discarded in release builds [bugprone-assert-side-effect] +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits