diff --git a/unified/ql/lib/codeql/unified/internal/StaticNameBinding.qll b/unified/ql/lib/codeql/unified/internal/StaticNameBinding.qll index 6736e52da0bf..9ea85beb6448 100644 --- a/unified/ql/lib/codeql/unified/internal/StaticNameBinding.qll +++ b/unified/ql/lib/codeql/unified/internal/StaticNameBinding.qll @@ -121,6 +121,8 @@ class NameBindingNode extends TNameBindingNode { Identifier getIdentifierFromRef(AstNode n) { result = n.(PotentialLocalNameAccess) or + result = getIdentifierFromRef(n.(GenericTypeExpr).getBase()) + or result = n.(MemberAccessExpr).getMemberNameNode() } diff --git a/unified/ql/test/library-tests/static-name-binding/CONSISTENCY/CfgConsistency.expected b/unified/ql/test/library-tests/static-name-binding/CONSISTENCY/CfgConsistency.expected new file mode 100644 index 000000000000..943f915914c2 --- /dev/null +++ b/unified/ql/test/library-tests/static-name-binding/CONSISTENCY/CfgConsistency.expected @@ -0,0 +1,4 @@ +consistencyOverview +| deadEnd | 1 | +deadEnd +| generics.swift:3:10:3:17 | Entry | diff --git a/unified/ql/test/library-tests/static-name-binding/generics.swift b/unified/ql/test/library-tests/static-name-binding/generics.swift new file mode 100644 index 000000000000..767cd5b2017b --- /dev/null +++ b/unified/ql/test/library-tests/static-name-binding/generics.swift @@ -0,0 +1,9 @@ +enum GenericEnum { + case novalue + case value(T) // $ access=T +} + +func testGenericEnum() { + let intValue = GenericEnum.value(42) // $ access=GenericEnum access=GenericEnum.value + let stringValue = GenericEnum.novalue // $ access=GenericEnum access=String access=GenericEnum.novalue +}