brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · a44ef31 Raw
52 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_BUFFERDEREFCHECK_H10#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MPI_BUFFERDEREFCHECK_H11 12#include "../ClangTidyCheck.h"13#include "clang/StaticAnalyzer/Checkers/MPIFunctionClassifier.h"14#include <optional>15 16namespace clang::tidy::mpi {17 18/// This check verifies if a buffer passed to an MPI (Message Passing Interface)19/// function is sufficiently dereferenced. Buffers should be passed as a single20/// pointer or array. As MPI function signatures specify void * for their buffer21/// types, insufficiently dereferenced buffers can be passed, like for example22/// as double pointers or multidimensional arrays, without a compiler warning23/// emitted.24///25/// For the user-facing documentation see:26/// https://clang.llvm.org/extra/clang-tidy/checks/mpi/buffer-deref.html27class BufferDerefCheck : public ClangTidyCheck {28public:29  BufferDerefCheck(StringRef Name, ClangTidyContext *Context)30      : ClangTidyCheck(Name, Context) {}31  void registerMatchers(ast_matchers::MatchFinder *Finder) override;32  void check(const ast_matchers::MatchFinder::MatchResult &Result) override;33  void onEndOfTranslationUnit() override;34 35private:36  /// Checks for all buffers in an MPI call if they are sufficiently37  /// dereferenced.38  ///39  /// \param BufferTypes buffer types40  /// \param BufferExprs buffer arguments as expressions41  void checkBuffers(ArrayRef<const Type *> BufferTypes,42                    ArrayRef<const Expr *> BufferExprs);43 44  enum class IndirectionType : unsigned char { Pointer, Array };45 46  std::optional<ento::mpi::MPIFunctionClassifier> FuncClassifier;47};48 49} // namespace clang::tidy::mpi50 51#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MPI_BUFFERDEREFCHECK_H52