//===- CallDescription.h - function/method call matching --*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // /// \file This file defines a generic mechanism for matching for function and /// method calls of C, C++, and Objective-C languages. Instances of these /// classes are frequently used together with the CallEvent classes. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_CALLDESCRIPTION_H #define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_CALLDESCRIPTION_H #include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/Support/Compiler.h" #include <optional> #include <vector> namespace clang { class IdentifierInfo; } // namespace clang namespace clang { namespace ento { /// A `CallDescription` is a pattern that can be used to _match_ calls /// based on the qualified name and the argument/parameter counts. class CallDescription { … }; /// An immutable map from CallDescriptions to arbitrary data. Provides a unified /// way for checkers to react on function calls. template <typename T> class CallDescriptionMap { … }; /// Enumerators of this enum class are used to construct CallDescription /// objects; in that context the fully qualified name is needlessly verbose. CDM; /// An immutable set of CallDescriptions. /// Checkers can efficiently decide if a given CallEvent matches any /// CallDescription in the set. class CallDescriptionSet { … }; } // namespace ento } // namespace clang #endif // LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_CALLDESCRIPTION_H