mirror of
https://github.com/github/codeql.git
synced 2026-07-29 23:00:09 +02:00
Swift: Recurse calng submodules when computing extension indexes
Fixes: https://github.com/github/codeql/issues/22224
This commit is contained in:
@@ -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 <swift/AST/Module.h>
|
||||
@@ -170,15 +169,12 @@ void SwiftMangler::indexExtensionsAndFilePrivateValues(llvm::ArrayRef<swift::Dec
|
||||
}
|
||||
}
|
||||
|
||||
void SwiftMangler::indexClangExtensionsAndFilePrivateValues(
|
||||
uint32_t SwiftMangler::indexClangSubmoduleExtensionsAndFilePrivateValues(
|
||||
const clang::Module* clangModule,
|
||||
swift::ClangModuleLoader* moduleLoader) {
|
||||
if (!moduleLoader) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto index = 0u;
|
||||
swift::ClangModuleLoader* moduleLoader,
|
||||
uint32_t index) {
|
||||
for (const auto& submodule : clangModule->submodules()) {
|
||||
index = indexClangSubmoduleExtensionsAndFilePrivateValues(submodule, moduleLoader, index);
|
||||
if (auto* swiftSubmodule = moduleLoader->getWrapperForModule(submodule)) {
|
||||
llvm::SmallVector<swift::Decl*> 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) {
|
||||
|
||||
@@ -126,6 +126,9 @@ class SwiftMangler : private swift::TypeVisitor<SwiftMangler, SwiftMangledName>,
|
||||
|
||||
bool isExtensionOrFilePrivateValue(const swift::Decl* decl);
|
||||
void indexExtensionsAndFilePrivateValues(llvm::ArrayRef<swift::Decl*> 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,
|
||||
|
||||
Reference in New Issue
Block a user