Skip to content

Commit fe216ae

Browse files
committed
Rust: Add tests for nested functions
1 parent 3ceec93 commit fe216ae

File tree

7 files changed

+1430
-1235
lines changed

7 files changed

+1430
-1235
lines changed

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

+54-37
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,28 @@ edges
2020
| main.rs:41:26:44:5 | { ... } | main.rs:30:17:30:22 | ...: i64 | provenance | |
2121
| main.rs:41:26:44:5 | { ... } | main.rs:41:13:44:6 | pass_through(...) | provenance | |
2222
| main.rs:43:9:43:18 | source(...) | main.rs:41:26:44:5 | { ... } | provenance | |
23-
| main.rs:56:23:56:28 | ...: i64 | main.rs:57:14:57:14 | n | provenance | |
24-
| main.rs:59:31:65:5 | { ... } | main.rs:77:13:77:25 | mn.get_data(...) | provenance | |
25-
| main.rs:63:13:63:21 | source(...) | main.rs:59:31:65:5 | { ... } | provenance | |
26-
| main.rs:66:28:66:33 | ...: i64 | main.rs:66:43:72:5 | { ... } | provenance | |
27-
| main.rs:77:9:77:9 | a | main.rs:78:10:78:10 | a | provenance | |
28-
| main.rs:77:13:77:25 | mn.get_data(...) | main.rs:77:9:77:9 | a | provenance | |
29-
| main.rs:83:9:83:9 | a | main.rs:84:16:84:16 | a | provenance | |
30-
| main.rs:83:13:83:21 | source(...) | main.rs:83:9:83:9 | a | provenance | |
31-
| main.rs:84:16:84:16 | a | main.rs:56:23:56:28 | ...: i64 | provenance | |
32-
| main.rs:89:9:89:9 | a | main.rs:90:29:90:29 | a | provenance | |
33-
| main.rs:89:13:89:21 | source(...) | main.rs:89:9:89:9 | a | provenance | |
34-
| main.rs:90:9:90:9 | b | main.rs:91:10:91:10 | b | provenance | |
35-
| main.rs:90:13:90:30 | mn.data_through(...) | main.rs:90:9:90:9 | b | provenance | |
36-
| main.rs:90:29:90:29 | a | main.rs:66:28:66:33 | ...: i64 | provenance | |
37-
| main.rs:90:29:90:29 | a | main.rs:90:13:90:30 | mn.data_through(...) | provenance | |
23+
| main.rs:49:9:49:9 | a | main.rs:55:26:55:26 | a | provenance | |
24+
| main.rs:49:13:49:22 | source(...) | main.rs:49:9:49:9 | a | provenance | |
25+
| main.rs:51:21:51:26 | ...: i64 | main.rs:51:36:53:5 | { ... } | provenance | |
26+
| main.rs:55:9:55:9 | b | main.rs:56:10:56:10 | b | provenance | |
27+
| main.rs:55:13:55:27 | pass_through(...) | main.rs:55:9:55:9 | b | provenance | |
28+
| main.rs:55:26:55:26 | a | main.rs:51:21:51:26 | ...: i64 | provenance | |
29+
| main.rs:55:26:55:26 | a | main.rs:55:13:55:27 | pass_through(...) | provenance | |
30+
| main.rs:67:23:67:28 | ...: i64 | main.rs:68:14:68:14 | n | provenance | |
31+
| main.rs:70:31:76:5 | { ... } | main.rs:88:13:88:25 | mn.get_data(...) | provenance | |
32+
| main.rs:74:13:74:21 | source(...) | main.rs:70:31:76:5 | { ... } | provenance | |
33+
| main.rs:77:28:77:33 | ...: i64 | main.rs:77:43:83:5 | { ... } | provenance | |
34+
| main.rs:88:9:88:9 | a | main.rs:89:10:89:10 | a | provenance | |
35+
| main.rs:88:13:88:25 | mn.get_data(...) | main.rs:88:9:88:9 | a | provenance | |
36+
| main.rs:94:9:94:9 | a | main.rs:95:16:95:16 | a | provenance | |
37+
| main.rs:94:13:94:21 | source(...) | main.rs:94:9:94:9 | a | provenance | |
38+
| main.rs:95:16:95:16 | a | main.rs:67:23:67:28 | ...: i64 | provenance | |
39+
| main.rs:100:9:100:9 | a | main.rs:101:29:101:29 | a | provenance | |
40+
| main.rs:100:13:100:21 | source(...) | main.rs:100:9:100:9 | a | provenance | |
41+
| main.rs:101:9:101:9 | b | main.rs:102:10:102:10 | b | provenance | |
42+
| main.rs:101:13:101:30 | mn.data_through(...) | main.rs:101:9:101:9 | b | provenance | |
43+
| main.rs:101:29:101:29 | a | main.rs:77:28:77:33 | ...: i64 | provenance | |
44+
| main.rs:101:29:101:29 | a | main.rs:101:13:101:30 | mn.data_through(...) | provenance | |
3845
nodes
3946
| main.rs:12:28:14:1 | { ... } | semmle.label | { ... } |
4047
| main.rs:13:5:13:13 | source(...) | semmle.label | source(...) |
@@ -59,34 +66,44 @@ nodes
5966
| main.rs:41:26:44:5 | { ... } | semmle.label | { ... } |
6067
| main.rs:43:9:43:18 | source(...) | semmle.label | source(...) |
6168
| main.rs:45:10:45:10 | a | semmle.label | a |
62-
| main.rs:56:23:56:28 | ...: i64 | semmle.label | ...: i64 |
63-
| main.rs:57:14:57:14 | n | semmle.label | n |
64-
| main.rs:59:31:65:5 | { ... } | semmle.label | { ... } |
65-
| main.rs:63:13:63:21 | source(...) | semmle.label | source(...) |
66-
| main.rs:66:28:66:33 | ...: i64 | semmle.label | ...: i64 |
67-
| main.rs:66:43:72:5 | { ... } | semmle.label | { ... } |
68-
| main.rs:77:9:77:9 | a | semmle.label | a |
69-
| main.rs:77:13:77:25 | mn.get_data(...) | semmle.label | mn.get_data(...) |
70-
| main.rs:78:10:78:10 | a | semmle.label | a |
71-
| main.rs:83:9:83:9 | a | semmle.label | a |
72-
| main.rs:83:13:83:21 | source(...) | semmle.label | source(...) |
73-
| main.rs:84:16:84:16 | a | semmle.label | a |
74-
| main.rs:89:9:89:9 | a | semmle.label | a |
75-
| main.rs:89:13:89:21 | source(...) | semmle.label | source(...) |
76-
| main.rs:90:9:90:9 | b | semmle.label | b |
77-
| main.rs:90:13:90:30 | mn.data_through(...) | semmle.label | mn.data_through(...) |
78-
| main.rs:90:29:90:29 | a | semmle.label | a |
79-
| main.rs:91:10:91:10 | b | semmle.label | b |
69+
| main.rs:49:9:49:9 | a | semmle.label | a |
70+
| main.rs:49:13:49:22 | source(...) | semmle.label | source(...) |
71+
| main.rs:51:21:51:26 | ...: i64 | semmle.label | ...: i64 |
72+
| main.rs:51:36:53:5 | { ... } | semmle.label | { ... } |
73+
| main.rs:55:9:55:9 | b | semmle.label | b |
74+
| main.rs:55:13:55:27 | pass_through(...) | semmle.label | pass_through(...) |
75+
| main.rs:55:26:55:26 | a | semmle.label | a |
76+
| main.rs:56:10:56:10 | b | semmle.label | b |
77+
| main.rs:67:23:67:28 | ...: i64 | semmle.label | ...: i64 |
78+
| main.rs:68:14:68:14 | n | semmle.label | n |
79+
| main.rs:70:31:76:5 | { ... } | semmle.label | { ... } |
80+
| main.rs:74:13:74:21 | source(...) | semmle.label | source(...) |
81+
| main.rs:77:28:77:33 | ...: i64 | semmle.label | ...: i64 |
82+
| main.rs:77:43:83:5 | { ... } | semmle.label | { ... } |
83+
| main.rs:88:9:88:9 | a | semmle.label | a |
84+
| main.rs:88:13:88:25 | mn.get_data(...) | semmle.label | mn.get_data(...) |
85+
| main.rs:89:10:89:10 | a | semmle.label | a |
86+
| main.rs:94:9:94:9 | a | semmle.label | a |
87+
| main.rs:94:13:94:21 | source(...) | semmle.label | source(...) |
88+
| main.rs:95:16:95:16 | a | semmle.label | a |
89+
| main.rs:100:9:100:9 | a | semmle.label | a |
90+
| main.rs:100:13:100:21 | source(...) | semmle.label | source(...) |
91+
| main.rs:101:9:101:9 | b | semmle.label | b |
92+
| main.rs:101:13:101:30 | mn.data_through(...) | semmle.label | mn.data_through(...) |
93+
| main.rs:101:29:101:29 | a | semmle.label | a |
94+
| main.rs:102:10:102:10 | b | semmle.label | b |
8095
subpaths
8196
| main.rs:36:26:36:26 | a | main.rs:30:17:30:22 | ...: i64 | main.rs:30:32:32:1 | { ... } | main.rs:36:13:36:27 | pass_through(...) |
8297
| main.rs:41:26:44:5 | { ... } | main.rs:30:17:30:22 | ...: i64 | main.rs:30:32:32:1 | { ... } | main.rs:41:13:44:6 | pass_through(...) |
83-
| main.rs:90:29:90:29 | a | main.rs:66:28:66:33 | ...: i64 | main.rs:66:43:72:5 | { ... } | main.rs:90:13:90:30 | mn.data_through(...) |
98+
| main.rs:55:26:55:26 | a | main.rs:51:21:51:26 | ...: i64 | main.rs:51:36:53:5 | { ... } | main.rs:55:13:55:27 | pass_through(...) |
99+
| main.rs:101:29:101:29 | a | main.rs:77:28:77:33 | ...: i64 | main.rs:77:43:83:5 | { ... } | main.rs:101:13:101:30 | mn.data_through(...) |
84100
testFailures
85101
#select
86102
| main.rs:18:10:18:10 | a | main.rs:13:5:13:13 | source(...) | main.rs:18:10:18:10 | a | $@ | main.rs:13:5:13:13 | source(...) | source(...) |
87103
| main.rs:22:10:22:10 | n | main.rs:26:13:26:21 | source(...) | main.rs:22:10:22:10 | n | $@ | main.rs:26:13:26:21 | source(...) | source(...) |
88104
| main.rs:37:10:37:10 | b | main.rs:35:13:35:21 | source(...) | main.rs:37:10:37:10 | b | $@ | main.rs:35:13:35:21 | source(...) | source(...) |
89105
| main.rs:45:10:45:10 | a | main.rs:43:9:43:18 | source(...) | main.rs:45:10:45:10 | a | $@ | main.rs:43:9:43:18 | source(...) | source(...) |
90-
| main.rs:57:14:57:14 | n | main.rs:83:13:83:21 | source(...) | main.rs:57:14:57:14 | n | $@ | main.rs:83:13:83:21 | source(...) | source(...) |
91-
| main.rs:78:10:78:10 | a | main.rs:63:13:63:21 | source(...) | main.rs:78:10:78:10 | a | $@ | main.rs:63:13:63:21 | source(...) | source(...) |
92-
| main.rs:91:10:91:10 | b | main.rs:89:13:89:21 | source(...) | main.rs:91:10:91:10 | b | $@ | main.rs:89:13:89:21 | source(...) | source(...) |
106+
| main.rs:56:10:56:10 | b | main.rs:49:13:49:22 | source(...) | main.rs:56:10:56:10 | b | $@ | main.rs:49:13:49:22 | source(...) | source(...) |
107+
| main.rs:68:14:68:14 | n | main.rs:94:13:94:21 | source(...) | main.rs:68:14:68:14 | n | $@ | main.rs:94:13:94:21 | source(...) | source(...) |
108+
| main.rs:89:10:89:10 | a | main.rs:74:13:74:21 | source(...) | main.rs:89:10:89:10 | a | $@ | main.rs:74:13:74:21 | source(...) | source(...) |
109+
| main.rs:102:10:102:10 | b | main.rs:100:13:100:21 | source(...) | main.rs:102:10:102:10 | b | $@ | main.rs:100:13:100:21 | source(...) | source(...) |

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

