summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-tidy/misc/AssertSideEffectCheck.h
diff options
context:
space:
mode:
authorAlexander Kornienko <alexfh@google.com>2015-03-02 10:46:43 +0000
committerAlexander Kornienko <alexfh@google.com>2015-03-02 10:46:43 +0000
commit1ca3b832558a9843241f940fbd1ed90ec10e5f70 (patch)
tree618cbc0d0f5c19d79a0a93b133940d0839df938c /clang-tools-extra/clang-tidy/misc/AssertSideEffectCheck.h
parente662316994ff7f90263c98e5213230fa7823e8d2 (diff)
downloadbcm5719-llvm-1ca3b832558a9843241f940fbd1ed90ec10e5f70.tar.gz
bcm5719-llvm-1ca3b832558a9843241f940fbd1ed90ec10e5f70.zip
[clang-tidy] Assert related checkers
This patch contains two assert related checkers. These checkers are the part of those that is being open sourced by Ericsson (http://lists.cs.uiuc.edu/pipermail/cfe-dev/2014-December/040520.html). The checkers: AssertSideEffect: /// \brief Finds \c assert() with side effect. /// /// The conition of \c assert() is evaluated only in debug builds so a condition /// with side effect can cause different behaviour in debug / relesase builds. StaticAssert: /// \brief Replaces \c assert() with \c static_assert() if the condition is /// evaluatable at compile time. /// /// The condition of \c static_assert() is evaluated at compile time which is /// safer and more efficient. http://reviews.llvm.org/D7375 Patch by Szabolcs Sipos! llvm-svn: 230943
Diffstat (limited to 'clang-tools-extra/clang-tidy/misc/AssertSideEffectCheck.h')
-rw-r--r--clang-tools-extra/clang-tidy/misc/AssertSideEffectCheck.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-tidy/misc/AssertSideEffectCheck.h b/clang-tools-extra/clang-tidy/misc/AssertSideEffectCheck.h
new file mode 100644
index 00000000000..831435a463b
--- /dev/null
+++ b/clang-tools-extra/clang-tidy/misc/AssertSideEffectCheck.h
@@ -0,0 +1,50 @@
+//===--- AssertSideEffectCheck.h - clang-tidy -------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_ASSERT_SIDE_EFFECT_CHECK_H
+#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_ASSERT_SIDE_EFFECT_CHECK_H
+
+#include "../ClangTidy.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringRef.h"
+#include <string>
+
+namespace clang {
+namespace tidy {
+
+/// \brief Finds \c assert() with side effect.
+///
+/// The condition of \c assert() is evaluated only in debug builds so a
+/// condition with side effect can cause different behaviour in debug / relesase
+/// builds.
+///
+/// There are two options:
+/// - AssertMacros: AssertMacros: A comma-separated list of the names of assert
+/// macros to be checked.
+/// - CheckFunctionCalls: Whether to treat non-const member and non-member
+/// functions as they produce side effects. Disabled by default
+/// because it can increase the number of false positive warnings.
+
+class AssertSideEffectCheck : public ClangTidyCheck {
+public:
+ AssertSideEffectCheck(StringRef Name, ClangTidyContext *Context);
+ void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
+ void registerMatchers(ast_matchers::MatchFinder *Finder) override;
+ void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
+
+private:
+ const bool CheckFunctionCalls;
+ const std::string RawAssertList;
+ SmallVector<StringRef, 5> AssertMacros;
+};
+
+} // namespace tidy
+} // namespace clang
+
+#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_ASSERT_SIDE_EFFECT_CHECK_H
OpenPOWER on IntegriCloud