Skip to content

Commit 09ddd29

Browse files
authored
Merge pull request #32470 from akyrtzi/refactor-modulefile
[Serialization] Refactor subset of `ModuleFile` into `ModuleFileCore`
2 parents 74f2878 + 99c2914 commit 09ddd29

13 files changed

+2780
-2332
lines changed

include/swift/Serialization/SerializedModuleLoader.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class SerializedModuleLoaderBase : public ModuleLoader {
5858
using LoadedModulePair = std::pair<std::unique_ptr<ModuleFile>, unsigned>;
5959
std::vector<LoadedModulePair> LoadedModuleFiles;
6060

61-
SmallVector<std::unique_ptr<llvm::MemoryBuffer>, 2> OrphanedMemoryBuffers;
61+
SmallVector<std::unique_ptr<ModuleFile>, 2> OrphanedModuleFiles;
6262

6363
protected:
6464
ASTContext &Ctx;

include/swift/Strings.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ constexpr static const StringLiteral SWIFT_ONONE_SUPPORT = "SwiftOnoneSupport";
2626
constexpr static const StringLiteral SWIFT_SHIMS_NAME = "SwiftShims";
2727
/// The name of the Builtin module, which contains Builtin functions.
2828
constexpr static const StringLiteral BUILTIN_NAME = "Builtin";
29+
/// The name of the clang imported header module.
30+
constexpr static const StringLiteral CLANG_HEADER_MODULE_NAME = "__ObjC";
2931
/// The prefix of module names used by LLDB to capture Swift expressions
3032
constexpr static const StringLiteral LLDB_EXPRESSIONS_MODULE_NAME_PREFIX =
3133
"__lldb_expr_";

lib/ClangImporter/ClangImporter.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
#include "swift/Config.h"
4141
#include "swift/Parse/Lexer.h"
4242
#include "swift/Parse/Parser.h"
43+
#include "swift/Strings.h"
4344
#include "swift/Subsystems.h"
4445
#include "clang/AST/ASTContext.h"
4546
#include "clang/AST/Mangle.h"
@@ -1196,7 +1197,8 @@ ClangImporter::create(ASTContext &ctx, const ClangImporterOptions &importerOpts,
11961197
= clangContext.Selectors.getSelector(2, setObjectForKeyedSubscriptIdents);
11971198

11981199
// Set up the imported header module.
1199-
auto *importedHeaderModule = ModuleDecl::create(ctx.getIdentifier("__ObjC"), ctx);
1200+
auto *importedHeaderModule =
1201+
ModuleDecl::create(ctx.getIdentifier(CLANG_HEADER_MODULE_NAME), ctx);
12001202
importer->Impl.ImportedHeaderUnit =
12011203
new (ctx) ClangModuleUnit(*importedHeaderModule, importer->Impl, nullptr);
12021204
importedHeaderModule->addFile(*importer->Impl.ImportedHeaderUnit);

lib/Serialization/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ add_swift_host_library(swiftSerialization STATIC
33
DeserializeSIL.cpp
44
ModuleDependencyScanner.cpp
55
ModuleFile.cpp
6+
ModuleFileSharedCore.cpp
67
Serialization.cpp
78
SerializedModuleLoader.cpp
89
SerializedSILLoader.cpp

lib/Serialization/Deserialization.cpp

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ using namespace swift::serialization;
5656
using llvm::Expected;
5757

5858
StringRef swift::getNameOfModule(const ModuleFile *MF) {
59-
return MF->Name;
59+
return MF->getName();
6060
}
6161

6262
namespace {
@@ -166,33 +166,30 @@ static void skipRecord(llvm::BitstreamCursor &cursor, unsigned recordKind) {
166166

167167
void ModuleFile::fatal(llvm::Error error) {
168168
if (FileContext) {
169-
getContext().Diags.diagnose(SourceLoc(), diag::serialization_fatal, Name);
169+
getContext().Diags.diagnose(SourceLoc(), diag::serialization_fatal, Core->Name);
170170
getContext().Diags.diagnose(SourceLoc(), diag::serialization_misc_version,
171-
Name, MiscVersion);
171+
Core->Name, Core->MiscVersion);
172172

173-
if (!CompatibilityVersion.empty()) {
173+
if (!Core->CompatibilityVersion.empty()) {
174174
if (getContext().LangOpts.EffectiveLanguageVersion
175-
!= CompatibilityVersion) {
175+
!= Core->CompatibilityVersion) {
176176
SmallString<16> effectiveVersionBuffer, compatVersionBuffer;
177177
{
178178
llvm::raw_svector_ostream out(effectiveVersionBuffer);
179179
out << getContext().LangOpts.EffectiveLanguageVersion;
180180
}
181181
{
182182
llvm::raw_svector_ostream out(compatVersionBuffer);
183-
out << CompatibilityVersion;
183+
out << Core->CompatibilityVersion;
184184
}
185185
getContext().Diags.diagnose(
186186
SourceLoc(), diag::serialization_compatibility_version_mismatch,
187-
effectiveVersionBuffer, Name, compatVersionBuffer);
187+
effectiveVersionBuffer, Core->Name, compatVersionBuffer);
188188
}
189189
}
190190
}
191191

192-
logAllUnhandledErrors(std::move(error), llvm::errs(),
193-
"\n*** DESERIALIZATION FAILURE (please include this "
194-
"section in any bug report) ***\n");
195-
abort();
192+
ModuleFileSharedCore::fatal(std::move(error));
196193
}
197194

198195
static Optional<swift::AccessorKind>
@@ -1871,13 +1868,7 @@ StringRef ModuleFile::getIdentifierText(IdentifierID IID) {
18711868
if (!identRecord.Ident.empty())
18721869
return identRecord.Ident.str();
18731870

1874-
assert(!IdentifierData.empty() && "no identifier data in module");
1875-
1876-
StringRef rawStrPtr = IdentifierData.substr(identRecord.Offset);
1877-
size_t terminatorOffset = rawStrPtr.find('\0');
1878-
assert(terminatorOffset != StringRef::npos &&
1879-
"unterminated identifier string data");
1880-
return rawStrPtr.slice(0, terminatorOffset);
1871+
return Core->getIdentifierText(IID);
18811872
}
18821873

18831874
DeclContext *ModuleFile::getLocalDeclContext(LocalDeclContextID DCID) {

lib/Serialization/DeserializationErrors.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@
2121

2222
namespace swift {
2323
class ModuleFile;
24+
class ModuleFileSharedCore;
2425

2526
StringRef getNameOfModule(const ModuleFile *);
27+
StringRef getNameOfModule(const ModuleFileSharedCore *);
2628

2729
namespace serialization {
2830

@@ -456,6 +458,17 @@ class PrettyStackTraceModuleFile : public llvm::PrettyStackTraceEntry {
456458
}
457459
};
458460

461+
class PrettyStackTraceModuleFileCore : public llvm::PrettyStackTraceEntry {
462+
const ModuleFileSharedCore &MF;
463+
public:
464+
explicit PrettyStackTraceModuleFileCore(ModuleFileSharedCore &module)
465+
: MF(module) {}
466+
467+
void print(raw_ostream &os) const override {
468+
os << "While reading from \'" << getNameOfModule(&MF) << "'\n";
469+
}
470+
};
471+
459472
} // end namespace serialization
460473
} // end namespace swift
461474

lib/Serialization/DeserializeSIL.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,7 @@ SILDeserializer::readSILFunctionChecked(DeclID FID, SILFunction *existingFn,
666666
// Mark this function as deserialized. This avoids rerunning diagnostic
667667
// passes. Certain passes in the madatory pipeline may not work as expected
668668
// after arbitrary optimization and lowering.
669-
if (!MF->IsSIB)
669+
if (!MF->isSIB())
670670
fn->setWasDeserializedCanonical();
671671

672672
fn->setBare(IsBare);

0 commit comments

Comments
 (0)