14#ifndef LLVM_CLANG_SCALABLESTATICANALYSISFRAMEWORK_CORE_WHOLEPROGRAMANALYSIS_WPASUITE_H
15#define LLVM_CLANG_SCALABLESTATICANALYSISFRAMEWORK_CORE_WHOLEPROGRAMANALYSIS_WPASUITE_H
22#include "llvm/Support/Error.h"
43 std::map<AnalysisName, std::unique_ptr<AnalysisResult>> Data;
53 template <
typename ResultT> [[nodiscard]]
bool contains()
const {
54 static_assert(std::is_base_of_v<AnalysisResult, ResultT>,
55 "ResultT must derive from AnalysisResult");
57 "ResultT must have a static analysisName() method");
59 return contains(ResultT::analysisName());
64 return Data.find(Name) != Data.end();
69 template <
typename ResultT>
71 static_assert(std::is_base_of_v<AnalysisResult, ResultT>,
72 "ResultT must derive from AnalysisResult");
74 "ResultT must have a static analysisName() method");
76 auto Result =
get(ResultT::analysisName());
80 return static_cast<const ResultT &
>(*Result);
87 auto It = Data.find(Name);
88 if (It == Data.end()) {
90 "no result for '{0}' in WPASuite", Name)
Orchestrates whole-program analysis over an LUSummary.
Uniquely identifies a whole-program analysis and the AnalysisResult it produces.
Manages entity name interning and provides efficient EntityId handles.
static ErrorBuilder create(std::error_code EC, const char *Fmt, Args &&...ArgVals)
Create an ErrorBuilder with an error code and formatted message.
llvm::Error build() const
Build and return the final error.
const EntityIdTable & idTable() const
Returns the EntityIdTable that maps EntityId values to their symbolic names.
bool contains() const
Returns true if a result for ResultT is present.
friend class SerializationFormat
llvm::Expected< const AnalysisResult & > get(AnalysisName Name) const
Returns a const reference to the result for Name, or an error if absent.
llvm::Expected< const ResultT & > get() const
Returns a const reference to the result for ResultT, or an error if absent.
bool contains(AnalysisName Name) const
Returns true if a result for Name is present.
friend class AnalysisDriver
constexpr bool HasAnalysisName_v
@ Result
The result type of a method or function.