15#include "llvm/Support/Error.h"
16#include "llvm/Support/JSON.h"
21using Array = llvm::json::Array;
22using Object = llvm::json::Object;
27ssaf::buildUnsafeBufferUsageEntitySummary(EntityPointerLevelSet UnsafeBuffers);
29extern llvm::iterator_range<EntityPointerLevelSet::const_iterator>
35 Array UnsafeBuffersData;
37 for (
const auto &EPL : getUnsafeBuffers(SS))
44 const Array *UnsafeBuffersData =
47 if (!UnsafeBuffersData)
51 EntityPointerLevelSet EPLs;
53 for (
const auto &EltData : *UnsafeBuffersData) {
58 return EPL.takeError();
61 return std::make_unique<UnsafeBufferUsageEntitySummary>(
62 buildUnsafeBufferUsageEntitySummary(std::move(EPLs)));
73 UnsafeBufferUsageJSONFormatInfo()
74 : JSONFormat::FormatInfo(UnsafeBufferUsageEntitySummary::summaryName(),
79static llvm::Registry<JSONFormat::FormatInfo>::Add<
80 UnsafeBufferUsageJSONFormatInfo>
83 "JSON Format info for UnsafeBufferUsageEntitySummary");
96 return Object({{
"@", IdToIntFn(Id)}});
100 const auto *Int = O.get(
"@");
102 if (Int && Int->getAsUINT64())
103 return IdFromIntFn(*Int->getAsUINT64());
104 return llvm::createStringError(
"failed to get EntityId from Object");
volatile int UnsafeBufferUsageSSAFJSONFormatAnchorSource
Manages entity name interning and provides efficient EntityId handles.
Lightweight opaque handle representing an entity in an EntityIdTable.
Base class for analysis-specific summary data.
An UnsafeBufferUsageEntitySummary contains a set of EntityPointerLevels extracted from unsafe buffer ...
static constexpr llvm::StringLiteral Name
llvm::json::Value entityPointerLevelToJSON(const EntityPointerLevel &EPL, JSONFormat::EntityIdToJSONFn EntityId2JSON)
llvm::Expected< std::unique_ptr< EntitySummary > > serializeDeserializeRoundTrip(const UnsafeBufferUsageEntitySummary &S, std::function< uint64_t(EntityId)> IdToIntFn, std::function< llvm::Expected< EntityId >(uint64_t)> IdFromIntFn)
llvm::Error makeSawButExpectedError(const JSONTy &Saw, llvm::StringRef Expected, const Ts &...ExpectedArgs)
llvm::json::Object Object
Expected< EntityPointerLevel > entityPointerLevelFromJSON(const llvm::json::Value &EPLData, JSONFormat::EntityIdFromJSONFn EntityIdFromJSON)
The JSON file list parser is used to communicate input to InstallAPI.
int const char * function