1e4acb971SStephane Moore //===--- AvoidSpinlockCheck.cpp - clang-tidy-------------------------------===// 2e4acb971SStephane Moore // 3e4acb971SStephane Moore // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4e4acb971SStephane Moore // See https://llvm.org/LICENSE.txt for license information. 5e4acb971SStephane Moore // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6e4acb971SStephane Moore // 7e4acb971SStephane Moore //===----------------------------------------------------------------------===// 8e4acb971SStephane Moore 9e4acb971SStephane Moore #include "AvoidSpinlockCheck.h" 10e4acb971SStephane Moore #include "clang/AST/ASTContext.h" 11e4acb971SStephane Moore #include "clang/ASTMatchers/ASTMatchFinder.h" 12e4acb971SStephane Moore 13e4acb971SStephane Moore using namespace clang::ast_matchers; 14e4acb971SStephane Moore 15*7d2ea6c4SCarlos Galvez namespace clang::tidy::darwin { 16e4acb971SStephane Moore registerMatchers(MatchFinder * Finder)17e4acb971SStephane Moorevoid AvoidSpinlockCheck::registerMatchers(MatchFinder *Finder) { 18e4acb971SStephane Moore Finder->addMatcher( 19e4acb971SStephane Moore callExpr(callee((functionDecl(hasAnyName( 20e4acb971SStephane Moore "OSSpinlockLock", "OSSpinlockUnlock", "OSSpinlockTry"))))) 21e4acb971SStephane Moore .bind("spinlock"), 22e4acb971SStephane Moore this); 23e4acb971SStephane Moore } 24e4acb971SStephane Moore check(const MatchFinder::MatchResult & Result)25e4acb971SStephane Moorevoid AvoidSpinlockCheck::check(const MatchFinder::MatchResult &Result) { 26e4acb971SStephane Moore const auto *MatchedExpr = Result.Nodes.getNodeAs<CallExpr>("spinlock"); 27e4acb971SStephane Moore diag(MatchedExpr->getBeginLoc(), 28e4acb971SStephane Moore "use os_unfair_lock_lock() or dispatch queue APIs instead of the " 29e4acb971SStephane Moore "deprecated OSSpinLock"); 30e4acb971SStephane Moore } 31e4acb971SStephane Moore 32*7d2ea6c4SCarlos Galvez } // namespace clang::tidy::darwin 33