26 Object *RootObjectPtr = ExpectedJSON->getAsObject();
46 auto ExpectedTU = readTUSummaryFromObject(*RootObjectPtr);
52 return Artifact{std::move(*ExpectedTU)};
56 auto ExpectedLU = readLUSummaryFromObject(*RootObjectPtr);
62 return Artifact{std::move(*ExpectedLU)};
66 auto ExpectedWPA = readWPASuiteFromObject(*RootObjectPtr);
72 return Artifact{std::move(*ExpectedWPA)};
85 [&](
const auto &S) -> llvm::Error {
86 using T = std::decay_t<
decltype(S)>;
87 if constexpr (std::is_same_v<T, TUSummary>) {
89 }
else if constexpr (std::is_same_v<T, LUSummary>) {
92 static_assert(std::is_same_v<T, WPASuite>,
93 "Artifact visitor must cover all variant alternatives");
109 Object *RootObjectPtr = ExpectedJSON->getAsObject();
110 if (!RootObjectPtr) {
113 "ArtifactEncoding",
"object")
129 auto ExpectedTU = readTUSummaryEncodingFromObject(*RootObjectPtr);
139 auto ExpectedLU = readLUSummaryEncodingFromObject(*RootObjectPtr);
157 llvm::StringRef Path) {
159 [&](
const auto &Enc) -> llvm::Error {
160 using T = std::decay_t<
decltype(Enc)>;
161 if constexpr (std::is_same_v<T, TUSummaryEncoding>) {
165 std::is_same_v<T, LUSummaryEncoding>,
166 "ArtifactEncoding visitor must cover all variant alternatives");
static ErrorBuilder create(std::error_code EC, const char *Fmt, Args &&...ArgVals)
Create an ErrorBuilder with an error code and formatted message.
ErrorBuilder & context(const char *Msg)
Add context information as a plain string.
llvm::Error build() const
Build and return the final error.
static ErrorBuilder wrap(llvm::Error E)
Wrap an existing error and optionally add context.
constexpr const char * ReadingFromFile
constexpr const char * UnknownArtifactEncodingType
constexpr const char * FailedToReadObject
constexpr const char * UnknownArtifactType
constexpr const char * JSONTypeKey
Root-object key naming the summary kind so files are self-describing.
llvm::Expected< llvm::StringRef > readSummaryType(const Object &RootObject)
Reads the JSONTypeKey field from the root object as a string.
constexpr const char * JSONTypeValueWPASuite
Value written to JSONTypeKey for serialized WPASuite files.
constexpr const char * JSONTypeValueTUSummary
Value written to JSONTypeKey for serialized TUSummary files.
constexpr const char * JSONTypeValueLUSummary
Value written to JSONTypeKey for serialized LUSummary files.
std::variant< TUSummaryEncoding, LUSummaryEncoding > ArtifactEncoding
Lazily-deserialized counterpart of Artifact: the same on-disk artifacts but with their per-entity sum...
llvm::Expected< Value > readJSON(llvm::StringRef Path)
std::variant< TUSummary, LUSummary, WPASuite > Artifact
Sum type returned by SerializationFormat::readArtifact, used when the caller does not know up-front w...
llvm::Expected< QualType > ExpectedType