summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.h
diff options
context:
space:
mode:
authorAlexander Kornienko <alexfh@google.com>2016-01-08 16:37:11 +0000
committerAlexander Kornienko <alexfh@google.com>2016-01-08 16:37:11 +0000
commitb816ba0fb30c55229c22fe2539ab07b0b1b3d6b9 (patch)
tree5c82c8599c49438cd965c4c0827a86821a9d9ee0 /clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.h
parentc00ad6c5fb7740c18f324928f2add503fee752d1 (diff)
downloadbcm5719-llvm-b816ba0fb30c55229c22fe2539ab07b0b1b3d6b9.tar.gz
bcm5719-llvm-b816ba0fb30c55229c22fe2539ab07b0b1b3d6b9.zip
[clang-tidy] Add non-inline function definition and variable definition check in header files.
Summary: The new check will find all functionand variable definitions which may violate cpp one definition rule in header file. Reviewers: aaron.ballman, alexfh Subscribers: aaron.ballman, cfe-commits Patch by Haojian Wu! Differential Revision: http://reviews.llvm.org/D15710 llvm-svn: 257178
Diffstat (limited to 'clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.h')
-rw-r--r--clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.h b/clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.h
new file mode 100644
index 00000000000..93956099b1b
--- /dev/null
+++ b/clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.h
@@ -0,0 +1,43 @@
+//===--- DefinitionsInHeadersCheck.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_DEFINITIONS_IN_HEADERS_H
+#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_DEFINITIONS_IN_HEADERS_H
+
+#include "../ClangTidy.h"
+
+namespace clang {
+namespace tidy {
+namespace misc {
+
+// Finds non-extern non-inline function and variable definitions in header
+// files, which can lead to potential ODR violations.
+//
+// There is one option:
+// - `UseHeaderFileExtension`: Whether to use file extension (h, hh, hpp, hxx)
+// to distinguish header files. True by default.
+//
+// For the user-facing documentation see:
+// http://clang.llvm.org/extra/clang-tidy/checks/misc-definitions-in-headers.html
+class DefinitionsInHeadersCheck : public ClangTidyCheck {
+public:
+ DefinitionsInHeadersCheck(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 UseHeaderFileExtension;
+};
+
+} // namespace misc
+} // namespace tidy
+} // namespace clang
+
+#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_DEFINITIONS_IN_HEADERS_H
OpenPOWER on IntegriCloud