From addff767a61e813c3327e5456e9ec42d0c5bc793 Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Wed, 12 Nov 2025 17:24:36 -0800 Subject: [PATCH] [LLDB] Add an API for unregistering MemoryBuffer modules (NFC) --- .../swift/Serialization/SerializedModuleLoader.h | 13 ++++++++----- lib/Serialization/SerializedModuleLoader.cpp | 13 +++++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/include/swift/Serialization/SerializedModuleLoader.h b/include/swift/Serialization/SerializedModuleLoader.h index 5e1231640c8..184ae27e2ba 100644 --- a/include/swift/Serialization/SerializedModuleLoader.h +++ b/include/swift/Serialization/SerializedModuleLoader.h @@ -373,11 +373,14 @@ public: /// FIXME: make this an actual import *path* once submodules are designed. bool registerMemoryBuffer(StringRef importPath, std::unique_ptr input, - llvm::VersionTuple version) { - return MemoryBuffers - .insert({importPath, MemoryBufferInfo(std::move(input), version)}) - .second; - } + llvm::VersionTuple version); + + /// During the transtion to explicitly tracked module dependencies LLDB may + /// instruct this loader to forget one of the (now redundant) MemoryBuffers + /// because it found an explicit module file on disk. + /// + /// \return true if the importPath existed. + bool unregisterMemoryBuffer(StringRef importPath); void collectVisibleTopLevelModuleNames( SmallVectorImpl &names) const override {} diff --git a/lib/Serialization/SerializedModuleLoader.cpp b/lib/Serialization/SerializedModuleLoader.cpp index 31753a574d8..a49d08c04d1 100644 --- a/lib/Serialization/SerializedModuleLoader.cpp +++ b/lib/Serialization/SerializedModuleLoader.cpp @@ -1708,6 +1708,19 @@ MemoryBufferSerializedModuleLoader::loadModule(SourceLoc importLoc, return M; } +bool MemoryBufferSerializedModuleLoader::registerMemoryBuffer( + StringRef importPath, std::unique_ptr input, + llvm::VersionTuple version) { + return MemoryBuffers + .insert({importPath, MemoryBufferInfo(std::move(input), version)}) + .second; +} + +bool MemoryBufferSerializedModuleLoader::unregisterMemoryBuffer( + StringRef importPath) { + return MemoryBuffers.erase(importPath); +} + void SerializedModuleLoaderBase::loadExtensions(NominalTypeDecl *nominal, unsigned previousGeneration) { for (auto &modulePair : LoadedModuleFiles) {