Skip to content

Commit 2f964f8

Browse files
committed
Rust: Add more closure flow tests
1 parent 0d4524f commit 2f964f8

File tree

2 files changed

+91
-0
lines changed

2 files changed

+91
-0
lines changed

rust/ql/test/library-tests/dataflow/lambdas/inline-flow.expected

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,33 @@ edges
3030
| main.rs:77:13:77:22 | f(...) | main.rs:77:9:77:9 | b | provenance | |
3131
| main.rs:77:21:77:21 | a | main.rs:66:24:66:32 | ...: i64 | provenance | |
3232
| main.rs:77:21:77:21 | a | main.rs:77:13:77:22 | f(...) | provenance | |
33+
| main.rs:81:28:81:33 | ...: i64 | main.rs:82:7:82:7 | x | provenance | |
34+
| main.rs:81:28:81:33 | ...: i64 | main.rs:82:7:82:7 | x | provenance | |
35+
| main.rs:81:28:81:33 | ...: i64 | main.rs:82:7:82:7 | x | provenance | |
36+
| main.rs:82:7:82:7 | x | main.rs:87:12:87:12 | ... | provenance | |
37+
| main.rs:82:7:82:7 | x | main.rs:89:12:89:12 | ... | provenance | |
38+
| main.rs:82:7:82:7 | x | main.rs:99:17:99:17 | ... | provenance | |
39+
| main.rs:82:7:82:7 | x | main.rs:101:17:101:17 | ... | provenance | |
40+
| main.rs:82:7:82:7 | x | main.rs:102:17:102:17 | ... | provenance | |
41+
| main.rs:86:9:86:9 | a | main.rs:87:24:87:24 | a | provenance | |
42+
| main.rs:86:13:86:22 | source(...) | main.rs:86:9:86:9 | a | provenance | |
43+
| main.rs:87:12:87:12 | ... | main.rs:87:20:87:20 | x | provenance | |
44+
| main.rs:87:24:87:24 | a | main.rs:81:28:81:33 | ...: i64 | provenance | |
45+
| main.rs:88:9:88:9 | b | main.rs:89:24:89:24 | b | provenance | |
46+
| main.rs:88:13:88:22 | source(...) | main.rs:88:9:88:9 | b | provenance | |
47+
| main.rs:89:12:89:12 | ... | main.rs:89:20:89:20 | x | provenance | |
48+
| main.rs:89:24:89:24 | b | main.rs:81:28:81:33 | ...: i64 | provenance | |
49+
| main.rs:93:33:93:38 | ...: i64 | main.rs:94:14:94:14 | x | provenance | |
50+
| main.rs:94:14:94:14 | x | main.rs:81:28:81:33 | ...: i64 | provenance | |
51+
| main.rs:98:9:98:9 | a | main.rs:99:29:99:29 | a | provenance | |
52+
| main.rs:98:13:98:22 | source(...) | main.rs:98:9:98:9 | a | provenance | |
53+
| main.rs:99:17:99:17 | ... | main.rs:99:25:99:25 | x | provenance | |
54+
| main.rs:99:29:99:29 | a | main.rs:93:33:93:38 | ...: i64 | provenance | |
55+
| main.rs:100:9:100:9 | b | main.rs:101:29:101:29 | b | provenance | |
56+
| main.rs:100:13:100:22 | source(...) | main.rs:100:9:100:9 | b | provenance | |
57+
| main.rs:101:17:101:17 | ... | main.rs:101:25:101:25 | x | provenance | |
58+
| main.rs:101:29:101:29 | b | main.rs:93:33:93:38 | ...: i64 | provenance | |
59+
| main.rs:102:17:102:17 | ... | main.rs:102:25:102:25 | x | provenance | |
3360
nodes
3461
| main.rs:10:20:10:52 | if cond {...} else {...} | semmle.label | if cond {...} else {...} |
3562
| main.rs:10:30:10:39 | source(...) | semmle.label | source(...) |
@@ -68,6 +95,36 @@ nodes
6895
| main.rs:77:13:77:22 | f(...) | semmle.label | f(...) |
6996
| main.rs:77:21:77:21 | a | semmle.label | a |
7097
| main.rs:78:10:78:10 | b | semmle.label | b |
98+
| main.rs:81:28:81:33 | ...: i64 | semmle.label | ...: i64 |
99+
| main.rs:81:28:81:33 | ...: i64 | semmle.label | ...: i64 |
100+
| main.rs:81:28:81:33 | ...: i64 | semmle.label | ...: i64 |
101+
| main.rs:82:7:82:7 | x | semmle.label | x |
102+
| main.rs:82:7:82:7 | x | semmle.label | x |
103+
| main.rs:82:7:82:7 | x | semmle.label | x |
104+
| main.rs:86:9:86:9 | a | semmle.label | a |
105+
| main.rs:86:13:86:22 | source(...) | semmle.label | source(...) |
106+
| main.rs:87:12:87:12 | ... | semmle.label | ... |
107+
| main.rs:87:20:87:20 | x | semmle.label | x |
108+
| main.rs:87:24:87:24 | a | semmle.label | a |
109+
| main.rs:88:9:88:9 | b | semmle.label | b |
110+
| main.rs:88:13:88:22 | source(...) | semmle.label | source(...) |
111+
| main.rs:89:12:89:12 | ... | semmle.label | ... |
112+
| main.rs:89:20:89:20 | x | semmle.label | x |
113+
| main.rs:89:24:89:24 | b | semmle.label | b |
114+
| main.rs:93:33:93:38 | ...: i64 | semmle.label | ...: i64 |
115+
| main.rs:94:14:94:14 | x | semmle.label | x |
116+
| main.rs:98:9:98:9 | a | semmle.label | a |
117+
| main.rs:98:13:98:22 | source(...) | semmle.label | source(...) |
118+
| main.rs:99:17:99:17 | ... | semmle.label | ... |
119+
| main.rs:99:25:99:25 | x | semmle.label | x |
120+
| main.rs:99:29:99:29 | a | semmle.label | a |
121+
| main.rs:100:9:100:9 | b | semmle.label | b |
122+
| main.rs:100:13:100:22 | source(...) | semmle.label | source(...) |
123+
| main.rs:101:17:101:17 | ... | semmle.label | ... |
124+
| main.rs:101:25:101:25 | x | semmle.label | x |
125+
| main.rs:101:29:101:29 | b | semmle.label | b |
126+
| main.rs:102:17:102:17 | ... | semmle.label | ... |
127+
| main.rs:102:25:102:25 | x | semmle.label | x |
71128
subpaths
72129
| main.rs:29:21:29:21 | a | main.rs:27:20:27:23 | ... | main.rs:27:26:27:52 | if cond {...} else {...} | main.rs:29:13:29:22 | f(...) |
73130
| main.rs:77:21:77:21 | a | main.rs:66:24:66:32 | ...: i64 | main.rs:66:42:72:1 | { ... } | main.rs:77:13:77:22 | f(...) |
@@ -81,3 +138,11 @@ testFailures
81138
| main.rs:52:10:52:13 | data | main.rs:62:13:62:22 | source(...) | main.rs:52:10:52:13 | data | $@ | main.rs:62:13:62:22 | source(...) | source(...) |
82139
| main.rs:57:10:57:12 | f(...) | main.rs:48:5:48:14 | source(...) | main.rs:57:10:57:12 | f(...) | $@ | main.rs:48:5:48:14 | source(...) | source(...) |
83140
| main.rs:78:10:78:10 | b | main.rs:76:13:76:22 | source(...) | main.rs:78:10:78:10 | b | $@ | main.rs:76:13:76:22 | source(...) | source(...) |
141+
| main.rs:87:20:87:20 | x | main.rs:86:13:86:22 | source(...) | main.rs:87:20:87:20 | x | $@ | main.rs:86:13:86:22 | source(...) | source(...) |
142+
| main.rs:89:20:89:20 | x | main.rs:88:13:88:22 | source(...) | main.rs:89:20:89:20 | x | $@ | main.rs:88:13:88:22 | source(...) | source(...) |
143+
| main.rs:99:25:99:25 | x | main.rs:98:13:98:22 | source(...) | main.rs:99:25:99:25 | x | $@ | main.rs:98:13:98:22 | source(...) | source(...) |
144+
| main.rs:99:25:99:25 | x | main.rs:100:13:100:22 | source(...) | main.rs:99:25:99:25 | x | $@ | main.rs:100:13:100:22 | source(...) | source(...) |
145+
| main.rs:101:25:101:25 | x | main.rs:98:13:98:22 | source(...) | main.rs:101:25:101:25 | x | $@ | main.rs:98:13:98:22 | source(...) | source(...) |
146+
| main.rs:101:25:101:25 | x | main.rs:100:13:100:22 | source(...) | main.rs:101:25:101:25 | x | $@ | main.rs:100:13:100:22 | source(...) | source(...) |
147+
| main.rs:102:25:102:25 | x | main.rs:98:13:98:22 | source(...) | main.rs:102:25:102:25 | x | $@ | main.rs:98:13:98:22 | source(...) | source(...) |
148+
| main.rs:102:25:102:25 | x | main.rs:100:13:100:22 | source(...) | main.rs:102:25:102:25 | x | $@ | main.rs:100:13:100:22 | source(...) | source(...) |

