clang 23.0.0git
SerializationFormat.h
Go to the documentation of this file.
1//===- SerializationFormat.h ------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// Abstract SerializationFormat interface for reading and writing
10// TUSummary and LinkUnitResolution data.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_CLANG_SCALABLESTATICANALYSISFRAMEWORK_CORE_SERIALIZATION_SERIALIZATIONFORMAT_H
15#define LLVM_CLANG_SCALABLESTATICANALYSISFRAMEWORK_CORE_SERIALIZATION_SERIALIZATIONFORMAT_H
16
23#include "llvm/ADT/STLFunctionalExtras.h"
24#include "llvm/ADT/StringRef.h"
25#include "llvm/Support/Error.h"
26
27namespace clang::ssaf {
28
29/// Abstract base class for serialization formats.
31public:
32 virtual ~SerializationFormat() = default;
33
34 virtual llvm::Expected<TUSummary> readTUSummary(llvm::StringRef Path) = 0;
35
36 virtual llvm::Error writeTUSummary(const TUSummary &Summary,
37 llvm::StringRef Path) = 0;
38
40 readTUSummaryEncoding(llvm::StringRef Path) = 0;
41
42 virtual llvm::Error
44 llvm::StringRef Path) = 0;
45
46 virtual llvm::Expected<LUSummary> readLUSummary(llvm::StringRef Path) = 0;
47
48 virtual llvm::Error writeLUSummary(const LUSummary &Summary,
49 llvm::StringRef Path) = 0;
50
52 readLUSummaryEncoding(llvm::StringRef Path) = 0;
53
54 virtual llvm::Error
56 llvm::StringRef Path) = 0;
57
58 /// Invokes \p Callback once for each analysis that has registered
59 /// serialization support for this format.
61 llvm::function_ref<void(llvm::StringRef Name, llvm::StringRef Desc)>
62 Callback) const = 0;
63
64protected:
65 // Helpers providing access to implementation details of basic data structures
66 // for efficient serialization/deserialization.
67
68 static EntityId makeEntityId(const size_t Index) { return EntityId(Index); }
69
70#define FIELD(CLASS, FIELD_NAME) \
71 static const auto &get##FIELD_NAME(const CLASS &X) { return X.FIELD_NAME; } \
72 static auto &get##FIELD_NAME(CLASS &X) { return X.FIELD_NAME; }
73#include "clang/ScalableStaticAnalysisFramework/Core/Model/PrivateFieldNames.def"
74};
75
76template <class SerializerFn, class DeserializerFn> struct FormatInfoEntry {
81 virtual ~FormatInfoEntry() = default;
82
84 SerializerFn Serialize;
85 DeserializerFn Deserialize;
86};
87
88} // namespace clang::ssaf
89
90#endif // LLVM_CLANG_SCALABLESTATICANALYSISFRAMEWORK_CORE_SERIALIZATION_SERIALIZATIONFORMAT_H
Lightweight opaque handle representing an entity in an EntityIdTable.
Definition EntityId.h:31
Represents a link unit summary in its serialized encoding.
Represents a link unit (LU) summary containing merged entity summaries.
Definition LUSummary.h:33
Abstract base class for serialization formats.
virtual llvm::Error writeLUSummary(const LUSummary &Summary, llvm::StringRef Path)=0
virtual llvm::Expected< LUSummary > readLUSummary(llvm::StringRef Path)=0
static EntityId makeEntityId(const size_t Index)
virtual llvm::Expected< LUSummaryEncoding > readLUSummaryEncoding(llvm::StringRef Path)=0
virtual llvm::Error writeTUSummary(const TUSummary &Summary, llvm::StringRef Path)=0
virtual void forEachRegisteredAnalysis(llvm::function_ref< void(llvm::StringRef Name, llvm::StringRef Desc)> Callback) const =0
Invokes Callback once for each analysis that has registered serialization support for this format.
virtual ~SerializationFormat()=default
virtual llvm::Expected< TUSummaryEncoding > readTUSummaryEncoding(llvm::StringRef Path)=0
virtual llvm::Error writeLUSummaryEncoding(const LUSummaryEncoding &SummaryEncoding, llvm::StringRef Path)=0
virtual llvm::Expected< TUSummary > readTUSummary(llvm::StringRef Path)=0
virtual llvm::Error writeTUSummaryEncoding(const TUSummaryEncoding &SummaryEncoding, llvm::StringRef Path)=0
Uniquely identifies an analysis summary.
Definition SummaryName.h:22
Represents a translation unit summary in its serialized encoding.
Data extracted for a given translation unit and for a given set of analyses.
Definition TUSummary.h:24
FormatInfoEntry(SummaryName ForSummary, SerializerFn Serialize, DeserializerFn Deserialize)
virtual ~FormatInfoEntry()=default