From 14034ae1b25c72c1a625ba4a4caecb6178d0179d Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 30 Oct 2026 17:40:14 +0100 Subject: [PATCH 1/2] Unified: Add static name binding test for nested enum --- unified/ql/test/library-tests/static-name-binding/test.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/unified/ql/test/library-tests/static-name-binding/test.swift b/unified/ql/test/library-tests/static-name-binding/test.swift index 7bf86d93e76e..8a21d7de87c2 100644 --- a/unified/ql/test/library-tests/static-name-binding/test.swift +++ b/unified/ql/test/library-tests/static-name-binding/test.swift @@ -6,12 +6,15 @@ class A { } typealias BAlias = B // $ access=A.B + + enum Enum { case empty } } let x1: B = nil // $ access=top.B let x2: A.B = nil // $ access=A access=A.B let x3: A.B.C = nil // $ access=A access=A.B access=A.B.C let x4: A.BAlias.C = nil // $ access=A access=A.BAlias access=A.B.C +let x5 = A.Enum.empty // $ access=A $ MISSING: access=A.Enum access=A.Enum.empty class D { let x1: B = nil // $ access=top.B From 5a28a4b4b449d1753b12df267dda81d41fd14218 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 30 Oct 2026 17:41:29 +0100 Subject: [PATCH 2/2] Unified: Consider all class-like decls as static members in name binding --- unified/ql/lib/codeql/unified/internal/NameBindingPlugin.qll | 3 ++- unified/ql/test/library-tests/static-name-binding/test.swift | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/unified/ql/lib/codeql/unified/internal/NameBindingPlugin.qll b/unified/ql/lib/codeql/unified/internal/NameBindingPlugin.qll index 2b01d98d28dc..067b60eea683 100644 --- a/unified/ql/lib/codeql/unified/internal/NameBindingPlugin.qll +++ b/unified/ql/lib/codeql/unified/internal/NameBindingPlugin.qll @@ -99,7 +99,8 @@ predicate isStaticMember(Member member) { exists(ClassLikeDeclaration cls | cls.getAMember() = member | not any(NameBindingPlugin p).isInstanceMember(cls, member) or member instanceof ConstructorDeclaration or - member instanceof TypeAliasDeclaration + member instanceof TypeAliasDeclaration or + member instanceof ClassLikeDeclaration ) or member = any(TopLevel t).getBody().getAStmt() diff --git a/unified/ql/test/library-tests/static-name-binding/test.swift b/unified/ql/test/library-tests/static-name-binding/test.swift index 8a21d7de87c2..cfbefe3ac851 100644 --- a/unified/ql/test/library-tests/static-name-binding/test.swift +++ b/unified/ql/test/library-tests/static-name-binding/test.swift @@ -14,7 +14,7 @@ let x1: B = nil // $ access=top.B let x2: A.B = nil // $ access=A access=A.B let x3: A.B.C = nil // $ access=A access=A.B access=A.B.C let x4: A.BAlias.C = nil // $ access=A access=A.BAlias access=A.B.C -let x5 = A.Enum.empty // $ access=A $ MISSING: access=A.Enum access=A.Enum.empty +let x5 = A.Enum.empty // $ access=A access=A.Enum access=A.Enum.empty class D { let x1: B = nil // $ access=top.B