From 2b871e92bb6d15d0138c2c7e49c85d3c440921e7 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Mon, 27 Jul 2026 12:55:04 +0200 Subject: [PATCH] Swift: Recurse calng submodules when computing extension indexes Fixes: https://github.com/github/codeql/issues/22224 --- swift/extractor/mangler/SwiftMangler.cpp | 23 +++++++++++++++-------- swift/extractor/mangler/SwiftMangler.h | 3 +++ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/swift/extractor/mangler/SwiftMangler.cpp b/swift/extractor/mangler/SwiftMangler.cpp index e7dbda6ba914..986cce695103 100644 --- a/swift/extractor/mangler/SwiftMangler.cpp +++ b/swift/extractor/mangler/SwiftMangler.cpp @@ -1,6 +1,5 @@ #include "swift/extractor/mangler/SwiftMangler.h" #include "swift/extractor/infra/SwiftDispatcher.h" -#include "swift/extractor/trap/generated/decl/TrapClasses.h" #include "swift/logging/SwiftLogging.h" #include @@ -170,15 +169,12 @@ void SwiftMangler::indexExtensionsAndFilePrivateValues(llvm::ArrayRefsubmodules()) { + index = indexClangSubmoduleExtensionsAndFilePrivateValues(submodule, moduleLoader, index); if (auto* swiftSubmodule = moduleLoader->getWrapperForModule(submodule)) { llvm::SmallVector children; swiftSubmodule->getTopLevelDecls(children); @@ -191,6 +187,17 @@ void SwiftMangler::indexClangExtensionsAndFilePrivateValues( } } } + return index; +} + +void SwiftMangler::indexClangExtensionsAndFilePrivateValues( + const clang::Module* clangModule, + swift::ClangModuleLoader* moduleLoader) { + if (!moduleLoader) { + return; + } + + indexClangSubmoduleExtensionsAndFilePrivateValues(clangModule, moduleLoader, 0u); } SwiftMangledName SwiftMangler::visitGenericTypeParamDecl(const swift::GenericTypeParamDecl* decl) { diff --git a/swift/extractor/mangler/SwiftMangler.h b/swift/extractor/mangler/SwiftMangler.h index 92175b5887b3..6b835348f14b 100644 --- a/swift/extractor/mangler/SwiftMangler.h +++ b/swift/extractor/mangler/SwiftMangler.h @@ -126,6 +126,9 @@ class SwiftMangler : private swift::TypeVisitor, bool isExtensionOrFilePrivateValue(const swift::Decl* decl); void indexExtensionsAndFilePrivateValues(llvm::ArrayRef siblings); + uint32_t indexClangSubmoduleExtensionsAndFilePrivateValues(const clang::Module* clangModule, + swift::ClangModuleLoader* moduleLoader, + uint32_t index); void indexClangExtensionsAndFilePrivateValues(const clang::Module* clangModule, swift::ClangModuleLoader* moduleLoader); ExtensionOrFilePrivateValueIndex getExtensionOrFilePrivateValueIndex(const swift::Decl* decl,