diff options
author | Julie Hockett <juliehockett@google.com> | 2017-12-22 16:52:25 +0000 |
---|---|---|
committer | Julie Hockett <juliehockett@google.com> | 2017-12-22 16:52:25 +0000 |
commit | a966f45b7ee6a9c77a7040b51a18c01caac90918 (patch) | |
tree | 280861773da8ff8eea0be9932721fa8a663a0a8f /clang-tools-extra/clang-tidy/fuchsia/OverloadedOperatorCheck.cpp | |
parent | 9c9b61df7e37bc1832b225c0c26123031727c8ef (diff) | |
download | llvm-a966f45b7ee6a9c77a7040b51a18c01caac90918.zip llvm-a966f45b7ee6a9c77a7040b51a18c01caac90918.tar.gz llvm-a966f45b7ee6a9c77a7040b51a18c01caac90918.tar.bz2 |
[clang-tidy] Adding Fuchsia checker for overloaded operators
Adds a check to the Fuchsia module to warn if an operator is overloaded,
except move and copy operators.
See https://fuchsia.googlesource.com/zircon/+/master/docs/cxx.md for
reference.
Differential Revision: https://reviews.llvm.org/D41363
llvm-svn: 321363
Diffstat (limited to 'clang-tools-extra/clang-tidy/fuchsia/OverloadedOperatorCheck.cpp')
-rw-r--r-- | clang-tools-extra/clang-tidy/fuchsia/OverloadedOperatorCheck.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-tidy/fuchsia/OverloadedOperatorCheck.cpp b/clang-tools-extra/clang-tidy/fuchsia/OverloadedOperatorCheck.cpp new file mode 100644 index 0000000..57b4628 --- /dev/null +++ b/clang-tools-extra/clang-tidy/fuchsia/OverloadedOperatorCheck.cpp @@ -0,0 +1,39 @@ +//===--- OverloadedOperatorCheck.cpp - clang-tidy--------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "OverloadedOperatorCheck.h" + +using namespace clang::ast_matchers; + +namespace clang { +namespace tidy { +namespace fuchsia { + +AST_MATCHER(FunctionDecl, isFuchsiaOverloadedOperator) { + if (const auto *CXXMethodNode = dyn_cast<CXXMethodDecl>(&Node)) { + if (CXXMethodNode->isCopyAssignmentOperator() || + CXXMethodNode->isMoveAssignmentOperator()) + return false; + } + return Node.isOverloadedOperator(); +} + +void OverloadedOperatorCheck::registerMatchers(MatchFinder *Finder) { + Finder->addMatcher(functionDecl(isFuchsiaOverloadedOperator()).bind("decl"), + this); +} + +void OverloadedOperatorCheck::check(const MatchFinder::MatchResult &Result) { + if (const auto *D = Result.Nodes.getNodeAs<FunctionDecl>("decl")) + diag(D->getLocStart(), "cannot overload %0") << D; +} + +} // namespace fuchsia +} // namespace tidy +} // namespace clang |