9#ifndef LLVM_CLANG_INSTALLAPI_DYLIBVERIFIER_H
10#define LLVM_CLANG_INSTALLAPI_DYLIBVERIFIER_H
28using LibAttrs = llvm::StringMap<ArchitectureSet>;
84 : Dylib(
std::move(Dylib)), Reexports(
std::move(Reexports)),
85 Aliases(
std::move(Aliases)), Mode(Mode), Zippered(Zippered),
86 Demangle(Demangle), DSYMPath(DSYMPath),
92 const StringRef SuperClass);
126 bool shouldIgnoreObsolete(
const Record *R, SymbolContext &SymCtx,
131 bool shouldIgnoreReexport(
const Record *R, SymbolContext &SymCtx)
const;
134 bool shouldIgnoreZipperedAvailability(
const Record *R, SymbolContext &SymCtx);
139 bool shouldIgnoreInternalZipperedSymbol(
const Record *R,
140 const SymbolContext &SymCtx)
const;
144 Result compareVisibility(
const Record *R, SymbolContext &SymCtx,
149 bool compareObjCInterfaceSymbols(
const Record *R, SymbolContext &SymCtx,
153 Result compareAvailability(
const Record *R, SymbolContext &SymCtx,
157 bool compareSymbolFlags(
const Record *R, SymbolContext &SymCtx,
161 void updateState(
Result State);
164 void addSymbol(
const Record *R, SymbolContext &SymCtx,
168 void assignSlice(
const Target &
T);
171 void visitSymbolInDylib(
const Record &R, SymbolContext &SymCtx);
176 void visitObjCIVar(
const ObjCIVarRecord &R,
const StringRef Super);
179 std::string getAnnotatedName(
const Record *R, SymbolContext &SymCtx,
180 bool ValidSourceLoc =
true);
186 void accumulateSrcLocForDylibSymbols();
189 llvm::MachO::Records Dylib;
201 bool Zippered =
false;
204 bool Demangle =
false;
210 std::unique_ptr<SymbolSet> Exports = std::make_unique<SymbolSet>();
214 llvm::StringMap<ZipperedDeclSources> DeferredZipperedSymbols;
220 DWARFContext *DWARFCtx =
nullptr;
Defines the Diagnostic-related interfaces.
static DiagnosticBuilder Diag(DiagnosticsEngine *Diags, const LangOptions &Features, FullSourceLoc TokLoc, const char *TokBegin, const char *TokRangeBegin, const char *TokRangeEnd, unsigned DiagID)
Produce a diagnostic highlighting some portion of a literal.
llvm::MachO::ObjCIVarRecord ObjCIVarRecord
llvm::MachO::RecordLoc RecordLoc
llvm::MachO::ObjCCategoryRecord ObjCCategoryRecord
llvm::MachO::GlobalRecord GlobalRecord
llvm::MachO::AliasMap AliasMap
llvm::MachO::RecordsSlice RecordsSlice
llvm::MachO::SymbolSet SymbolSet
llvm::MachO::ObjCInterfaceRecord ObjCInterfaceRecord
llvm::MachO::FileType FileType
llvm::MachO::Target Target
llvm::MachO::RecordsSlice::BinaryAttrs BinaryAttrs
llvm::MachO::Record Record
llvm::MachO::TargetList TargetList
Defines the SourceManager interface.
Concrete class used by the front-end to report problems and issues.
This class handles loading and caching of source files into memory.
Service responsible to tracking state of verification across the lifetime of InstallAPI.
Result verify(GlobalRecord *R, const FrontendAttrs *FA)
Result getState() const
Get result of verification.
void setSourceManager(IntrusiveRefCntPtr< SourceManager > SourceMgr)
Set different source managers to the same diagnostics engine.
std::unique_ptr< SymbolSet > takeExports()
Release ownership over exports.
bool verifyBinaryAttrs(const ArrayRef< Target > ProvidedTargets, const BinaryAttrs &ProvidedBA, const LibAttrs &ProvidedReexports, const LibAttrs &ProvidedClients, const LibAttrs &ProvidedRPaths, const FileType &FT)
Compare and report the attributes represented as load commands in the dylib to the attributes provide...
void setTarget(const Target &T)
Initialize target for verification.
DylibVerifier(llvm::MachO::Records &&Dylib, ReexportedInterfaces &&Reexports, AliasMap Aliases, DiagnosticsEngine *Diag, VerificationMode Mode, bool Zippered, bool Demangle, StringRef DSYMPath)
Result verifyRemainingSymbols()
llvm::StringMap< ArchitectureSet > LibAttrs
std::vector< ZipperedDeclSource > ZipperedDeclSources
VerificationMode
A list of InstallAPI verification modes.
llvm::SmallVector< llvm::MachO::InterfaceFile, 8 > ReexportedInterfaces
The JSON file list parser is used to communicate input to InstallAPI.
const FunctionProtoType * T
Metadata stored about a mapping of a declaration to a symbol.
bool DiscoveredFirstError
VerifierContext(DiagnosticsEngine *Diag)
VerifierContext()=default
void emitDiag(llvm::function_ref< void()> Report, RecordLoc *Loc=nullptr)
RecordsSlice * DylibSlice
llvm::MachO::Target Target
Frontend information captured about records.
clang::SourceManager * SrcMgr