blob: f2360a09149fe0bbb70a936dfc8e8a35cf707e0b [file] [log] [blame]
Malcolm Parsonse7be4a02016-12-13 08:04:11 +00001//===--- RedundantFunctionPtrDereferenceCheck.cpp - clang-tidy-------------===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// 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
Malcolm Parsonse7be4a02016-12-13 08:04:11 +00006//
7//===----------------------------------------------------------------------===//
8
9#include "RedundantFunctionPtrDereferenceCheck.h"
10#include "clang/AST/ASTContext.h"
11#include "clang/ASTMatchers/ASTMatchFinder.h"
12
13using namespace clang::ast_matchers;
14
15namespace clang {
16namespace tidy {
17namespace readability {
18
19void RedundantFunctionPtrDereferenceCheck::registerMatchers(MatchFinder *Finder) {
20 Finder->addMatcher(unaryOperator(hasOperatorName("*"),
21 has(implicitCastExpr(
22 hasCastKind(CK_FunctionToPointerDecay))))
23 .bind("op"),
24 this);
25}
26
27void RedundantFunctionPtrDereferenceCheck::check(const MatchFinder::MatchResult &Result) {
28 const auto *Operator = Result.Nodes.getNodeAs<UnaryOperator>("op");
29 diag(Operator->getOperatorLoc(),
30 "redundant repeated dereference of function pointer")
31 << FixItHint::CreateRemoval(Operator->getOperatorLoc());
32}
33
34} // namespace readability
35} // namespace tidy
36} // namespace clang