Skip to content

Commit d594de8

Browse files
committed
Swift: Test dataflow on fields a bit more.
1 parent 700f383 commit d594de8

File tree

3 files changed

+126
-0
lines changed

3 files changed

+126
-0
lines changed

swift/ql/test/library-tests/dataflow/dataflow/DataFlow.expected

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ edges
44
| file://:0:0:0:0 | self [v2, some:0] | file://:0:0:0:0 | .v2 [some:0] |
55
| file://:0:0:0:0 | self [v2] | file://:0:0:0:0 | .v2 |
66
| file://:0:0:0:0 | self [v3] | file://:0:0:0:0 | .v3 |
7+
| file://:0:0:0:0 | self [v] | file://:0:0:0:0 | .v |
78
| file://:0:0:0:0 | self [x, some:0] | file://:0:0:0:0 | .x [some:0] |
89
| file://:0:0:0:0 | self [x] | file://:0:0:0:0 | .x |
910
| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [v2] |
1011
| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [v3] |
12+
| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [v] |
1113
| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [x] |
1214
| file://:0:0:0:0 | value [some:0] | file://:0:0:0:0 | [post] self [v2, some:0] |
1315
| file://:0:0:0:0 | value [some:0] | file://:0:0:0:0 | [post] self [x, some:0] |
@@ -404,9 +406,34 @@ edges
404406
| test.swift:756:15:756:19 | .v2 [some:0] | test.swift:756:15:756:21 | ...! |
405407
| test.swift:757:15:757:15 | mo1 [v3] | test.swift:732:9:732:9 | self [v3] |
406408
| test.swift:757:15:757:15 | mo1 [v3] | test.swift:757:15:757:19 | .v3 |
409+
| test.swift:764:8:764:13 | v | test.swift:765:14:765:14 | v |
410+
| test.swift:765:5:765:5 | [post] self [v] | test.swift:764:3:766:3 | self[return] [v] |
411+
| test.swift:765:14:765:14 | v | test.swift:765:5:765:5 | [post] self [v] |
412+
| test.swift:768:8:768:8 | self [v] | test.swift:768:31:768:31 | self [v] |
413+
| test.swift:768:31:768:31 | self [v] | test.swift:768:31:768:31 | .v |
414+
| test.swift:768:31:768:31 | self [v] | test.swift:770:7:770:7 | self [v] |
415+
| test.swift:770:7:770:7 | self [v] | file://:0:0:0:0 | self [v] |
416+
| test.swift:770:7:770:7 | value | file://:0:0:0:0 | value |
417+
| test.swift:774:14:774:25 | call to S3.init(_:) [v] | test.swift:777:15:777:15 | s1 [v] |
418+
| test.swift:774:14:774:25 | call to S3.init(_:) [v] | test.swift:779:15:779:15 | s1 [v] |
419+
| test.swift:774:17:774:24 | call to source() | test.swift:764:8:764:13 | v |
420+
| test.swift:774:17:774:24 | call to source() | test.swift:774:14:774:25 | call to S3.init(_:) [v] |
421+
| test.swift:777:15:777:15 | s1 [v] | test.swift:770:7:770:7 | self [v] |
422+
| test.swift:777:15:777:15 | s1 [v] | test.swift:777:15:777:18 | .v |
423+
| test.swift:779:15:779:15 | s1 [v] | test.swift:768:8:768:8 | self [v] |
424+
| test.swift:779:15:779:15 | s1 [v] | test.swift:779:15:779:23 | call to getv() |
425+
| test.swift:783:5:783:5 | [post] s2 [v] | test.swift:786:15:786:15 | s2 [v] |
426+
| test.swift:783:5:783:5 | [post] s2 [v] | test.swift:788:15:788:15 | s2 [v] |
427+
| test.swift:783:12:783:19 | call to source() | test.swift:770:7:770:7 | value |
428+
| test.swift:783:12:783:19 | call to source() | test.swift:783:5:783:5 | [post] s2 [v] |
429+
| test.swift:786:15:786:15 | s2 [v] | test.swift:770:7:770:7 | self [v] |
430+
| test.swift:786:15:786:15 | s2 [v] | test.swift:786:15:786:18 | .v |
431+
| test.swift:788:15:788:15 | s2 [v] | test.swift:768:8:768:8 | self [v] |
432+
| test.swift:788:15:788:15 | s2 [v] | test.swift:788:15:788:23 | call to getv() |
407433
nodes
408434
| file://:0:0:0:0 | .a [x] | semmle.label | .a [x] |
409435
| file://:0:0:0:0 | .str | semmle.label | .str |
436+
| file://:0:0:0:0 | .v | semmle.label | .v |
410437
| file://:0:0:0:0 | .v2 | semmle.label | .v2 |
411438
| file://:0:0:0:0 | .v2 [some:0] | semmle.label | .v2 [some:0] |
412439
| file://:0:0:0:0 | .v3 | semmle.label | .v3 |
@@ -415,18 +442,21 @@ nodes
415442
| file://:0:0:0:0 | [post] self [v2, some:0] | semmle.label | [post] self [v2, some:0] |
416443
| file://:0:0:0:0 | [post] self [v2] | semmle.label | [post] self [v2] |
417444
| file://:0:0:0:0 | [post] self [v3] | semmle.label | [post] self [v3] |
445+
| file://:0:0:0:0 | [post] self [v] | semmle.label | [post] self [v] |
418446
| file://:0:0:0:0 | [post] self [x, some:0] | semmle.label | [post] self [x, some:0] |
419447
| file://:0:0:0:0 | [post] self [x] | semmle.label | [post] self [x] |
420448
| file://:0:0:0:0 | self [a, x] | semmle.label | self [a, x] |
421449
| file://:0:0:0:0 | self [str] | semmle.label | self [str] |
422450
| file://:0:0:0:0 | self [v2, some:0] | semmle.label | self [v2, some:0] |
423451
| file://:0:0:0:0 | self [v2] | semmle.label | self [v2] |
424452
| file://:0:0:0:0 | self [v3] | semmle.label | self [v3] |
453+
| file://:0:0:0:0 | self [v] | semmle.label | self [v] |
425454
| file://:0:0:0:0 | self [x, some:0] | semmle.label | self [x, some:0] |
426455
| file://:0:0:0:0 | self [x] | semmle.label | self [x] |
427456
| file://:0:0:0:0 | value | semmle.label | value |
428457
| file://:0:0:0:0 | value | semmle.label | value |
429458
| file://:0:0:0:0 | value | semmle.label | value |
459+
| file://:0:0:0:0 | value | semmle.label | value |
430460
| file://:0:0:0:0 | value [some:0] | semmle.label | value [some:0] |
431461
| file://:0:0:0:0 | value [some:0] | semmle.label | value [some:0] |
432462
| test.swift:6:19:6:26 | call to source() | semmle.label | call to source() |
@@ -849,6 +879,27 @@ nodes
849879
| test.swift:756:15:756:21 | ...! | semmle.label | ...! |
850880
| test.swift:757:15:757:15 | mo1 [v3] | semmle.label | mo1 [v3] |
851881
| test.swift:757:15:757:19 | .v3 | semmle.label | .v3 |
882+
| test.swift:764:3:766:3 | self[return] [v] | semmle.label | self[return] [v] |
883+
| test.swift:764:8:764:13 | v | semmle.label | v |
884+
| test.swift:765:5:765:5 | [post] self [v] | semmle.label | [post] self [v] |
885+
| test.swift:765:14:765:14 | v | semmle.label | v |
886+
| test.swift:768:8:768:8 | self [v] | semmle.label | self [v] |
887+
| test.swift:768:31:768:31 | .v | semmle.label | .v |
888+
| test.swift:768:31:768:31 | self [v] | semmle.label | self [v] |
889+
| test.swift:770:7:770:7 | self [v] | semmle.label | self [v] |
890+
| test.swift:770:7:770:7 | value | semmle.label | value |
891+
| test.swift:774:14:774:25 | call to S3.init(_:) [v] | semmle.label | call to S3.init(_:) [v] |
892+
| test.swift:774:17:774:24 | call to source() | semmle.label | call to source() |
893+
| test.swift:777:15:777:15 | s1 [v] | semmle.label | s1 [v] |
894+
| test.swift:777:15:777:18 | .v | semmle.label | .v |
895+
| test.swift:779:15:779:15 | s1 [v] | semmle.label | s1 [v] |
896+
| test.swift:779:15:779:23 | call to getv() | semmle.label | call to getv() |
897+
| test.swift:783:5:783:5 | [post] s2 [v] | semmle.label | [post] s2 [v] |
898+
| test.swift:783:12:783:19 | call to source() | semmle.label | call to source() |
899+
| test.swift:786:15:786:15 | s2 [v] | semmle.label | s2 [v] |
900+
| test.swift:786:15:786:18 | .v | semmle.label | .v |
901+
| test.swift:788:15:788:15 | s2 [v] | semmle.label | s2 [v] |
902+
| test.swift:788:15:788:23 | call to getv() | semmle.label | call to getv() |
852903
subpaths
853904
| test.swift:75:22:75:22 | x | test.swift:65:16:65:28 | arg1 | test.swift:65:1:70:1 | arg2[return] | test.swift:75:32:75:32 | [post] y |
854905
| test.swift:114:19:114:19 | arg | test.swift:109:9:109:14 | arg | test.swift:110:12:110:12 | arg | test.swift:114:12:114:22 | call to ... |
@@ -897,6 +948,13 @@ subpaths
897948
| test.swift:756:15:756:15 | mo1 [v2, some:0] | test.swift:731:9:731:9 | self [v2, some:0] | file://:0:0:0:0 | .v2 [some:0] | test.swift:756:15:756:19 | .v2 [some:0] |
898949
| test.swift:756:15:756:15 | mo1 [v2] | test.swift:731:9:731:9 | self [v2] | file://:0:0:0:0 | .v2 | test.swift:756:15:756:19 | .v2 |
899950
| test.swift:757:15:757:15 | mo1 [v3] | test.swift:732:9:732:9 | self [v3] | file://:0:0:0:0 | .v3 | test.swift:757:15:757:19 | .v3 |
951+
| test.swift:768:31:768:31 | self [v] | test.swift:770:7:770:7 | self [v] | file://:0:0:0:0 | .v | test.swift:768:31:768:31 | .v |
952+
| test.swift:774:17:774:24 | call to source() | test.swift:764:8:764:13 | v | test.swift:764:3:766:3 | self[return] [v] | test.swift:774:14:774:25 | call to S3.init(_:) [v] |
953+
| test.swift:777:15:777:15 | s1 [v] | test.swift:770:7:770:7 | self [v] | file://:0:0:0:0 | .v | test.swift:777:15:777:18 | .v |
954+
| test.swift:779:15:779:15 | s1 [v] | test.swift:768:8:768:8 | self [v] | test.swift:768:31:768:31 | .v | test.swift:779:15:779:23 | call to getv() |
955+
| test.swift:783:12:783:19 | call to source() | test.swift:770:7:770:7 | value | file://:0:0:0:0 | [post] self [v] | test.swift:783:5:783:5 | [post] s2 [v] |
956+
| test.swift:786:15:786:15 | s2 [v] | test.swift:770:7:770:7 | self [v] | file://:0:0:0:0 | .v | test.swift:786:15:786:18 | .v |
957+
| test.swift:788:15:788:15 | s2 [v] | test.swift:768:8:768:8 | self [v] | test.swift:768:31:768:31 | .v | test.swift:788:15:788:23 | call to getv() |
900958
#select
901959
| test.swift:7:15:7:15 | t1 | test.swift:6:19:6:26 | call to source() | test.swift:7:15:7:15 | t1 | result |
902960
| test.swift:9:15:9:15 | t1 | test.swift:6:19:6:26 | call to source() | test.swift:9:15:9:15 | t1 | result |
@@ -996,3 +1054,7 @@ subpaths
9961054
| test.swift:754:15:754:15 | v3 | test.swift:744:10:744:17 | call to source() | test.swift:754:15:754:15 | v3 | result |
9971055
| test.swift:756:15:756:21 | ...! | test.swift:746:14:746:21 | call to source() | test.swift:756:15:756:21 | ...! | result |
9981056
| test.swift:757:15:757:19 | .v3 | test.swift:747:14:747:21 | call to source() | test.swift:757:15:757:19 | .v3 | result |
1057+
| test.swift:777:15:777:18 | .v | test.swift:774:17:774:24 | call to source() | test.swift:777:15:777:18 | .v | result |
1058+
| test.swift:779:15:779:23 | call to getv() | test.swift:774:17:774:24 | call to source() | test.swift:779:15:779:23 | call to getv() | result |
1059+
| test.swift:786:15:786:18 | .v | test.swift:783:12:783:19 | call to source() | test.swift:786:15:786:18 | .v | result |
1060+
| test.swift:788:15:788:23 | call to getv() | test.swift:783:12:783:19 | call to source() | test.swift:788:15:788:23 | call to getv() | result |

