Avoid loading serialized extensions for nominals in SourceFile

Looking up serialized extensions for a nested nominal type requires
computing its mangled name, which may kick semantic requests. Ensure
we don't do this for nominals in parsed SourceFiles such that we
don't end up kicking this during extension binding.
This commit is contained in:
Hamish Knight
2026-01-05 23:20:21 +00:00
parent 5d7ece7b7f
commit 4e950e3591
6 changed files with 51 additions and 4 deletions

View File

@@ -1723,6 +1723,13 @@ bool MemoryBufferSerializedModuleLoader::unregisterMemoryBuffer(
void SerializedModuleLoaderBase::loadExtensions(NominalTypeDecl *nominal,
unsigned previousGeneration) {
// Nominals in parsed SourceFiles can't have extensions provided by imported
// serialized modules. This is necessary to avoid triggering semantic requests
// from extension binding since looking up extensions may need to compute the
// mangled name.
if (nominal->getParentSourceFile())
return;
for (auto &modulePair : LoadedModuleFiles) {
if (modulePair.second <= previousGeneration)
continue;