brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 4a498fb Raw
43 lines · cpp
1//===----------------------------------------------------------------------===//2//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-exception6//7//===----------------------------------------------------------------------===//8 9#include "OverloadedOperatorCheck.h"10 11using namespace clang::ast_matchers;12 13namespace clang::tidy::fuchsia {14 15namespace {16AST_MATCHER(FunctionDecl, isFuchsiaOverloadedOperator) {17  if (const auto *CXXMethodNode = dyn_cast<CXXMethodDecl>(&Node)) {18    if (CXXMethodNode->isCopyAssignmentOperator() ||19        CXXMethodNode->isMoveAssignmentOperator())20      return false;21    if (CXXMethodNode->getParent()->isLambda())22      return false;23  }24  return Node.isOverloadedOperator();25}26} // namespace27 28void OverloadedOperatorCheck::registerMatchers(MatchFinder *Finder) {29  Finder->addMatcher(functionDecl(isFuchsiaOverloadedOperator()).bind("decl"),30                     this);31}32 33void OverloadedOperatorCheck::check(const MatchFinder::MatchResult &Result) {34  const auto *D = Result.Nodes.getNodeAs<FunctionDecl>("decl");35  assert(D && "No FunctionDecl captured!");36 37  const SourceLocation Loc = D->getBeginLoc();38  if (Loc.isValid())39    diag(Loc, "overloading %0 is disallowed") << D;40}41 42} // namespace clang::tidy::fuchsia43