+12
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,17 @@ fn block_expression_as_argument() {
4545
sink(a); // $ hasValueFlow=14
4646
}
4747

48+
fn data_through_nested_function() {
49+
let a = source(15);
50+
51+
fn pass_through(i: i64) -> i64 {
52+
i
53+
}
54+
55+
let b = pass_through(a);
56+
sink(b); // $ hasValueFlow=15
57+
}
58+
4859
// -----------------------------------------------------------------------------
4960
// Data flow in, out, and through method.
5061

@@ -127,6 +138,7 @@ fn main() {
127138
data_out_of_call();
128139
data_in_to_call();
129140
data_through_call();
141+
data_through_nested_function();
130142

131143
data_out_of_method();
132144
data_in_to_method_call();

rust/ql/test/library-tests/dataflow/global/viableCallable.expected

+27-23
Original file line numberDiff line numberDiff line change
@@ -10,26 +10,30 @@
1010
| main.rs:41:13:44:6 | pass_through(...) | main.rs:30:1:32:1 | fn pass_through |
1111
| main.rs:43:9:43:18 | source(...) | main.rs:1:1:3:1 | fn source |
1212
| main.rs:45:5:45:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
13-
| main.rs:57:9:57:15 | sink(...) | main.rs:5:1:7:1 | fn sink |
14-
| main.rs:63:13:63:21 | source(...) | main.rs:1:1:3:1 | fn source |
15-
| main.rs:77:13:77:25 | mn.get_data(...) | main.rs:59:5:65:5 | fn get_data |
16-
| main.rs:78:5:78:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
17-
| main.rs:83:13:83:21 | source(...) | main.rs:1:1:3:1 | fn source |
18-
| main.rs:84:5:84:17 | mn.data_in(...) | main.rs:56:5:58:5 | fn data_in |
19-
| main.rs:89:13:89:21 | source(...) | main.rs:1:1:3:1 | fn source |
20-
| main.rs:90:13:90:30 | mn.data_through(...) | main.rs:66:5:72:5 | fn data_through |
21-
| main.rs:91:5:91:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
22-
| main.rs:110:28:110:36 | source(...) | main.rs:1:1:3:1 | fn source |
23-
| main.rs:113:5:113:17 | sink(...) | main.rs:5:1:7:1 | fn sink |
24-
| main.rs:116:28:116:36 | source(...) | main.rs:1:1:3:1 | fn source |
25-
| main.rs:118:5:118:17 | sink(...) | main.rs:5:1:7:1 | fn sink |
26-
| main.rs:120:28:120:36 | source(...) | main.rs:1:1:3:1 | fn source |
27-
| main.rs:122:13:122:20 | a.add(...) | main.rs:103:5:106:5 | fn add |
28-
| main.rs:123:5:123:17 | sink(...) | main.rs:5:1:7:1 | fn sink |
29-
| main.rs:127:5:127:22 | data_out_of_call(...) | main.rs:16:1:19:1 | fn data_out_of_call |
30-
| main.rs:128:5:128:21 | data_in_to_call(...) | main.rs:25:1:28:1 | fn data_in_to_call |
31-
| main.rs:129:5:129:23 | data_through_call(...) | main.rs:34:1:38:1 | fn data_through_call |
32-
| main.rs:131:5:131:24 | data_out_of_method(...) | main.rs:75:1:79:1 | fn data_out_of_method |
33-
| main.rs:132:5:132:28 | data_in_to_method_call(...) | main.rs:81:1:85:1 | fn data_in_to_method_call |
34-
| main.rs:133:5:133:25 | data_through_method(...) | main.rs:87:1:92:1 | fn data_through_method |
35-
| main.rs:135:5:135:31 | test_operator_overloading(...) | main.rs:109:1:124:1 | fn test_operator_overloading |
13+
| main.rs:49:13:49:22 | source(...) | main.rs:1:1:3:1 | fn source |
14+
| main.rs:55:13:55:27 | pass_through(...) | main.rs:51:5:53:5 | fn pass_through |
15+
| main.rs:56:5:56:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
16+
| main.rs:68:9:68:15 | sink(...) | main.rs:5:1:7:1 | fn sink |
17+
| main.rs:74:13:74:21 | source(...) | main.rs:1:1:3:1 | fn source |
18+
| main.rs:88:13:88:25 | mn.get_data(...) | main.rs:70:5:76:5 | fn get_data |
19+
| main.rs:89:5:89:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
20+
| main.rs:94:13:94:21 | source(...) | main.rs:1:1:3:1 | fn source |
21+
| main.rs:95:5:95:17 | mn.data_in(...) | main.rs:67:5:69:5 | fn data_in |
22+
| main.rs:100:13:100:21 | source(...) | main.rs:1:1:3:1 | fn source |
23+
| main.rs:101:13:101:30 | mn.data_through(...) | main.rs:77:5:83:5 | fn data_through |
24+
| main.rs:102:5:102:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
25+
| main.rs:121:28:121:36 | source(...) | main.rs:1:1:3:1 | fn source |
26+
| main.rs:124:5:124:17 | sink(...) | main.rs:5:1:7:1 | fn sink |
27+
| main.rs:127:28:127:36 | source(...) | main.rs:1:1:3:1 | fn source |
28+
| main.rs:129:5:129:17 | sink(...) | main.rs:5:1:7:1 | fn sink |
29+
| main.rs:131:28:131:36 | source(...) | main.rs:1:1:3:1 | fn source |
30+
| main.rs:133:13:133:20 | a.add(...) | main.rs:114:5:117:5 | fn add |
31+
| main.rs:134:5:134:17 | sink(...) | main.rs:5:1:7:1 | fn sink |
32+
| main.rs:138:5:138:22 | data_out_of_call(...) | main.rs:16:1:19:1 | fn data_out_of_call |
33+
| main.rs:139:5:139:21 | data_in_to_call(...) | main.rs:25:1:28:1 | fn data_in_to_call |
34+
| main.rs:140:5:140:23 | data_through_call(...) | main.rs:34:1:38:1 | fn data_through_call |
35+
| main.rs:141:5:141:34 | data_through_nested_function(...) | main.rs:48:1:57:1 | fn data_through_nested_function |
36+
| main.rs:143:5:143:24 | data_out_of_method(...) | main.rs:86:1:90:1 | fn data_out_of_method |
37+
| main.rs:144:5:144:28 | data_in_to_method_call(...) | main.rs:92:1:96:1 | fn data_in_to_method_call |
38+
| main.rs:145:5:145:25 | data_through_method(...) | main.rs:98:1:103:1 | fn data_through_method |
39+
| main.rs:147:5:147:31 | test_operator_overloading(...) | main.rs:120:1:135:1 | fn test_operator_overloading |

0 commit comments

Comments
 (0)