diff options
| author | Alexander Kornienko <alexfh@google.com> | 2016-01-08 16:37:11 +0000 |
|---|---|---|
| committer | Alexander Kornienko <alexfh@google.com> | 2016-01-08 16:37:11 +0000 |
| commit | b816ba0fb30c55229c22fe2539ab07b0b1b3d6b9 (patch) | |
| tree | 5c82c8599c49438cd965c4c0827a86821a9d9ee0 /clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.h | |
| parent | c00ad6c5fb7740c18f324928f2add503fee752d1 (diff) | |
| download | bcm5719-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.h | 43 |
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 |

