Skip to content

Commit b08f535

Browse files
authored
Merge pull request #18772 from paldepind/rust-method-call
Rust: Adjust argument position when call expression is for method
2 parents 4b53e1c + 3f19279 commit b08f535

File tree

6 files changed

+376
-198
lines changed

6 files changed

+376
-198
lines changed

rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll

+23-4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ private import codeql.dataflow.internal.DataFlowImpl
99
private import rust
1010
private import SsaImpl as SsaImpl
1111
private import codeql.rust.controlflow.internal.Scope as Scope
12+
private import codeql.rust.elements.internal.PathResolution
1213
private import codeql.rust.controlflow.ControlFlowGraph
1314
private import codeql.rust.controlflow.CfgNodes
1415
private import codeql.rust.dataflow.Ssa
@@ -120,12 +121,30 @@ final class ParameterPosition extends TParameterPosition {
120121
}
121122
}
122123

124+
/** Holds if `call` invokes a qualified path that resolves to a method. */
125+
private predicate callToMethod(CallExpr call) {
126+
exists(Path path |
127+
path = call.getFunction().(PathExpr).getPath() and
128+
path.hasQualifier() and
129+
resolvePath(path).(Function).getParamList().hasSelfParam()
130+
)
131+
}
132+
123133
/** Holds if `arg` is an argument of `call` at the position `pos`. */
124134
private predicate isArgumentForCall(ExprCfgNode arg, CallExprBaseCfgNode call, ParameterPosition pos) {
125-
arg = call.getArgument(pos.getPosition())
126-
or
127-
// The self argument in a method call.
128-
arg = call.(MethodCallExprCfgNode).getReceiver() and pos.isSelf()
135+
if callToMethod(call.(CallExprCfgNode).getCallExpr())
136+
then (
137+
// The first argument is for the `self` parameter
138+
arg = call.getArgument(0) and pos.isSelf()
139+
or
140+
// Succeeding arguments are shifted left
141+
arg = call.getArgument(pos.getPosition() + 1)
142+
) else (
143+
// The self argument in a method call.
144+
arg = call.(MethodCallExprCfgNode).getReceiver() and pos.isSelf()
145+
or
146+
arg = call.getArgument(pos.getPosition())
147+
)
129148
}
130149