swift/ql/test/library-tests/dataflow/dataflow/LocalFlow.expected

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -913,3 +913,39 @@
913913
| test.swift:759:15:759:15 | mo2 | test.swift:760:15:760:15 | mo2 |
914914
| test.swift:759:15:759:20 | .v2 | test.swift:759:15:759:22 | ...! |
915915
| test.swift:760:15:760:15 | mo2 | test.swift:760:15:760:18 | ...! |
916+
| test.swift:764:3:764:3 | SSA def(self) | test.swift:765:5:765:5 | self |
917+
| test.swift:764:3:764:3 | self | test.swift:764:3:764:3 | SSA def(self) |
918+
| test.swift:764:8:764:13 | SSA def(v) | test.swift:765:14:765:14 | v |
919+
| test.swift:764:8:764:13 | v | test.swift:764:8:764:13 | SSA def(v) |
920+
| test.swift:765:5:765:5 | [post] self | test.swift:764:3:766:3 | self[return] |
921+
| test.swift:765:5:765:5 | self | test.swift:764:3:766:3 | self[return] |
922+
| test.swift:768:8:768:8 | SSA def(self) | test.swift:768:31:768:31 | self |
923+
| test.swift:768:8:768:8 | self | test.swift:768:8:768:8 | SSA def(self) |
924+
| test.swift:768:31:768:31 | [post] self | test.swift:768:3:768:33 | self[return] |
925+
| test.swift:768:31:768:31 | self | test.swift:768:3:768:33 | self[return] |
926+
| test.swift:770:7:770:7 | self | test.swift:770:7:770:7 | SSA def(self) |
927+
| test.swift:770:7:770:7 | self | test.swift:770:7:770:7 | SSA def(self) |
928+
| test.swift:770:7:770:7 | self | test.swift:770:7:770:7 | SSA def(self) |
929+
| test.swift:770:7:770:7 | value | test.swift:770:7:770:7 | SSA def(value) |
930+
| test.swift:774:9:774:9 | SSA def(s1) | test.swift:777:15:777:15 | s1 |
931+
| test.swift:774:9:774:9 | s1 | test.swift:774:9:774:9 | SSA def(s1) |
932+
| test.swift:774:14:774:25 | call to S3.init(_:) | test.swift:774:9:774:9 | s1 |
933+
| test.swift:775:9:775:9 | SSA def(s2) | test.swift:778:15:778:15 | s2 |
934+
| test.swift:775:9:775:9 | s2 | test.swift:775:9:775:9 | SSA def(s2) |
935+
| test.swift:775:14:775:18 | call to S3.init(_:) | test.swift:775:9:775:9 | s2 |
936+
| test.swift:777:15:777:15 | [post] s1 | test.swift:779:15:779:15 | s1 |
937+
| test.swift:777:15:777:15 | s1 | test.swift:779:15:779:15 | s1 |
938+
| test.swift:778:15:778:15 | [post] s2 | test.swift:780:15:780:15 | s2 |
939+
| test.swift:778:15:778:15 | s2 | test.swift:780:15:780:15 | s2 |
940+
| test.swift:779:15:779:15 | [post] s1 | test.swift:782:5:782:5 | s1 |
941+
| test.swift:779:15:779:15 | s1 | test.swift:782:5:782:5 | s1 |
942+
| test.swift:780:15:780:15 | [post] s2 | test.swift:783:5:783:5 | s2 |
943+
| test.swift:780:15:780:15 | s2 | test.swift:783:5:783:5 | s2 |
944+
| test.swift:782:5:782:5 | [post] s1 | test.swift:785:15:785:15 | s1 |
945+
| test.swift:782:5:782:5 | s1 | test.swift:785:15:785:15 | s1 |
946+
| test.swift:783:5:783:5 | [post] s2 | test.swift:786:15:786:15 | s2 |
947+
| test.swift:783:5:783:5 | s2 | test.swift:786:15:786:15 | s2 |
948+
| test.swift:785:15:785:15 | [post] s1 | test.swift:787:15:787:15 | s1 |
949+
| test.swift:785:15:785:15 | s1 | test.swift:787:15:787:15 | s1 |
950+
| test.swift:786:15:786:15 | [post] s2 | test.swift:788:15:788:15 | s2 |
951+
| test.swift:786:15:786:15 | s2 | test.swift:788:15:788:15 | s2 |

swift/ql/test/library-tests/dataflow/dataflow/test.swift

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -759,3 +759,31 @@ func testWriteOptional() {
759759
sink(arg: mo2!.v2!) // $ MISSING:flow=749
760760
sink(arg: mo2!.v3) // $ MISSING:flow=750
761761
}
762+
763+
struct S3 {
764+
init(_ v: Int) {
765+
self.v = v
766+
}
767+
768+
func getv() -> Int { return v }
769+
770+
var v: Int
771+
}
772+
773+
func testStruct() {
774+
var s1 = S3(source())
775+
var s2 = S3(0)
776+
777+
sink(arg: s1.v) // $ flow=774
778+
sink(arg: s2.v)
779+
sink(arg: s1.getv()) // $ flow=774
780+
sink(arg: s2.getv())
781+
782+
s1.v = 0
783+
s2.v = source()
784+
785+
sink(arg: s1.v)
786+
sink(arg: s2.v) // $ flow=783
787+
sink(arg: s1.getv())
788+
sink(arg: s2.getv()) // $ flow=783
789+
}

0 commit comments

Comments
 (0)