Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 23 additions & 4 deletions rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ private import codeql.dataflow.internal.DataFlowImpl
private import rust
private import SsaImpl as SsaImpl
private import codeql.rust.controlflow.internal.Scope as Scope
private import codeql.rust.elements.internal.PathResolution
private import codeql.rust.controlflow.ControlFlowGraph
private import codeql.rust.controlflow.CfgNodes
private import codeql.rust.dataflow.Ssa
Expand Down Expand Up @@ -120,12 +121,30 @@ final class ParameterPosition extends TParameterPosition {
}
}

/** Holds if `call` invokes a qualified path that resolves to a method. */
private predicate callToMethod(CallExpr call) {
exists(Path path |
path = call.getFunction().(PathExpr).getPath() and
path.hasQualifier() and

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this restriction needed?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As far as I can tell, a method can only be called as a function by including a qualifying path. So if the path doesn't have a qualifier, then it will never resolve to a method. So I'm including it for clarity and (maybe) performance.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I think you are right.

resolvePath(path).(Function).getParamList().hasSelfParam()
)
}

/** Holds if `arg` is an argument of `call` at the position `pos`. */
private predicate isArgumentForCall(ExprCfgNode arg, CallExprBaseCfgNode call, ParameterPosition pos) {
arg = call.getArgument(pos.getPosition())
or
// The self argument in a method call.
arg = call.(MethodCallExprCfgNode).getReceiver() and pos.isSelf()
if callToMethod(call.(CallExprCfgNode).getCallExpr())
then (
// The first argument is for the `self` parameter
arg = call.getArgument(0) and pos.isSelf()
or
// Succeeding arguments are shifted left
arg = call.getArgument(pos.getPosition() + 1)
) else (
// The self argument in a method call.
arg = call.(MethodCallExprCfgNode).getReceiver() and pos.isSelf()
or
arg = call.getArgument(pos.getPosition())
)
}

