Skip to content

Commit c95f403

Browse files
committed
Define the semantics of registerMemoryBuffer() when insterting duplicates
to let the first module win. This functionality is tested in LLDB.
1 parent 5022da8 commit c95f403

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

include/swift/Serialization/SerializedModuleLoader.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,9 @@ class ImplicitSerializedModuleLoader : public SerializedModuleLoaderBase {
315315
class MemoryBufferSerializedModuleLoader : public SerializedModuleLoaderBase {
316316

317317
struct MemoryBufferInfo {
318+
MemoryBufferInfo(std::unique_ptr<llvm::MemoryBuffer> &&buffer,
319+
llvm::VersionTuple userVersion)
320+
: buffer(std::move(buffer)), userVersion(userVersion) {}
318321
std::unique_ptr<llvm::MemoryBuffer> buffer;
319322
llvm::VersionTuple userVersion;
320323
};
@@ -363,11 +366,16 @@ class MemoryBufferSerializedModuleLoader : public SerializedModuleLoaderBase {
363366
/// discovered in the __swift_ast section of a Mach-O file (or the .swift_ast
364367
/// section of an ELF file) to the search path.
365368
///
369+
/// If a module is inserted twice, the first one wins, and the return value is
370+
/// false.
371+
///
366372
/// FIXME: make this an actual import *path* once submodules are designed.
367-
void registerMemoryBuffer(StringRef importPath,
373+
bool registerMemoryBuffer(StringRef importPath,
368374
std::unique_ptr<llvm::MemoryBuffer> input,
369375
llvm::VersionTuple version) {
370-
MemoryBuffers[importPath] = {std::move(input), version};
376+
return MemoryBuffers
377+
.insert({importPath, MemoryBufferInfo(std::move(input), version)})
378+
.second;
371379
}
372380

373381
void collectVisibleTopLevelModuleNames(

0 commit comments

Comments
 (0)