rust/ql/test/library-tests/dataflow/lambdas/main.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,30 @@ fn function_flows_through() {
7878
sink(b); // $ hasValueFlow=56
7979
}
8080

81+
fn apply<F: Fn(i64)>(f: F, x: i64) {
82+
f(x);
83+
}
84+
85+
fn test_apply() {
86+
let a = source(77);
87+
apply(|x| sink(x), a); // $ hasValueFlow=77
88+
let b = source(78);
89+
apply(|x| sink(x), b); // $ hasValueFlow=78
90+
apply(|x| sink(x), 0);
91+
}
92+
93+
fn apply_wrap<F: Fn(i64)>(f: F, x: i64) {
94+
apply(f, x);
95+
}
96+
97+
fn test_apply_wrap() {
98+
let a = source(79);
99+
apply_wrap(|x| sink(x), a); // $ hasValueFlow=79 $ SPURIOUS: hasValueFlow=80
100+
let b = source(80);
101+
apply_wrap(|x| sink(x), b); // $ hasValueFlow=80 $ SPURIOUS: hasValueFlow=79
102+
apply_wrap(|x| sink(x), 0); // $ SPURIOUS: hasValueFlow=79 hasValueFlow=80
103+
}
104+
81105
fn main() {
82106
closure_flow_out();
83107
closure_flow_in();
@@ -86,4 +110,6 @@ fn main() {
86110
function_flow_in();
87111
function_flow_out();
88112
function_flows_through();
113+
test_apply();
114+
test_apply_wrap();
89115
}

0 commit comments

Comments
 (0)