131150
/**

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

+126-63
Original file line numberDiff line numberDiff line change
@@ -28,31 +28,58 @@ edges
2828
| main.rs:55:26:55:26 | a | main.rs:51:21:51:26 | ...: i64 | provenance | |
2929
| main.rs:55:26:55:26 | a | main.rs:55:13:55:27 | pass_through(...) | provenance | |
3030
| 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 | |
45-
| main.rs:138:9:138:9 | a | main.rs:139:10:139:10 | a | provenance | |
46-
| main.rs:138:13:138:21 | source(...) | main.rs:138:9:138:9 | a | provenance | |
47-
| main.rs:148:13:148:13 | c | main.rs:149:14:149:14 | c | provenance | |
48-
| main.rs:148:17:148:25 | source(...) | main.rs:148:13:148:13 | c | provenance | |
49-
| main.rs:164:25:164:30 | ...: i64 | main.rs:165:10:165:10 | c | provenance | |
50-
| main.rs:165:6:165:6 | [post] n [&ref] | main.rs:164:12:164:22 | ...: ... [Return] [&ref] | provenance | |
51-
| main.rs:165:10:165:10 | c | main.rs:165:6:165:6 | [post] n [&ref] | provenance | |
52-
| main.rs:173:13:173:13 | [post] m [&ref] | main.rs:174:11:174:11 | m [&ref] | provenance | |
53-
| main.rs:173:16:173:25 | source(...) | main.rs:164:25:164:30 | ...: i64 | provenance | |
54-
| main.rs:173:16:173:25 | source(...) | main.rs:173:13:173:13 | [post] m [&ref] | provenance | |
55-
| main.rs:174:11:174:11 | m [&ref] | main.rs:174:10:174:11 | * ... | provenance | |
31+
| main.rs:71:31:77:5 | { ... } | main.rs:90:13:90:25 | mn.get_data(...) | provenance | |
32+
| main.rs:75:13:75:21 | source(...) | main.rs:71:31:77:5 | { ... } | provenance | |
33+
| main.rs:79:28:79:33 | ...: i64 | main.rs:79:43:85:5 | { ... } | provenance | |
34+
| main.rs:90:9:90:9 | a | main.rs:91:10:91:10 | a | provenance | |
35+
| main.rs:90:13:90:25 | mn.get_data(...) | main.rs:90:9:90:9 | a | provenance | |
36+
| main.rs:96:9:96:9 | a | main.rs:97:16:97:16 | a | provenance | |
37+
| main.rs:96:13:96:21 | source(...) | main.rs:96:9:96:9 | a | provenance | |
38+
| main.rs:97:16:97:16 | a | main.rs:67:23:67:28 | ...: i64 | provenance | |
39+
| main.rs:102:9:102:9 | a | main.rs:103:29:103:29 | a | provenance | |
40+
| main.rs:102:13:102:21 | source(...) | main.rs:102:9:102:9 | a | provenance | |
41+
| main.rs:103:9:103:9 | b | main.rs:104:10:104:10 | b | provenance | |
42+
| main.rs:103:13:103:30 | mn.data_through(...) | main.rs:103:9:103:9 | b | provenance | |
43+
| main.rs:103:29:103:29 | a | main.rs:79:28:79:33 | ...: i64 | provenance | |
44+
| main.rs:103:29:103:29 | a | main.rs:103:13:103:30 | mn.data_through(...) | provenance | |
45+
| main.rs:128:12:128:17 | ...: i64 | main.rs:129:24:129:24 | n | provenance | |
46+
| main.rs:129:9:129:26 | MyInt {...} [MyInt] | main.rs:128:28:130:5 | { ... } [MyInt] | provenance | |
47+
| main.rs:129:24:129:24 | n | main.rs:129:9:129:26 | MyInt {...} [MyInt] | provenance | |
48+
| main.rs:134:9:134:9 | n [MyInt] | main.rs:135:9:135:26 | MyInt {...} [MyInt] | provenance | |
49+
| main.rs:134:13:134:34 | ...::new(...) [MyInt] | main.rs:134:9:134:9 | n [MyInt] | provenance | |
50+
| main.rs:134:24:134:33 | source(...) | main.rs:128:12:128:17 | ...: i64 | provenance | |
51+
| main.rs:134:24:134:33 | source(...) | main.rs:134:13:134:34 | ...::new(...) [MyInt] | provenance | |
52+
| main.rs:135:9:135:26 | MyInt {...} [MyInt] | main.rs:135:24:135:24 | m | provenance | |
53+
| main.rs:135:24:135:24 | m | main.rs:136:10:136:10 | m | provenance | |
54+
| main.rs:175:18:175:21 | SelfParam [MyInt] | main.rs:175:48:177:5 | { ... } [MyInt] | provenance | |
55+
| main.rs:179:26:179:37 | ...: MyInt [MyInt] | main.rs:179:49:181:5 | { ... } [MyInt] | provenance | |
56+
| main.rs:185:9:185:9 | a [MyInt] | main.rs:187:49:187:49 | a [MyInt] | provenance | |
57+
| main.rs:185:13:185:38 | MyInt {...} [MyInt] | main.rs:185:9:185:9 | a [MyInt] | provenance | |
58+
| main.rs:185:28:185:36 | source(...) | main.rs:185:13:185:38 | MyInt {...} [MyInt] | provenance | |
59+
| main.rs:187:9:187:26 | MyInt {...} [MyInt] | main.rs:187:24:187:24 | c | provenance | |
60+
| main.rs:187:24:187:24 | c | main.rs:188:10:188:10 | c | provenance | |
61+
| main.rs:187:30:187:53 | ...::take_self(...) [MyInt] | main.rs:187:9:187:26 | MyInt {...} [MyInt] | provenance | |
62+
| main.rs:187:49:187:49 | a [MyInt] | main.rs:175:18:175:21 | SelfParam [MyInt] | provenance | |
63+
| main.rs:187:49:187:49 | a [MyInt] | main.rs:187:30:187:53 | ...::take_self(...) [MyInt] | provenance | |
64+
| main.rs:191:9:191:9 | b [MyInt] | main.rs:192:54:192:54 | b [MyInt] | provenance | |
65+
| main.rs:191:13:191:39 | MyInt {...} [MyInt] | main.rs:191:9:191:9 | b [MyInt] | provenance | |
66+
| main.rs:191:28:191:37 | source(...) | main.rs:191:13:191:39 | MyInt {...} [MyInt] | provenance | |
67+
| main.rs:192:9:192:26 | MyInt {...} [MyInt] | main.rs:192:24:192:24 | c | provenance | |
68+
| main.rs:192:24:192:24 | c | main.rs:193:10:193:10 | c | provenance | |
69+
| main.rs:192:30:192:55 | ...::take_second(...) [MyInt] | main.rs:192:9:192:26 | MyInt {...} [MyInt] | provenance | |
70+
| main.rs:192:54:192:54 | b [MyInt] | main.rs:179:26:179:37 | ...: MyInt [MyInt] | provenance | |
71+
| main.rs:192:54:192:54 | b [MyInt] | main.rs:192:30:192:55 | ...::take_second(...) [MyInt] | provenance | |
72+
| main.rs:202:9:202:9 | a | main.rs:203:10:203:10 | a | provenance | |
73+
| main.rs:202:13:202:21 | source(...) | main.rs:202:9:202:9 | a | provenance | |
74+
| main.rs:212:13:212:13 | c | main.rs:213:14:213:14 | c | provenance | |
75+
| main.rs:212:17:212:25 | source(...) | main.rs:212:13:212:13 | c | provenance | |
76+
| main.rs:228:25:228:30 | ...: i64 | main.rs:229:10:229:10 | c | provenance | |
77+
| main.rs:229:6:229:6 | [post] n [&ref] | main.rs:228:12:228:22 | ...: ... [Return] [&ref] | provenance | |
78+
| main.rs:229:10:229:10 | c | main.rs:229:6:229:6 | [post] n [&ref] | provenance | |
79+
| main.rs:237:13:237:13 | [post] m [&ref] | main.rs:238:11:238:11 | m [&ref] | provenance | |
80+
| main.rs:237:16:237:25 | source(...) | main.rs:228:25:228:30 | ...: i64 | provenance | |
81+
| main.rs:237:16:237:25 | source(...) | main.rs:237:13:237:13 | [post] m [&ref] | provenance | |
82+
| main.rs:238:11:238:11 | m [&ref] | main.rs:238:10:238:11 | * ... | provenance | |
5683
nodes
5784
| main.rs:12:28:14:1 | { ... } | semmle.label | { ... } |
5885
| main.rs:13:5:13:13 | source(...) | semmle.label | source(...) |
@@ -87,52 +114,88 @@ nodes
87114
| main.rs:56:10:56:10 | b | semmle.label | b |
88115
| main.rs:67:23:67:28 | ...: i64 | semmle.label | ...: i64 |
89116
| main.rs:68:14:68:14 | n | semmle.label | n |
90-
| main.rs:70:31:76:5 | { ... } | semmle.label | { ... } |
91-
| main.rs:74:13:74:21 | source(...) | semmle.label | source(...) |
92-
| main.rs:77:28:77:33 | ...: i64 | semmle.label | ...: i64 |
93-
| main.rs:77:43:83:5 | { ... } | semmle.label | { ... } |
94-
| main.rs:88:9:88:9 | a | semmle.label | a |
95-
| main.rs:88:13:88:25 | mn.get_data(...) | semmle.label | mn.get_data(...) |
96-
| main.rs:89:10:89:10 | a | semmle.label | a |
97-
| main.rs:94:9:94:9 | a | semmle.label | a |
98-
| main.rs:94:13:94:21 | source(...) | semmle.label | source(...) |
99-
| main.rs:95:16:95:16 | a | semmle.label | a |
100-
| main.rs:100:9:100:9 | a | semmle.label | a |
101-
| main.rs:100:13:100:21 | source(...) | semmle.label | source(...) |
102-
| main.rs:101:9:101:9 | b | semmle.label | b |
103-
| main.rs:101:13:101:30 | mn.data_through(...) | semmle.label | mn.data_through(...) |
104-
| main.rs:101:29:101:29 | a | semmle.label | a |
105-
| main.rs:102:10:102:10 | b | semmle.label | b |
106-
| main.rs:138:9:138:9 | a | semmle.label | a |
107-
| main.rs:138:13:138:21 | source(...) | semmle.label | source(...) |
108-
| main.rs:139:10:139:10 | a | semmle.label | a |
109-
| main.rs:148:13:148:13 | c | semmle.label | c |
110-
| main.rs:148:17:148:25 | source(...) | semmle.label | source(...) |
111-
| main.rs:149:14:149:14 | c | semmle.label | c |
112-
| main.rs:164:12:164:22 | ...: ... [Return] [&ref] | semmle.label | ...: ... [Return] [&ref] |
113-
| main.rs:164:25:164:30 | ...: i64 | semmle.label | ...: i64 |
114-
| main.rs:165:6:165:6 | [post] n [&ref] | semmle.label | [post] n [&ref] |
115-
| main.rs:165:10:165:10 | c | semmle.label | c |
116-
| main.rs:173:13:173:13 | [post] m [&ref] | semmle.label | [post] m [&ref] |
117-
| main.rs:173:16:173:25 | source(...) | semmle.label | source(...) |
118-
| main.rs:174:10:174:11 | * ... | semmle.label | * ... |
119-
| main.rs:174:11:174:11 | m [&ref] | semmle.label | m [&ref] |
117+
| main.rs:71:31:77:5 | { ... } | semmle.label | { ... } |
118+
| main.rs:75:13:75:21 | source(...) | semmle.label | source(...) |
119+
| main.rs:79:28:79:33 | ...: i64 | semmle.label | ...: i64 |
120+
| main.rs:79:43:85:5 | { ... } | semmle.label | { ... } |
121+
| main.rs:90:9:90:9 | a | semmle.label | a |
122+
| main.rs:90:13:90:25 | mn.get_data(...) | semmle.label | mn.get_data(...) |
123+
| main.rs:91:10:91:10 | a | semmle.label | a |
124+
| main.rs:96:9:96:9 | a | semmle.label | a |
125+
| main.rs:96:13:96:21 | source(...) | semmle.label | source(...) |
126+
| main.rs:97:16:97:16 | a | semmle.label | a |
127+
| main.rs:102:9:102:9 | a | semmle.label | a |
128+
| main.rs:102:13:102:21 | source(...) | semmle.label | source(...) |
129+
| main.rs:103:9:103:9 | b | semmle.label | b |
130+
| main.rs:103:13:103:30 | mn.data_through(...) | semmle.label | mn.data_through(...) |
131+
| main.rs:103:29:103:29 | a | semmle.label | a |
132+
| main.rs:104:10:104:10 | b | semmle.label | b |
133+
| main.rs:128:12:128:17 | ...: i64 | semmle.label | ...: i64 |
134+
| main.rs:128:28:130:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] |
135+
| main.rs:129:9:129:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] |
136+
| main.rs:129:24:129:24 | n | semmle.label | n |
137+
| main.rs:134:9:134:9 | n [MyInt] | semmle.label | n [MyInt] |
138+
| main.rs:134:13:134:34 | ...::new(...) [MyInt] | semmle.label | ...::new(...) [MyInt] |
139+
| main.rs:134:24:134:33 | source(...) | semmle.label | source(...) |
140+
| main.rs:135:9:135:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] |
141+
| main.rs:135:24:135:24 | m | semmle.label | m |
142+
| main.rs:136:10:136:10 | m | semmle.label | m |
143+
| main.rs:175:18:175:21 | SelfParam [MyInt] | semmle.label | SelfParam [MyInt] |
144+
| main.rs:175:48:177:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] |
145+
| main.rs:179:26:179:37 | ...: MyInt [MyInt] | semmle.label | ...: MyInt [MyInt] |
146+
| main.rs:179:49:181:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] |
147+
| main.rs:185:9:185:9 | a [MyInt] | semmle.label | a [MyInt] |
148+
| main.rs:185:13:185:38 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] |
149+
| main.rs:185:28:185:36 | source(...) | semmle.label | source(...) |
150+
| main.rs:187:9:187:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] |
151+
| main.rs:187:24:187:24 | c | semmle.label | c |
152+
| main.rs:187:30:187:53 | ...::take_self(...) [MyInt] | semmle.label | ...::take_self(...) [MyInt] |
153+
| main.rs:187:49:187:49 | a [MyInt] | semmle.label | a [MyInt] |
154+
| main.rs:188:10:188:10 | c | semmle.label | c |
155+
| main.rs:191:9:191:9 | b [MyInt] | semmle.label | b [MyInt] |
156+
| main.rs:191:13:191:39 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] |
157+
| main.rs:191:28:191:37 | source(...) | semmle.label | source(...) |
158+
| main.rs:192:9:192:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] |
159+
| main.rs:192:24:192:24 | c | semmle.label | c |
160+
| main.rs:192:30:192:55 | ...::take_second(...) [MyInt] | semmle.label | ...::take_second(...) [MyInt] |
161+
| main.rs:192:54:192:54 | b [MyInt] | semmle.label | b [MyInt] |
162+
| main.rs:193:10:193:10 | c | semmle.label | c |
163+
| main.rs:202:9:202:9 | a | semmle.label | a |
164+
| main.rs:202:13:202:21 | source(...) | semmle.label | source(...) |
165+
| main.rs:203:10:203:10 | a | semmle.label | a |
166+
| main.rs:212:13:212:13 | c | semmle.label | c |
167+
| main.rs:212:17:212:25 | source(...) | semmle.label | source(...) |
168+
| main.rs:213:14:213:14 | c | semmle.label | c |
169+
| main.rs:228:12:228:22 | ...: ... [Return] [&ref] | semmle.label | ...: ... [Return] [&ref] |
170+
| main.rs:228:25:228:30 | ...: i64 | semmle.label | ...: i64 |
171+
| main.rs:229:6:229:6 | [post] n [&ref] | semmle.label | [post] n [&ref] |
172+
| main.rs:229:10:229:10 | c | semmle.label | c |
173+
| main.rs:237:13:237:13 | [post] m [&ref] | semmle.label | [post] m [&ref] |
174+
| main.rs:237:16:237:25 | source(...) | semmle.label | source(...) |
175+
| main.rs:238:10:238:11 | * ... | semmle.label | * ... |
176+
| main.rs:238:11:238:11 | m [&ref] | semmle.label | m [&ref] |
120177
subpaths
121178
| 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(...) |
122179
| 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(...) |
123180
| 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(...) |
124-
| 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(...) |
125-
| main.rs:173:16:173:25 | source(...) | main.rs:164:25:164:30 | ...: i64 | main.rs:164:12:164:22 | ...: ... [Return] [&ref] | main.rs:173:13:173:13 | [post] m [&ref] |
181+
| main.rs:103:29:103:29 | a | main.rs:79:28:79:33 | ...: i64 | main.rs:79:43:85:5 | { ... } | main.rs:103:13:103:30 | mn.data_through(...) |
182+
| main.rs:134:24:134:33 | source(...) | main.rs:128:12:128:17 | ...: i64 | main.rs:128:28:130:5 | { ... } [MyInt] | main.rs:134:13:134:34 | ...::new(...) [MyInt] |
183+
| main.rs:187:49:187:49 | a [MyInt] | main.rs:175:18:175:21 | SelfParam [MyInt] | main.rs:175:48:177:5 | { ... } [MyInt] | main.rs:187:30:187:53 | ...::take_self(...) [MyInt] |
184+
| main.rs:192:54:192:54 | b [MyInt] | main.rs:179:26:179:37 | ...: MyInt [MyInt] | main.rs:179:49:181:5 | { ... } [MyInt] | main.rs:192:30:192:55 | ...::take_second(...) [MyInt] |
185+
| main.rs:237:16:237:25 | source(...) | main.rs:228:25:228:30 | ...: i64 | main.rs:228:12:228:22 | ...: ... [Return] [&ref] | main.rs:237:13:237:13 | [post] m [&ref] |
126186
testFailures
127187
#select
128188
| 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(...) |
129189
| 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(...) |
130190
| 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(...) |
131191
| 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(...) |
132192
| 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(...) |
133-
| 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(...) |
134-
| 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(...) |
135-
| 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(...) |
136-
| main.rs:139:10:139:10 | a | main.rs:138:13:138:21 | source(...) | main.rs:139:10:139:10 | a | $@ | main.rs:138:13:138:21 | source(...) | source(...) |
137-
| main.rs:149:14:149:14 | c | main.rs:148:17:148:25 | source(...) | main.rs:149:14:149:14 | c | $@ | main.rs:148:17:148:25 | source(...) | source(...) |
138-
| main.rs:174:10:174:11 | * ... | main.rs:173:16:173:25 | source(...) | main.rs:174:10:174:11 | * ... | $@ | main.rs:173:16:173:25 | source(...) | source(...) |
193+
| main.rs:68:14:68:14 | n | main.rs:96:13:96:21 | source(...) | main.rs:68:14:68:14 | n | $@ | main.rs:96:13:96:21 | source(...) | source(...) |
194+
| main.rs:91:10:91:10 | a | main.rs:75:13:75:21 | source(...) | main.rs:91:10:91:10 | a | $@ | main.rs:75:13:75:21 | source(...) | source(...) |
195+
| main.rs:104:10:104:10 | b | main.rs:102:13:102:21 | source(...) | main.rs:104:10:104:10 | b | $@ | main.rs:102:13:102:21 | source(...) | source(...) |
196+
| main.rs:136:10:136:10 | m | main.rs:134:24:134:33 | source(...) | main.rs:136:10:136:10 | m | $@ | main.rs:134:24:134:33 | source(...) | source(...) |
197+
| main.rs:188:10:188:10 | c | main.rs:185:28:185:36 | source(...) | main.rs:188:10:188:10 | c | $@ | main.rs:185:28:185:36 | source(...) | source(...) |
198+
| main.rs:193:10:193:10 | c | main.rs:191:28:191:37 | source(...) | main.rs:193:10:193:10 | c | $@ | main.rs:191:28:191:37 | source(...) | source(...) |
199+
| main.rs:203:10:203:10 | a | main.rs:202:13:202:21 | source(...) | main.rs:203:10:203:10 | a | $@ | main.rs:202:13:202:21 | source(...) | source(...) |
200+
| main.rs:213:14:213:14 | c | main.rs:212:17:212:25 | source(...) | main.rs:213:14:213:14 | c | $@ | main.rs:212:17:212:25 | source(...) | source(...) |
201+
| main.rs:238:10:238:11 | * ... | main.rs:237:16:237:25 | source(...) | main.rs:238:10:238:11 | * ... | $@ | main.rs:237:16:237:25 | source(...) | source(...) |

0 commit comments

Comments
 (0)