Skip to content

Commit 456a4b2

Browse files
committed
Rust: Make dataflow/modeled pass by not using #[derive(Clone)]
1 parent 1269a2e commit 456a4b2

File tree

2 files changed

+80
-60
lines changed

2 files changed

+80
-60
lines changed

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

Lines changed: 71 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -29,32 +29,38 @@ edges
2929
| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | MaD:5 |
3030
| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | generated |
3131
| main.rs:28:13:28:21 | a.clone() | main.rs:28:9:28:9 | b | provenance | |
32-
| main.rs:41:13:41:13 | w [Wrapper] | main.rs:42:15:42:15 | w [Wrapper] | provenance | |
33-
| main.rs:41:17:41:41 | Wrapper {...} [Wrapper] | main.rs:41:13:41:13 | w [Wrapper] | provenance | |
34-
| main.rs:41:30:41:39 | source(...) | main.rs:41:17:41:41 | Wrapper {...} [Wrapper] | provenance | |
35-
| main.rs:42:15:42:15 | w [Wrapper] | main.rs:43:13:43:28 | Wrapper {...} [Wrapper] | provenance | |
36-
| main.rs:42:15:42:15 | w [Wrapper] | main.rs:45:17:45:17 | w [Wrapper] | provenance | |
37-
| main.rs:43:13:43:28 | Wrapper {...} [Wrapper] | main.rs:43:26:43:26 | n | provenance | |
38-
| main.rs:43:26:43:26 | n | main.rs:43:38:43:38 | n | provenance | |
39-
| main.rs:45:13:45:13 | u [Wrapper] | main.rs:46:15:46:15 | u [Wrapper] | provenance | |
40-
| main.rs:45:17:45:17 | w [Wrapper] | main.rs:45:17:45:25 | w.clone() [Wrapper] | provenance | generated |
41-
| main.rs:45:17:45:25 | w.clone() [Wrapper] | main.rs:45:13:45:13 | u [Wrapper] | provenance | |
42-
| main.rs:46:15:46:15 | u [Wrapper] | main.rs:47:13:47:28 | Wrapper {...} [Wrapper] | provenance | |
43-
| main.rs:47:13:47:28 | Wrapper {...} [Wrapper] | main.rs:47:26:47:26 | n | provenance | |
44-
| main.rs:47:26:47:26 | n | main.rs:47:38:47:38 | n | provenance | |
45-
| main.rs:58:13:58:13 | b [Some] | main.rs:59:23:59:23 | b [Some] | provenance | |
46-
| main.rs:58:17:58:32 | Some(...) [Some] | main.rs:58:13:58:13 | b [Some] | provenance | |
47-
| main.rs:58:22:58:31 | source(...) | main.rs:58:17:58:32 | Some(...) [Some] | provenance | |
48-
| main.rs:59:13:59:13 | z [Some, tuple.1] | main.rs:60:15:60:15 | z [Some, tuple.1] | provenance | |
49-
| main.rs:59:17:59:24 | a.zip(...) [Some, tuple.1] | main.rs:59:13:59:13 | z [Some, tuple.1] | provenance | |
50-
| main.rs:59:23:59:23 | b [Some] | main.rs:59:17:59:24 | a.zip(...) [Some, tuple.1] | provenance | MaD:3 |
51-
| main.rs:60:15:60:15 | z [Some, tuple.1] | main.rs:61:13:61:24 | Some(...) [Some, tuple.1] | provenance | |
52-
| main.rs:61:13:61:24 | Some(...) [Some, tuple.1] | main.rs:61:18:61:23 | TuplePat [tuple.1] | provenance | |
53-
| main.rs:61:18:61:23 | TuplePat [tuple.1] | main.rs:61:22:61:22 | m | provenance | |
54-
| main.rs:61:22:61:22 | m | main.rs:63:22:63:22 | m | provenance | |
55-
| main.rs:84:29:84:29 | [post] y [&ref] | main.rs:85:33:85:33 | y [&ref] | provenance | |
56-
| main.rs:84:32:84:41 | source(...) | main.rs:84:29:84:29 | [post] y [&ref] | provenance | MaD:7 |
57-
| main.rs:85:33:85:33 | y [&ref] | main.rs:85:18:85:34 | ...::read(...) | provenance | MaD:6 |
32+
| main.rs:43:18:43:22 | SelfParam [Wrapper] | main.rs:44:26:44:29 | self [Wrapper] | provenance | |
33+
| main.rs:44:13:44:33 | Wrapper {...} [Wrapper] | main.rs:43:33:45:9 | { ... } [Wrapper] | provenance | |
34+
| main.rs:44:26:44:29 | self [Wrapper] | main.rs:44:26:44:31 | self.n | provenance | |
35+
| main.rs:44:26:44:31 | self.n | main.rs:44:13:44:33 | Wrapper {...} [Wrapper] | provenance | |
36+
| main.rs:49:13:49:13 | w [Wrapper] | main.rs:50:15:50:15 | w [Wrapper] | provenance | |
37+
| main.rs:49:17:49:41 | Wrapper {...} [Wrapper] | main.rs:49:13:49:13 | w [Wrapper] | provenance | |
38+
| main.rs:49:30:49:39 | source(...) | main.rs:49:17:49:41 | Wrapper {...} [Wrapper] | provenance | |
39+
| main.rs:50:15:50:15 | w [Wrapper] | main.rs:43:18:43:22 | SelfParam [Wrapper] | provenance | |
40+
| main.rs:50:15:50:15 | w [Wrapper] | main.rs:51:13:51:28 | Wrapper {...} [Wrapper] | provenance | |
41+
| main.rs:50:15:50:15 | w [Wrapper] | main.rs:53:17:53:17 | w [Wrapper] | provenance | |
42+
| main.rs:50:15:50:15 | w [Wrapper] | main.rs:53:17:53:25 | w.clone() [Wrapper] | provenance | |
43+
| main.rs:51:13:51:28 | Wrapper {...} [Wrapper] | main.rs:51:26:51:26 | n | provenance | |
44+
| main.rs:51:26:51:26 | n | main.rs:51:38:51:38 | n | provenance | |
45+
| main.rs:53:13:53:13 | u [Wrapper] | main.rs:54:15:54:15 | u [Wrapper] | provenance | |
46+
| main.rs:53:17:53:17 | w [Wrapper] | main.rs:53:17:53:25 | w.clone() [Wrapper] | provenance | generated |
47+
| main.rs:53:17:53:25 | w.clone() [Wrapper] | main.rs:53:13:53:13 | u [Wrapper] | provenance | |
48+
| main.rs:54:15:54:15 | u [Wrapper] | main.rs:55:13:55:28 | Wrapper {...} [Wrapper] | provenance | |
49+
| main.rs:55:13:55:28 | Wrapper {...} [Wrapper] | main.rs:55:26:55:26 | n | provenance | |
50+
| main.rs:55:26:55:26 | n | main.rs:55:38:55:38 | n | provenance | |
51+
| main.rs:66:13:66:13 | b [Some] | main.rs:67:23:67:23 | b [Some] | provenance | |
52+
| main.rs:66:17:66:32 | Some(...) [Some] | main.rs:66:13:66:13 | b [Some] | provenance | |
53+
| main.rs:66:22:66:31 | source(...) | main.rs:66:17:66:32 | Some(...) [Some] | provenance | |
54+
| main.rs:67:13:67:13 | z [Some, tuple.1] | main.rs:68:15:68:15 | z [Some, tuple.1] | provenance | |
55+
| main.rs:67:17:67:24 | a.zip(...) [Some, tuple.1] | main.rs:67:13:67:13 | z [Some, tuple.1] | provenance | |
56+
| main.rs:67:23:67:23 | b [Some] | main.rs:67:17:67:24 | a.zip(...) [Some, tuple.1] | provenance | MaD:3 |
57+
| main.rs:68:15:68:15 | z [Some, tuple.1] | main.rs:69:13:69:24 | Some(...) [Some, tuple.1] | provenance | |
58+
| main.rs:69:13:69:24 | Some(...) [Some, tuple.1] | main.rs:69:18:69:23 | TuplePat [tuple.1] | provenance | |
59+
| main.rs:69:18:69:23 | TuplePat [tuple.1] | main.rs:69:22:69:22 | m | provenance | |
60+
| main.rs:69:22:69:22 | m | main.rs:71:22:71:22 | m | provenance | |
61+
| main.rs:92:29:92:29 | [post] y [&ref] | main.rs:93:33:93:33 | y [&ref] | provenance | |
62+
| main.rs:92:32:92:41 | source(...) | main.rs:92:29:92:29 | [post] y [&ref] | provenance | MaD:7 |
63+
| main.rs:93:33:93:33 | y [&ref] | main.rs:93:18:93:34 | ...::read(...) | provenance | MaD:6 |
5864
nodes
5965
| main.rs:12:9:12:9 | a [Some] | semmle.label | a [Some] |
6066
| main.rs:12:13:12:28 | Some(...) [Some] | semmle.label | Some(...) [Some] |
@@ -79,36 +85,42 @@ nodes
7985
| main.rs:28:13:28:13 | a | semmle.label | a |
8086
| main.rs:28:13:28:21 | a.clone() | semmle.label | a.clone() |
8187
| main.rs:29:10:29:10 | b | semmle.label | b |
82-
| main.rs:41:13:41:13 | w [Wrapper] | semmle.label | w [Wrapper] |
83-
| main.rs:41:17:41:41 | Wrapper {...} [Wrapper] | semmle.label | Wrapper {...} [Wrapper] |
84-
| main.rs:41:30:41:39 | source(...) | semmle.label | source(...) |
85-
| main.rs:42:15:42:15 | w [Wrapper] | semmle.label | w [Wrapper] |
86-
| main.rs:43:13:43:28 | Wrapper {...} [Wrapper] | semmle.label | Wrapper {...} [Wrapper] |
87-
| main.rs:43:26:43:26 | n | semmle.label | n |
88-
| main.rs:43:38:43:38 | n | semmle.label | n |
89-
| main.rs:45:13:45:13 | u [Wrapper] | semmle.label | u [Wrapper] |
90-
| main.rs:45:17:45:17 | w [Wrapper] | semmle.label | w [Wrapper] |
91-
| main.rs:45:17:45:25 | w.clone() [Wrapper] | semmle.label | w.clone() [Wrapper] |
92-
| main.rs:46:15:46:15 | u [Wrapper] | semmle.label | u [Wrapper] |
93-
| main.rs:47:13:47:28 | Wrapper {...} [Wrapper] | semmle.label | Wrapper {...} [Wrapper] |
94-
| main.rs:47:26:47:26 | n | semmle.label | n |
95-
| main.rs:47:38:47:38 | n | semmle.label | n |
96-
| main.rs:58:13:58:13 | b [Some] | semmle.label | b [Some] |
97-
| main.rs:58:17:58:32 | Some(...) [Some] | semmle.label | Some(...) [Some] |
98-
| main.rs:58:22:58:31 | source(...) | semmle.label | source(...) |
99-
| main.rs:59:13:59:13 | z [Some, tuple.1] | semmle.label | z [Some, tuple.1] |
100-
| main.rs:59:17:59:24 | a.zip(...) [Some, tuple.1] | semmle.label | a.zip(...) [Some, tuple.1] |
101-
| main.rs:59:23:59:23 | b [Some] | semmle.label | b [Some] |
102-
| main.rs:60:15:60:15 | z [Some, tuple.1] | semmle.label | z [Some, tuple.1] |
103-
| main.rs:61:13:61:24 | Some(...) [Some, tuple.1] | semmle.label | Some(...) [Some, tuple.1] |
104-
| main.rs:61:18:61:23 | TuplePat [tuple.1] | semmle.label | TuplePat [tuple.1] |
105-
| main.rs:61:22:61:22 | m | semmle.label | m |
106-
| main.rs:63:22:63:22 | m | semmle.label | m |
107-
| main.rs:84:29:84:29 | [post] y [&ref] | semmle.label | [post] y [&ref] |
108-
| main.rs:84:32:84:41 | source(...) | semmle.label | source(...) |
109-
| main.rs:85:18:85:34 | ...::read(...) | semmle.label | ...::read(...) |
110-
| main.rs:85:33:85:33 | y [&ref] | semmle.label | y [&ref] |
88+
| main.rs:43:18:43:22 | SelfParam [Wrapper] | semmle.label | SelfParam [Wrapper] |
89+
| main.rs:43:33:45:9 | { ... } [Wrapper] | semmle.label | { ... } [Wrapper] |
90+
| main.rs:44:13:44:33 | Wrapper {...} [Wrapper] | semmle.label | Wrapper {...} [Wrapper] |
91+
| main.rs:44:26:44:29 | self [Wrapper] | semmle.label | self [Wrapper] |
92+
| main.rs:44:26:44:31 | self.n | semmle.label | self.n |
93+
| main.rs:49:13:49:13 | w [Wrapper] | semmle.label | w [Wrapper] |
94+
| main.rs:49:17:49:41 | Wrapper {...} [Wrapper] | semmle.label | Wrapper {...} [Wrapper] |
95+
| main.rs:49:30:49:39 | source(...) | semmle.label | source(...) |
96+
| main.rs:50:15:50:15 | w [Wrapper] | semmle.label | w [Wrapper] |
97+
| main.rs:51:13:51:28 | Wrapper {...} [Wrapper] | semmle.label | Wrapper {...} [Wrapper] |
98+
| main.rs:51:26:51:26 | n | semmle.label | n |
99+
| main.rs:51:38:51:38 | n | semmle.label | n |
100+
| main.rs:53:13:53:13 | u [Wrapper] | semmle.label | u [Wrapper] |
101+
| main.rs:53:17:53:17 | w [Wrapper] | semmle.label | w [Wrapper] |
102+
| main.rs:53:17:53:25 | w.clone() [Wrapper] | semmle.label | w.clone() [Wrapper] |
103+
| main.rs:54:15:54:15 | u [Wrapper] | semmle.label | u [Wrapper] |
104+
| main.rs:55:13:55:28 | Wrapper {...} [Wrapper] | semmle.label | Wrapper {...} [Wrapper] |
105+
| main.rs:55:26:55:26 | n | semmle.label | n |
106+
| main.rs:55:38:55:38 | n | semmle.label | n |
107+
| main.rs:66:13:66:13 | b [Some] | semmle.label | b [Some] |
108+
| main.rs:66:17:66:32 | Some(...) [Some] | semmle.label | Some(...) [Some] |
109+
| main.rs:66:22:66:31 | source(...) | semmle.label | source(...) |
110+
| main.rs:67:13:67:13 | z [Some, tuple.1] | semmle.label | z [Some, tuple.1] |
111+
| main.rs:67:17:67:24 | a.zip(...) [Some, tuple.1] | semmle.label | a.zip(...) [Some, tuple.1] |
112+
| main.rs:67:23:67:23 | b [Some] | semmle.label | b [Some] |
113+
| main.rs:68:15:68:15 | z [Some, tuple.1] | semmle.label | z [Some, tuple.1] |
114+
| main.rs:69:13:69:24 | Some(...) [Some, tuple.1] | semmle.label | Some(...) [Some, tuple.1] |
115+
| main.rs:69:18:69:23 | TuplePat [tuple.1] | semmle.label | TuplePat [tuple.1] |
116+
| main.rs:69:22:69:22 | m | semmle.label | m |
117+
| main.rs:71:22:71:22 | m | semmle.label | m |
118+
| main.rs:92:29:92:29 | [post] y [&ref] | semmle.label | [post] y [&ref] |
119+
| main.rs:92:32:92:41 | source(...) | semmle.label | source(...) |
120+
| main.rs:93:18:93:34 | ...::read(...) | semmle.label | ...::read(...) |
121+
| main.rs:93:33:93:33 | y [&ref] | semmle.label | y [&ref] |
111122
subpaths
123+
| main.rs:50:15:50:15 | w [Wrapper] | main.rs:43:18:43:22 | SelfParam [Wrapper] | main.rs:43:33:45:9 | { ... } [Wrapper] | main.rs:53:17:53:25 | w.clone() [Wrapper] |
112124
testFailures
113125
#select
114126
| main.rs:13:10:13:19 | a.unwrap() | main.rs:12:18:12:27 | source(...) | main.rs:13:10:13:19 | a.unwrap() | $@ | main.rs:12:18:12:27 | source(...) | source(...) |
@@ -117,7 +129,7 @@ testFailures
117129
| main.rs:22:10:22:19 | b.unwrap() | main.rs:19:34:19:43 | source(...) | main.rs:22:10:22:19 | b.unwrap() | $@ | main.rs:19:34:19:43 | source(...) | source(...) |
118130
| main.rs:27:10:27:10 | a | main.rs:26:13:26:22 | source(...) | main.rs:27:10:27:10 | a | $@ | main.rs:26:13:26:22 | source(...) | source(...) |
119131
| main.rs:29:10:29:10 | b | main.rs:26:13:26:22 | source(...) | main.rs:29:10:29:10 | b | $@ | main.rs:26:13:26:22 | source(...) | source(...) |
120-
| main.rs:43:38:43:38 | n | main.rs:41:30:41:39 | source(...) | main.rs:43:38:43:38 | n | $@ | main.rs:41:30:41:39 | source(...) | source(...) |
121-
| main.rs:47:38:47:38 | n | main.rs:41:30:41:39 | source(...) | main.rs:47:38:47:38 | n | $@ | main.rs:41:30:41:39 | source(...) | source(...) |
122-
| main.rs:63:22:63:22 | m | main.rs:58:22:58:31 | source(...) | main.rs:63:22:63:22 | m | $@ | main.rs:58:22:58:31 | source(...) | source(...) |
123-
| main.rs:85:18:85:34 | ...::read(...) | main.rs:84:32:84:41 | source(...) | main.rs:85:18:85:34 | ...::read(...) | $@ | main.rs:84:32:84:41 | source(...) | source(...) |
132+
| main.rs:51:38:51:38 | n | main.rs:49:30:49:39 | source(...) | main.rs:51:38:51:38 | n | $@ | main.rs:49:30:49:39 | source(...) | source(...) |
133+
| main.rs:55:38:55:38 | n | main.rs:49:30:49:39 | source(...) | main.rs:55:38:55:38 | n | $@ | main.rs:49:30:49:39 | source(...) | source(...) |
134+
| main.rs:71:22:71:22 | m | main.rs:66:22:66:31 | source(...) | main.rs:71:22:71:22 | m | $@ | main.rs:66:22:66:31 | source(...) | source(...) |
135+
| main.rs:93:18:93:34 | ...::read(...) | main.rs:92:32:92:41 | source(...) | main.rs:93:18:93:34 | ...::read(...) | $@ | main.rs:92:32:92:41 | source(...) | source(...) |

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,19 @@ fn i64_clone() {
3232
mod my_clone {
3333
use super::{sink, source};
3434

35-
#[derive(Clone)]
35+
// TODO: Replace manual implementation below with `#[derive(Clone)]`,
36+
// once the extractor expands the `#[derive]` attributes.
37+
// #[derive(Clone)]
3638
struct Wrapper {
3739
n: i64,
3840
}
3941

42+
impl Clone for Wrapper {
43+
fn clone(&self) -> Self {
44+
Wrapper { n: self.n }
45+
}
46+
}
47+
4048
pub fn wrapper_clone() {
4149
let w = Wrapper { n: source(73) };
4250
match w {

0 commit comments

Comments
 (0)