mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Swift: Make extractor compile with Swift 6.2
This commit is contained in:
@@ -170,9 +170,7 @@ static std::unordered_set<swift::ModuleDecl*> extractDeclarations(
|
||||
bodyEmissionStrategy);
|
||||
auto topLevelDecls = getTopLevelDecls(module, primaryFile, lazyDeclaration);
|
||||
for (auto decl : topLevelDecls) {
|
||||
if (swift::AvailableAttr::isUnavailable(decl)) {
|
||||
continue;
|
||||
}
|
||||
// TODO: Swift 6.2 is unavailable
|
||||
visitor.extract(decl);
|
||||
}
|
||||
for (auto& comment : comments) {
|
||||
|
||||
@@ -102,8 +102,9 @@ MAP(swift::Expr, ExprTag)
|
||||
MAP(swift::IdentityExpr, IdentityExprTag)
|
||||
MAP(swift::ParenExpr, ParenExprTag)
|
||||
MAP(swift::DotSelfExpr, DotSelfExprTag)
|
||||
MAP(swift::BorrowExpr, BorrowExprTag)
|
||||
MAP(swift::AwaitExpr, AwaitExprTag)
|
||||
MAP(swift::UnsafeExpr, void) // TODO: Swift 6.2
|
||||
MAP(swift::BorrowExpr, BorrowExprTag)
|
||||
MAP(swift::UnresolvedMemberChainResultExpr, UnresolvedMemberChainResultExprTag)
|
||||
MAP(swift::AnyTryExpr, AnyTryExprTag)
|
||||
MAP(swift::TryExpr, TryExprTag)
|
||||
@@ -195,7 +196,6 @@ MAP(swift::Expr, ExprTag)
|
||||
MAP(swift::ObjCSelectorExpr, ObjCSelectorExprTag)
|
||||
MAP(swift::KeyPathExpr, KeyPathExprTag)
|
||||
MAP(swift::KeyPathDotExpr, KeyPathDotExprTag)
|
||||
MAP(swift::OneWayExpr, OneWayExprTag)
|
||||
MAP(swift::TapExpr, TapExprTag)
|
||||
MAP(swift::TypeJoinExpr, void) // does not appear in a visible AST, skipping
|
||||
MAP(swift::MacroExpansionExpr, void) // unexpanded macro in an expr context, skipping
|
||||
@@ -237,11 +237,11 @@ MAP(swift::Decl, DeclTag)
|
||||
MAP(swift::ExtensionDecl, ExtensionDeclTag)
|
||||
MAP(swift::TopLevelCodeDecl, TopLevelCodeDeclTag)
|
||||
MAP(swift::ImportDecl, ImportDeclTag)
|
||||
MAP(swift::PoundDiagnosticDecl, PoundDiagnosticDeclTag)
|
||||
MAP(swift::PrecedenceGroupDecl, PrecedenceGroupDeclTag)
|
||||
MAP(swift::MissingMemberDecl, MissingMemberDeclTag)
|
||||
MAP(swift::PatternBindingDecl, PatternBindingDeclTag)
|
||||
MAP(swift::EnumCaseDecl, EnumCaseDeclTag)
|
||||
MAP(swift::UsingDecl, void) // TODO: Swift 6.2
|
||||
MAP(swift::OperatorDecl, OperatorDeclTag)
|
||||
MAP(swift::InfixOperatorDecl, InfixOperatorDeclTag)
|
||||
MAP(swift::PrefixOperatorDecl, PrefixOperatorDeclTag)
|
||||
@@ -315,7 +315,7 @@ MAP(swift::TypeBase, TypeTag)
|
||||
MAP(swift::PrimaryArchetypeType, PrimaryArchetypeTypeTag)
|
||||
MAP(swift::OpaqueTypeArchetypeType, OpaqueTypeArchetypeTypeTag)
|
||||
MAP(swift::LocalArchetypeType, LocalArchetypeTypeTag)
|
||||
MAP(swift::OpenedArchetypeType, OpenedArchetypeTypeTag)
|
||||
MAP(swift::ExistentialArchetypeType, ExistentialArchetypeTypeTag)
|
||||
MAP(swift::ElementArchetypeType, ElementArchetypeTypeTag)
|
||||
MAP(swift::PackArchetypeType, PackArchetypeTypeTag)
|
||||
MAP(swift::GenericTypeParamType, GenericTypeParamTypeTag)
|
||||
@@ -342,16 +342,16 @@ MAP(swift::TypeBase, TypeTag)
|
||||
MAP(swift::IntegerType, IntegerTypeTag)
|
||||
MAP(swift::SugarType, SugarTypeTag)
|
||||
MAP(swift::TypeAliasType, TypeAliasTypeTag)
|
||||
MAP(swift::LocatableType, void) // TODO: Swift 6.2
|
||||
MAP(swift::SyntaxSugarType, SyntaxSugarTypeTag)
|
||||
MAP(swift::UnarySyntaxSugarType, UnarySyntaxSugarTypeTag)
|
||||
MAP(swift::ArraySliceType, ArraySliceTypeTag)
|
||||
MAP(swift::OptionalType, OptionalTypeTag)
|
||||
MAP(swift::VariadicSequenceType, VariadicSequenceTypeTag)
|
||||
MAP(swift::InlineArrayType, void) // TODO: Swift 6.2
|
||||
MAP(swift::DictionaryType, DictionaryTypeTag)
|
||||
|
||||
MAP(swift::AvailabilitySpec, AvailabilitySpecTag)
|
||||
MAP(swift::PlatformVersionConstraintAvailabilitySpec, PlatformVersionAvailabilitySpecTag)
|
||||
MAP(swift::OtherPlatformAvailabilitySpec, OtherAvailabilitySpecTag)
|
||||
|
||||
MAP(swift::PoundAvailableInfo, AvailabilityInfoTag)
|
||||
MAP(swift::MacroRoleAttr, MacroRoleTag)
|
||||
|
||||
@@ -215,8 +215,8 @@ SwiftMangledName SwiftMangler::visitAnyFunctionType(const swift::AnyFunctionType
|
||||
if (flags.isSending()) {
|
||||
ret << "_sending";
|
||||
}
|
||||
if (flags.isCompileTimeConst()) {
|
||||
ret << "_compiletimeconst";
|
||||
if (flags.isCompileTimeLiteral()) {
|
||||
ret << "_compiletimeliteral";
|
||||
}
|
||||
if (flags.isNoDerivative()) {
|
||||
ret << "_noderivative";
|
||||
@@ -361,7 +361,8 @@ SwiftMangledName SwiftMangler::visitOpaqueTypeArchetypeType(
|
||||
return visitArchetypeType(type) << fetch(type->getDecl());
|
||||
}
|
||||
|
||||
SwiftMangledName SwiftMangler::visitOpenedArchetypeType(const swift::OpenedArchetypeType* type) {
|
||||
SwiftMangledName SwiftMangler::visitExistentialArchetypeType(
|
||||
const swift::ExistentialArchetypeType* type) {
|
||||
auto* env = type->getGenericEnvironment();
|
||||
llvm::SmallVector<char> uuid;
|
||||
env->getOpenedExistentialUUID().toString(uuid);
|
||||
|
||||
@@ -93,7 +93,7 @@ class SwiftMangler : private swift::TypeVisitor<SwiftMangler, SwiftMangledName>,
|
||||
SwiftMangledName visitTypeAliasType(const swift::TypeAliasType* type);
|
||||
SwiftMangledName visitArchetypeType(const swift::ArchetypeType* type);
|
||||
SwiftMangledName visitOpaqueTypeArchetypeType(const swift::OpaqueTypeArchetypeType* type);
|
||||
SwiftMangledName visitOpenedArchetypeType(const swift::OpenedArchetypeType* type);
|
||||
SwiftMangledName visitExistentialArchetypeType(const swift::ExistentialArchetypeType* type);
|
||||
SwiftMangledName visitProtocolCompositionType(const swift::ProtocolCompositionType* type);
|
||||
SwiftMangledName visitLValueType(const swift::LValueType* type);
|
||||
SwiftMangledName visitDynamicSelfType(const swift::DynamicSelfType* type);
|
||||
|
||||
@@ -197,6 +197,18 @@ codeql::Accessor DeclTranslator::translateAccessorDecl(const swift::AccessorDecl
|
||||
case swift::AccessorKind::MutableAddress:
|
||||
entry.is_unsafe_mutable_address = true;
|
||||
break;
|
||||
case swift::AccessorKind::DistributedGet:
|
||||
// TODO: Swift 6.2
|
||||
break;
|
||||
case swift::AccessorKind::Read2:
|
||||
// TODO: Swift 6.2
|
||||
break;
|
||||
case swift::AccessorKind::Modify2:
|
||||
// TODO: Swift 6.2
|
||||
break;
|
||||
case swift::AccessorKind::Init:
|
||||
// TODO: Swift 6.2
|
||||
break;
|
||||
}
|
||||
fillFunction(decl, entry);
|
||||
return entry;
|
||||
@@ -280,9 +292,7 @@ void DeclTranslator::fillTypeDecl(const swift::TypeDecl& decl, codeql::TypeDecl&
|
||||
void DeclTranslator::fillIterableDeclContext(const swift::IterableDeclContext& decl,
|
||||
codeql::Decl& entry) {
|
||||
for (auto member : decl.getMembers()) {
|
||||
if (swift::AvailableAttr::isUnavailable(member)) {
|
||||
continue;
|
||||
}
|
||||
// TODO: Swift 6.2 unavailable members
|
||||
entry.members.emplace_back(dispatcher.fetchLabel(member));
|
||||
}
|
||||
}
|
||||
@@ -342,14 +352,6 @@ codeql::OpaqueTypeDecl DeclTranslator::translateOpaqueTypeDecl(const swift::Opaq
|
||||
return entry;
|
||||
}
|
||||
|
||||
codeql::PoundDiagnosticDecl DeclTranslator::translatePoundDiagnosticDecl(
|
||||
const swift::PoundDiagnosticDecl& decl) {
|
||||
auto entry = createEntry(decl);
|
||||
entry.kind = translateDiagnosticsKind(decl.getKind());
|
||||
entry.message = dispatcher.fetchLabel(decl.getMessage());
|
||||
return entry;
|
||||
}
|
||||
|
||||
codeql::MissingMemberDecl DeclTranslator::translateMissingMemberDecl(
|
||||
const swift::MissingMemberDecl& decl) {
|
||||
auto entry = createEntry(decl);
|
||||
|
||||
@@ -45,7 +45,6 @@ class DeclTranslator : public AstTranslatorBase<DeclTranslator> {
|
||||
codeql::ImportDecl translateImportDecl(const swift::ImportDecl& decl);
|
||||
codeql::ModuleDecl translateModuleDecl(const swift::ModuleDecl& decl);
|
||||
codeql::OpaqueTypeDecl translateOpaqueTypeDecl(const swift::OpaqueTypeDecl& decl);
|
||||
codeql::PoundDiagnosticDecl translatePoundDiagnosticDecl(const swift::PoundDiagnosticDecl& decl);
|
||||
codeql::MissingMemberDecl translateMissingMemberDecl(const swift::MissingMemberDecl& decl);
|
||||
codeql::CapturedDecl translateCapturedValue(const swift::CapturedValue& capture);
|
||||
codeql::MacroDecl translateMacroDecl(const swift::MacroDecl& decl);
|
||||
|
||||
@@ -185,12 +185,6 @@ codeql::ObjCSelectorExpr ExprTranslator::translateObjCSelectorExpr(
|
||||
return entry;
|
||||
}
|
||||
|
||||
codeql::OneWayExpr ExprTranslator::translateOneWayExpr(const swift::OneWayExpr& expr) {
|
||||
auto entry = createExprEntry(expr);
|
||||
entry.sub_expr = dispatcher.fetchLabel(expr.getSubExpr());
|
||||
return entry;
|
||||
}
|
||||
|
||||
codeql::OpenExistentialExpr ExprTranslator::translateOpenExistentialExpr(
|
||||
const swift::OpenExistentialExpr& expr) {
|
||||
auto entry = createExprEntry(expr);
|
||||
@@ -498,7 +492,7 @@ TrapLabel<KeyPathComponentTag> ExprTranslator::emitKeyPathComponent(
|
||||
const swift::KeyPathExpr::Component& component) {
|
||||
auto entry = dispatcher.createUncachedEntry(component);
|
||||
entry.kind = static_cast<int>(component.getKind());
|
||||
if (auto subscript_args = component.getSubscriptArgs()) {
|
||||
if (auto subscript_args = component.getArgs()) {
|
||||
for (const auto& arg : *subscript_args) {
|
||||
entry.subscript_arguments.push_back(emitArgument(arg));
|
||||
}
|
||||
@@ -691,8 +685,8 @@ codeql::CurrentContextIsolationExpr ExprTranslator::translateCurrentContextIsola
|
||||
|
||||
codeql::TypeValueExpr ExprTranslator::translateTypeValueExpr(const swift::TypeValueExpr& expr) {
|
||||
auto entry = createExprEntry(expr);
|
||||
if (expr.getParamTypeRepr() && expr.getParamType()) {
|
||||
entry.type_repr = dispatcher.fetchLabel(expr.getParamTypeRepr(), expr.getParamType());
|
||||
if (expr.getRepr() && expr.getParamType()) {
|
||||
entry.type_repr = dispatcher.fetchLabel(expr.getRepr(), expr.getParamType());
|
||||
}
|
||||
return entry;
|
||||
}
|
||||
|
||||
@@ -37,7 +37,6 @@ class ExprTranslator : public AstTranslatorBase<ExprTranslator> {
|
||||
codeql::MakeTemporarilyEscapableExpr translateMakeTemporarilyEscapableExpr(
|
||||
const swift::MakeTemporarilyEscapableExpr& expr);
|
||||
codeql::ObjCSelectorExpr translateObjCSelectorExpr(const swift::ObjCSelectorExpr& expr);
|
||||
codeql::OneWayExpr translateOneWayExpr(const swift::OneWayExpr& expr);
|
||||
codeql::OpenExistentialExpr translateOpenExistentialExpr(const swift::OpenExistentialExpr& expr);
|
||||
codeql::OptionalEvaluationExpr translateOptionalEvaluationExpr(
|
||||
const swift::OptionalEvaluationExpr& expr);
|
||||
|
||||
@@ -36,23 +36,9 @@ void StmtTranslator::translateAndEmit(const swift::PoundAvailableInfo& availabil
|
||||
}
|
||||
|
||||
void StmtTranslator::translateAndEmit(const swift::AvailabilitySpec& spec) {
|
||||
if (llvm::isa<swift::PlatformVersionConstraintAvailabilitySpec>(spec)) {
|
||||
translateAndEmit(llvm::cast<swift::PlatformVersionConstraintAvailabilitySpec>(spec));
|
||||
} else if (llvm::isa<swift::OtherPlatformAvailabilitySpec>(spec)) {
|
||||
translateAndEmit(llvm::cast<swift::OtherPlatformAvailabilitySpec>(spec));
|
||||
}
|
||||
}
|
||||
|
||||
void StmtTranslator::translateAndEmit(
|
||||
const swift::PlatformVersionConstraintAvailabilitySpec& spec) {
|
||||
auto entry = dispatcher.createEntry(spec);
|
||||
entry.platform = swift::platformString(spec.getPlatform()).str();
|
||||
entry.version = spec.getVersion().getAsString();
|
||||
dispatcher.emit(entry);
|
||||
}
|
||||
|
||||
void StmtTranslator::translateAndEmit(const swift::OtherPlatformAvailabilitySpec& spec) {
|
||||
dispatcher.emit(dispatcher.createEntry(spec));
|
||||
// auto entry = dispatcher.createEntry(spec);
|
||||
// TODO: Swift 6.2 platform version/wildcard
|
||||
// dispatcher.emit(entry);
|
||||
}
|
||||
|
||||
codeql::BraceStmt StmtTranslator::translateBraceStmt(const swift::BraceStmt& stmt) {
|
||||
|
||||
@@ -17,8 +17,6 @@ class StmtTranslator : public AstTranslatorBase<StmtTranslator> {
|
||||
void translateAndEmit(const swift::CaseLabelItem& labelItem);
|
||||
void translateAndEmit(const swift::PoundAvailableInfo& availability);
|
||||
void translateAndEmit(const swift::AvailabilitySpec& spec);
|
||||
void translateAndEmit(const swift::PlatformVersionConstraintAvailabilitySpec& spec);
|
||||
void translateAndEmit(const swift::OtherPlatformAvailabilitySpec& spec);
|
||||
|
||||
codeql::BraceStmt translateBraceStmt(const swift::BraceStmt& stmt);
|
||||
codeql::ReturnStmt translateReturnStmt(const swift::ReturnStmt& stmt);
|
||||
|
||||
@@ -225,8 +225,8 @@ codeql::BuiltinIntegerType TypeTranslator::translateBuiltinIntegerType(
|
||||
return entry;
|
||||
}
|
||||
|
||||
codeql::OpenedArchetypeType TypeTranslator::translateOpenedArchetypeType(
|
||||
const swift::OpenedArchetypeType& type) {
|
||||
codeql::ExistentialArchetypeType TypeTranslator::translateExistentialArchetypeType(
|
||||
const swift::ExistentialArchetypeType& type) {
|
||||
auto entry = createTypeEntry(type);
|
||||
fillArchetypeType(type, entry);
|
||||
return entry;
|
||||
|
||||
@@ -68,7 +68,8 @@ class TypeTranslator : public TypeTranslatorBase<TypeTranslator> {
|
||||
codeql::BuiltinIntegerLiteralType translateBuiltinIntegerLiteralType(
|
||||
const swift::BuiltinIntegerLiteralType& type);
|
||||
codeql::BuiltinIntegerType translateBuiltinIntegerType(const swift::BuiltinIntegerType& type);
|
||||
codeql::OpenedArchetypeType translateOpenedArchetypeType(const swift::OpenedArchetypeType& type);
|
||||
codeql::ExistentialArchetypeType translateExistentialArchetypeType(
|
||||
const swift::ExistentialArchetypeType& type);
|
||||
codeql::ModuleType translateModuleType(const swift::ModuleType& type);
|
||||
codeql::OpaqueTypeArchetypeType translateOpaqueTypeArchetypeType(
|
||||
const swift::OpaqueTypeArchetypeType& type);
|
||||
|
||||
@@ -1211,7 +1211,7 @@ class PrimaryArchetypeType(ArchetypeType):
|
||||
class LocalArchetypeType(ArchetypeType):
|
||||
pass
|
||||
|
||||
class OpenedArchetypeType(LocalArchetypeType):
|
||||
class ExistentialArchetypeType(LocalArchetypeType):
|
||||
pass
|
||||
|
||||
@qltest.test_with("PackType")
|
||||
|
||||
4
swift/third_party/load.bzl
vendored
4
swift/third_party/load.bzl
vendored
@@ -5,6 +5,10 @@ load("//misc/bazel:lfs.bzl", "lfs_archive", "lfs_files")
|
||||
|
||||
_override = {
|
||||
# these are used to test new artifacts. Must be empty before merging to main
|
||||
"swift-prebuilt-macOS-swift-6.2-RELEASE-112.tar.zst": "0b2ccdd5a93bd0336866f85596987ee4274eaef3425ff95395e2aa8bec49a19e",
|
||||
"swift-prebuilt-Linux-swift-6.2-RELEASE-112.tar.zst": "845dd07a3f04adc44ed83ec33ae2bc58a99c4d8f5fc6b8549c3adae91e2b03ff",
|
||||
"resource-dir-macOS-swift-6.2-RELEASE-118.zip": "258a766c51fcce31839c4f6ff823ef9909350e00c62c78de4c75d58ede3b45da",
|
||||
"resource-dir-Linux-swift-6.2-RELEASE-118.zip": "d58eaae17536e26586df9aa8333637859d3b79daf2c3694cd75aad94d8fcce8e",
|
||||
}
|
||||
|
||||
_staging_url = "https://github.com/dsp-testing/codeql-swift-artifacts/releases/download/staging-{}/{}"
|
||||
|
||||
Reference in New Issue
Block a user