/**
Expand Down
189 changes: 126 additions & 63 deletions rust/ql/test/library-tests/dataflow/global/inline-flow.expected
Original file line number Diff line number Diff line change
Expand Up @@ -28,31 +28,58 @@ edges
| main.rs:55:26:55:26 | a | main.rs:51:21:51:26 | ...: i64 | provenance | |
| main.rs:55:26:55:26 | a | main.rs:55:13:55:27 | pass_through(...) | provenance | |
| main.rs:67:23:67:28 | ...: i64 | main.rs:68:14:68:14 | n | provenance | |
| main.rs:70:31:76:5 | { ... } | main.rs:88:13:88:25 | mn.get_data(...) | provenance | |
| main.rs:74:13:74:21 | source(...) | main.rs:70:31:76:5 | { ... } | provenance | |
| main.rs:77:28:77:33 | ...: i64 | main.rs:77:43:83:5 | { ... } | provenance | |
| main.rs:88:9:88:9 | a | main.rs:89:10:89:10 | a | provenance | |
| main.rs:88:13:88:25 | mn.get_data(...) | main.rs:88:9:88:9 | a | provenance | |
| main.rs:94:9:94:9 | a | main.rs:95:16:95:16 | a | provenance | |
| main.rs:94:13:94:21 | source(...) | main.rs:94:9:94:9 | a | provenance | |
| main.rs:95:16:95:16 | a | main.rs:67:23:67:28 | ...: i64 | provenance | |
| main.rs:100:9:100:9 | a | main.rs:101:29:101:29 | a | provenance | |
| main.rs:100:13:100:21 | source(...) | main.rs:100:9:100:9 | a | provenance | |
| main.rs:101:9:101:9 | b | main.rs:102:10:102:10 | b | provenance | |
| main.rs:101:13:101:30 | mn.data_through(...) | main.rs:101:9:101:9 | b | provenance | |
| main.rs:101:29:101:29 | a | main.rs:77:28:77:33 | ...: i64 | provenance | |
| main.rs:101:29:101:29 | a | main.rs:101:13:101:30 | mn.data_through(...) | provenance | |
| main.rs:138:9:138:9 | a | main.rs:139:10:139:10 | a | provenance | |
| main.rs:138:13:138:21 | source(...) | main.rs:138:9:138:9 | a | provenance | |
| main.rs:148:13:148:13 | c | main.rs:149:14:149:14 | c | provenance | |
| main.rs:148:17:148:25 | source(...) | main.rs:148:13:148:13 | c | provenance | |
| main.rs:164:25:164:30 | ...: i64 | main.rs:165:10:165:10 | c | provenance | |
| main.rs:165:6:165:6 | [post] n [&ref] | main.rs:164:12:164:22 | ...: ... [Return] [&ref] | provenance | |
| main.rs:165:10:165:10 | c | main.rs:165:6:165:6 | [post] n [&ref] | provenance | |
| main.rs:173:13:173:13 | [post] m [&ref] | main.rs:174:11:174:11 | m [&ref] | provenance | |
| main.rs:173:16:173:25 | source(...) | main.rs:164:25:164:30 | ...: i64 | provenance | |
| main.rs:173:16:173:25 | source(...) | main.rs:173:13:173:13 | [post] m [&ref] | provenance | |
| main.rs:174:11:174:11 | m [&ref] | main.rs:174:10:174:11 | * ... | provenance | |
| main.rs:71:31:77:5 | { ... } | main.rs:90:13:90:25 | mn.get_data(...) | provenance | |
| main.rs:75:13:75:21 | source(...) | main.rs:71:31:77:5 | { ... } | provenance | |
| main.rs:79:28:79:33 | ...: i64 | main.rs:79:43:85:5 | { ... } | provenance | |
| main.rs:90:9:90:9 | a | main.rs:91:10:91:10 | a | provenance | |
| main.rs:90:13:90:25 | mn.get_data(...) | main.rs:90:9:90:9 | a | provenance | |
| main.rs:96:9:96:9 | a | main.rs:97:16:97:16 | a | provenance | |
| main.rs:96:13:96:21 | source(...) | main.rs:96:9:96:9 | a | provenance | |
| main.rs:97:16:97:16 | a | main.rs:67:23:67:28 | ...: i64 | provenance | |
| main.rs:102:9:102:9 | a | main.rs:103:29:103:29 | a | provenance | |
| main.rs:102:13:102:21 | source(...) | main.rs:102:9:102:9 | a | provenance | |
| main.rs:103:9:103:9 | b | main.rs:104:10:104:10 | b | provenance | |
| main.rs:103:13:103:30 | mn.data_through(...) | main.rs:103:9:103:9 | b | provenance | |
| main.rs:103:29:103:29 | a | main.rs:79:28:79:33 | ...: i64 | provenance | |
| main.rs:103:29:103:29 | a | main.rs:103:13:103:30 | mn.data_through(...) | provenance | |
| main.rs:128:12:128:17 | ...: i64 | main.rs:129:24:129:24 | n | provenance | |
| main.rs:129:9:129:26 | MyInt {...} [MyInt] | main.rs:128:28:130:5 | { ... } [MyInt] | provenance | |
| main.rs:129:24:129:24 | n | main.rs:129:9:129:26 | MyInt {...} [MyInt] | provenance | |
| main.rs:134:9:134:9 | n [MyInt] | main.rs:135:9:135:26 | MyInt {...} [MyInt] | provenance | |
| main.rs:134:13:134:34 | ...::new(...) [MyInt] | main.rs:134:9:134:9 | n [MyInt] | provenance | |
| main.rs:134:24:134:33 | source(...) | main.rs:128:12:128:17 | ...: i64 | provenance | |
| main.rs:134:24:134:33 | source(...) | main.rs:134:13:134:34 | ...::new(...) [MyInt] | provenance | |
| main.rs:135:9:135:26 | MyInt {...} [MyInt] | main.rs:135:24:135:24 | m | provenance | |
| main.rs:135:24:135:24 | m | main.rs:136:10:136:10 | m | provenance | |
| main.rs:175:18:175:21 | SelfParam [MyInt] | main.rs:175:48:177:5 | { ... } [MyInt] | provenance | |
| main.rs:179:26:179:37 | ...: MyInt [MyInt] | main.rs:179:49:181:5 | { ... } [MyInt] | provenance | |
| main.rs:185:9:185:9 | a [MyInt] | main.rs:187:49:187:49 | a [MyInt] | provenance | |
| main.rs:185:13:185:38 | MyInt {...} [MyInt] | main.rs:185:9:185:9 | a [MyInt] | provenance | |
| main.rs:185:28:185:36 | source(...) | main.rs:185:13:185:38 | MyInt {...} [MyInt] | provenance | |
| main.rs:187:9:187:26 | MyInt {...} [MyInt] | main.rs:187:24:187:24 | c | provenance | |
| main.rs:187:24:187:24 | c | main.rs:188:10:188:10 | c | provenance | |
| main.rs:187:30:187:53 | ...::take_self(...) [MyInt] | main.rs:187:9:187:26 | MyInt {...} [MyInt] | provenance | |
| main.rs:187:49:187:49 | a [MyInt] | main.rs:175:18:175:21 | SelfParam [MyInt] | provenance | |
| main.rs:187:49:187:49 | a [MyInt] | main.rs:187:30:187:53 | ...::take_self(...) [MyInt] | provenance | |
| main.rs:191:9:191:9 | b [MyInt] | main.rs:192:54:192:54 | b [MyInt] | provenance | |
| main.rs:191:13:191:39 | MyInt {...} [MyInt] | main.rs:191:9:191:9 | b [MyInt] | provenance | |
| main.rs:191:28:191:37 | source(...) | main.rs:191:13:191:39 | MyInt {...} [MyInt] | provenance | |
| main.rs:192:9:192:26 | MyInt {...} [MyInt] | main.rs:192:24:192:24 | c | provenance | |
| main.rs:192:24:192:24 | c | main.rs:193:10:193:10 | c | provenance | |
| main.rs:192:30:192:55 | ...::take_second(...) [MyInt] | main.rs:192:9:192:26 | MyInt {...} [MyInt] | provenance | |
| main.rs:192:54:192:54 | b [MyInt] | main.rs:179:26:179:37 | ...: MyInt [MyInt] | provenance | |
| main.rs:192:54:192:54 | b [MyInt] | main.rs:192:30:192:55 | ...::take_second(...) [MyInt] | provenance | |
| main.rs:202:9:202:9 | a | main.rs:203:10:203:10 | a | provenance | |
| main.rs:202:13:202:21 | source(...) | main.rs:202:9:202:9 | a | provenance | |
| main.rs:212:13:212:13 | c | main.rs:213:14:213:14 | c | provenance | |
| main.rs:212:17:212:25 | source(...) | main.rs:212:13:212:13 | c | provenance | |
| main.rs:228:25:228:30 | ...: i64 | main.rs:229:10:229:10 | c | provenance | |
| main.rs:229:6:229:6 | [post] n [&ref] | main.rs:228:12:228:22 | ...: ... [Return] [&ref] | provenance | |
| main.rs:229:10:229:10 | c | main.rs:229:6:229:6 | [post] n [&ref] | provenance | |
| main.rs:237:13:237:13 | [post] m [&ref] | main.rs:238:11:238:11 | m [&ref] | provenance | |
| main.rs:237:16:237:25 | source(...) | main.rs:228:25:228:30 | ...: i64 | provenance | |
| main.rs:237:16:237:25 | source(...) | main.rs:237:13:237:13 | [post] m [&ref] | provenance | |
| main.rs:238:11:238:11 | m [&ref] | main.rs:238:10:238:11 | * ... | provenance | |
nodes
| main.rs:12:28:14:1 | { ... } | semmle.label | { ... } |
| main.rs:13:5:13:13 | source(...) | semmle.label | source(...) |
Expand Down Expand Up @@ -87,52 +114,88 @@ nodes
| main.rs:56:10:56:10 | b | semmle.label | b |
| main.rs:67:23:67:28 | ...: i64 | semmle.label | ...: i64 |
| main.rs:68:14:68:14 | n | semmle.label | n |
| main.rs:70:31:76:5 | { ... } | semmle.label | { ... } |
| main.rs:74:13:74:21 | source(...) | semmle.label | source(...) |
| main.rs:77:28:77:33 | ...: i64 | semmle.label | ...: i64 |
| main.rs:77:43:83:5 | { ... } | semmle.label | { ... } |
| main.rs:88:9:88:9 | a | semmle.label | a |
| main.rs:88:13:88:25 | mn.get_data(...) | semmle.label | mn.get_data(...) |
| main.rs:89:10:89:10 | a | semmle.label | a |
| main.rs:94:9:94:9 | a | semmle.label | a |
| main.rs:94:13:94:21 | source(...) | semmle.label | source(...) |
| main.rs:95:16:95:16 | a | semmle.label | a |
| main.rs:100:9:100:9 | a | semmle.label | a |
| main.rs:100:13:100:21 | source(...) | semmle.label | source(...) |
| main.rs:101:9:101:9 | b | semmle.label | b |
| main.rs:101:13:101:30 | mn.data_through(...) | semmle.label | mn.data_through(...) |
| main.rs:101:29:101:29 | a | semmle.label | a |
| main.rs:102:10:102:10 | b | semmle.label | b |
| main.rs:138:9:138:9 | a | semmle.label | a |
| main.rs:138:13:138:21 | source(...) | semmle.label | source(...) |
| main.rs:139:10:139:10 | a | semmle.label | a |
| main.rs:148:13:148:13 | c | semmle.label | c |
| main.rs:148:17:148:25 | source(...) | semmle.label | source(...) |
| main.rs:149:14:149:14 | c | semmle.label | c |
| main.rs:164:12:164:22 | ...: ... [Return] [&ref] | semmle.label | ...: ... [Return] [&ref] |
| main.rs:164:25:164:30 | ...: i64 | semmle.label | ...: i64 |
| main.rs:165:6:165:6 | [post] n [&ref] | semmle.label | [post] n [&ref] |
| main.rs:165:10:165:10 | c | semmle.label | c |
| main.rs:173:13:173:13 | [post] m [&ref] | semmle.label | [post] m [&ref] |
| main.rs:173:16:173:25 | source(...) | semmle.label | source(...) |
| main.rs:174:10:174:11 | * ... | semmle.label | * ... |
| main.rs:174:11:174:11 | m [&ref] | semmle.label | m [&ref] |
| main.rs:71:31:77:5 | { ... } | semmle.label | { ... } |
| main.rs:75:13:75:21 | source(...) | semmle.label | source(...) |
| main.rs:79:28:79:33 | ...: i64 | semmle.label | ...: i64 |
| main.rs:79:43:85:5 | { ... } | semmle.label | { ... } |
| main.rs:90:9:90:9 | a | semmle.label | a |
| main.rs:90:13:90:25 | mn.get_data(...) | semmle.label | mn.get_data(...) |
| main.rs:91:10:91:10 | a | semmle.label | a |
| main.rs:96:9:96:9 | a | semmle.label | a |
| main.rs:96:13:96:21 | source(...) | semmle.label | source(...) |
| main.rs:97:16:97:16 | a | semmle.label | a |
| main.rs:102:9:102:9 | a | semmle.label | a |
| main.rs:102:13:102:21 | source(...) | semmle.label | source(...) |
| main.rs:103:9:103:9 | b | semmle.label | b |
| main.rs:103:13:103:30 | mn.data_through(...) | semmle.label | mn.data_through(...) |
| main.rs:103:29:103:29 | a | semmle.label | a |
| main.rs:104:10:104:10 | b | semmle.label | b |
| main.rs:128:12:128:17 | ...: i64 | semmle.label | ...: i64 |
| main.rs:128:28:130:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] |
| main.rs:129:9:129:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] |
| main.rs:129:24:129:24 | n | semmle.label | n |
| main.rs:134:9:134:9 | n [MyInt] | semmle.label | n [MyInt] |
| main.rs:134:13:134:34 | ...::new(...) [MyInt] | semmle.label | ...::new(...) [MyInt] |
| main.rs:134:24:134:33 | source(...) | semmle.label | source(...) |
| main.rs:135:9:135:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] |
| main.rs:135:24:135:24 | m | semmle.label | m |
| main.rs:136:10:136:10 | m | semmle.label | m |
| main.rs:175:18:175:21 | SelfParam [MyInt] | semmle.label | SelfParam [MyInt] |
| main.rs:175:48:177:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] |
| main.rs:179:26:179:37 | ...: MyInt [MyInt] | semmle.label | ...: MyInt [MyInt] |
| main.rs:179:49:181:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] |
| main.rs:185:9:185:9 | a [MyInt] | semmle.label | a [MyInt] |
| main.rs:185:13:185:38 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] |
| main.rs:185:28:185:36 | source(...) | semmle.label | source(...) |
| main.rs:187:9:187:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] |
| main.rs:187:24:187:24 | c | semmle.label | c |
| main.rs:187:30:187:53 | ...::take_self(...) [MyInt] | semmle.label | ...::take_self(...) [MyInt] |
| main.rs:187:49:187:49 | a [MyInt] | semmle.label | a [MyInt] |
| main.rs:188:10:188:10 | c | semmle.label | c |
| main.rs:191:9:191:9 | b [MyInt] | semmle.label | b [MyInt] |
| main.rs:191:13:191:39 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] |
| main.rs:191:28:191:37 | source(...) | semmle.label | source(...) |
| main.rs:192:9:192:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] |
| main.rs:192:24:192:24 | c | semmle.label | c |
| main.rs:192:30:192:55 | ...::take_second(...) [MyInt] | semmle.label | ...::take_second(...) [MyInt] |
| main.rs:192:54:192:54 | b [MyInt] | semmle.label | b [MyInt] |
| main.rs:193:10:193:10 | c | semmle.label | c |
| main.rs:202:9:202:9 | a | semmle.label | a |
| main.rs:202:13:202:21 | source(...) | semmle.label | source(...) |
| main.rs:203:10:203:10 | a | semmle.label | a |
| main.rs:212:13:212:13 | c | semmle.label | c |
| main.rs:212:17:212:25 | source(...) | semmle.label | source(...) |
| main.rs:213:14:213:14 | c | semmle.label | c |
| main.rs:228:12:228:22 | ...: ... [Return] [&ref] | semmle.label | ...: ... [Return] [&ref] |
| main.rs:228:25:228:30 | ...: i64 | semmle.label | ...: i64 |
| main.rs:229:6:229:6 | [post] n [&ref] | semmle.label | [post] n [&ref] |
| main.rs:229:10:229:10 | c | semmle.label | c |
| main.rs:237:13:237:13 | [post] m [&ref] | semmle.label | [post] m [&ref] |
| main.rs:237:16:237:25 | source(...) | semmle.label | source(...) |
| main.rs:238:10:238:11 | * ... | semmle.label | * ... |
| main.rs:238:11:238:11 | m [&ref] | semmle.label | m [&ref] |
subpaths
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
| 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] |
| 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(...) |
| 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] |
| 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] |
| 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] |
| 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] |
testFailures
#select
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
| 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(...) |
Loading