22#include "llvm/Support/Error.h"
23#include "llvm/Support/JSON.h"
31json::Object serializeUnsafeBufferUsageAnalysisResult(
42deserializeUnsafeBufferUsageAnalysisResult(
44 const json::Array *Content =
54 return UnsafeBuffers.takeError();
56 auto Ret = std::make_unique<UnsafeBufferUsageAnalysisResult>();
58 Ret->UnsafeBuffers = std::move(*UnsafeBuffers);
62JSONFormat::AnalysisResultRegistry::Add<UnsafeBufferUsageAnalysisResult>
63 RegisterUnsafeBufferUsageResultForJSON(
64 serializeUnsafeBufferUsageAnalysisResult,
65 deserializeUnsafeBufferUsageAnalysisResult);
67class UnsafeBufferUsageAnalysis final
69 UnsafeBufferUsageEntitySummary> {
71 llvm::Error add(EntityId Id,
72 const UnsafeBufferUsageEntitySummary &Summary)
override {
73 auto UnsafeBuffersOfEntity = getUnsafeBuffers(Summary);
75 getResult().UnsafeBuffers[Id] = EntityPointerLevelSet(
76 UnsafeBuffersOfEntity.begin(), UnsafeBuffersOfEntity.end());
77 return llvm::Error::success();
82 RegisterUnsafeBufferUsageAnalysis(
83 "Whole-program unsafe buffer usage analysis");
Result
Implement __builtin_bit_cast and related operations.
volatile int UnsafeBufferUsageAnalysisAnchorSource
Typed intermediate that concrete summary analyses inherit from.
PRESERVE_NONE bool Ret(InterpState &S, CodePtr &PC)
Expected< std::map< EntityId, EntityPointerLevelSet > > entityPointerLevelMapFromJSON(const llvm::json::Array &Content, JSONFormat::EntityIdFromJSONFn IdFromJSON)
Deserialize a flat array of alternating [EntityId, EntityPointerLevelSet, ...] pairs into a map.
llvm::Error makeSawButExpectedError(const JSONTy &Saw, llvm::StringRef Expected, const Ts &...ExpectedArgs)
constexpr llvm::StringLiteral UnsafeBufferUsageAnalysisResultName
llvm::json::Array entityPointerLevelMapToJSON(const std::map< EntityId, EntityPointerLevelSet > &Map, JSONFormat::EntityIdToJSONFn IdToJSON)
Serialize a map<EntityId, EntityPointerLevelSet> as a flat array of alternating [EntityId,...
Diagnostic wrappers for TextAPI types for error reporting.
Registers AnalysisT with the unified registry.