53 lines · c
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#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MPI_TYPEMISMATCHCHECK_H10#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MPI_TYPEMISMATCHCHECK_H11 12#include "../ClangTidyCheck.h"13#include "clang/ASTMatchers/ASTMatchFinder.h"14#include "clang/StaticAnalyzer/Checkers/MPIFunctionClassifier.h"15#include <optional>16 17namespace clang::tidy::mpi {18 19/// This check verifies if buffer type and MPI (Message Passing Interface)20/// datatype pairs match. All MPI datatypes defined by the MPI standard (3.1)21/// are verified by this check. User defined typedefs, custom MPI datatypes and22/// null pointer constants are skipped, in the course of verification.23///24/// For the user-facing documentation see:25/// https://clang.llvm.org/extra/clang-tidy/checks/mpi/type-mismatch.html26class TypeMismatchCheck : public ClangTidyCheck {27public:28 TypeMismatchCheck(StringRef Name, ClangTidyContext *Context)29 : ClangTidyCheck(Name, Context) {}30 31 void registerMatchers(ast_matchers::MatchFinder *Finder) override;32 void check(const ast_matchers::MatchFinder::MatchResult &Result) override;33 34 void onEndOfTranslationUnit() override;35 36private:37 /// Check if the buffer type MPI datatype pairs match.38 ///39 /// \param BufferTypes buffer types40 /// \param BufferExprs buffer arguments as expressions41 /// \param MPIDatatypes MPI datatype42 /// \param LO language options43 void checkArguments(ArrayRef<const Type *> BufferTypes,44 ArrayRef<const Expr *> BufferExprs,45 ArrayRef<StringRef> MPIDatatypes, const LangOptions &LO);46 47 std::optional<ento::mpi::MPIFunctionClassifier> FuncClassifier;48};49 50} // namespace clang::tidy::mpi51 52#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MPI_TYPEMISMATCHCHECK_H53