Add a mechanism to let cross-module-optimization add additional TBD symbols.

PublicCMOSymbols stores symbols which are made public by cross-module-optimizations.
Those symbols are primarily stored in SILModule and eventually used by TBD generation and validation.
This commit is contained in:
Erik Eckstein
2021-12-15 18:42:38 +01:00
parent 31a1c08083
commit c55f040308
13 changed files with 117 additions and 41 deletions

View File

@@ -42,7 +42,7 @@ static std::vector<StringRef> sortSymbols(llvm::StringSet<> &symbols) {
}
bool swift::writeTBD(ModuleDecl *M, StringRef OutputFilename,
const TBDGenOptions &Opts) {
const TBDGenOptions &Opts, TBDSymbolSetPtr publicCMOSymbols) {
std::error_code EC;
llvm::raw_fd_ostream OS(OutputFilename, EC, llvm::sys::fs::OF_None);
if (EC) {
@@ -51,7 +51,7 @@ bool swift::writeTBD(ModuleDecl *M, StringRef OutputFilename,
return true;
}
writeTBDFile(M, OS, Opts);
writeTBDFile(M, OS, Opts, publicCMOSymbols);
return false;
}
@@ -126,8 +126,10 @@ static bool validateSymbols(DiagnosticEngine &diags,
bool swift::validateTBD(ModuleDecl *M,
const llvm::Module &IRModule,
const TBDGenOptions &opts,
TBDSymbolSetPtr publicCMOSymbols,
bool diagnoseExtraSymbolsInTBD) {
auto symbols = getPublicSymbols(TBDGenDescriptor::forModule(M, opts));
auto symbols = getPublicSymbols(TBDGenDescriptor::forModule(M, opts,
publicCMOSymbols));
return validateSymbols(M->getASTContext().Diags, symbols, IRModule,
diagnoseExtraSymbolsInTBD);
}
@@ -135,8 +137,10 @@ bool swift::validateTBD(ModuleDecl *M,
bool swift::validateTBD(FileUnit *file,
const llvm::Module &IRModule,
const TBDGenOptions &opts,
TBDSymbolSetPtr publicCMOSymbols,
bool diagnoseExtraSymbolsInTBD) {
auto symbols = getPublicSymbols(TBDGenDescriptor::forFile(file, opts));
auto symbols = getPublicSymbols(TBDGenDescriptor::forFile(file, opts,
publicCMOSymbols));
return validateSymbols(file->getParentModule()->getASTContext().Diags,
symbols, IRModule, diagnoseExtraSymbolsInTBD);
}