1 //===--- OverloadedOperatorCheck.cpp - clang-tidy--------------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "OverloadedOperatorCheck.h"
11 using namespace clang::ast_matchers
;
13 namespace clang::tidy::fuchsia
{
16 AST_MATCHER(FunctionDecl
, isFuchsiaOverloadedOperator
) {
17 if (const auto *CXXMethodNode
= dyn_cast
<CXXMethodDecl
>(&Node
)) {
18 if (CXXMethodNode
->isCopyAssignmentOperator() ||
19 CXXMethodNode
->isMoveAssignmentOperator())
21 if (CXXMethodNode
->getParent()->isLambda())
24 return Node
.isOverloadedOperator();
28 void OverloadedOperatorCheck::registerMatchers(MatchFinder
*Finder
) {
29 Finder
->addMatcher(functionDecl(isFuchsiaOverloadedOperator()).bind("decl"),
33 void OverloadedOperatorCheck::check(const MatchFinder::MatchResult
&Result
) {
34 const auto *D
= Result
.Nodes
.getNodeAs
<FunctionDecl
>("decl");
35 assert(D
&& "No FunctionDecl captured!");
37 SourceLocation Loc
= D
->getBeginLoc();
39 diag(Loc
, "overloading %0 is disallowed") << D
;
42 } // namespace clang::tidy::fuchsia