Skip to content

Commit dc9700e

Browse files
committed
Rust: Make SummarizedCallable extend Function instead of string
1 parent 4f262b1 commit dc9700e

File tree

21 files changed

+295
-999
lines changed

21 files changed

+295
-999
lines changed

rust/ql/lib/codeql/rust/dataflow/FlowSummary.qll

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,42 +2,17 @@
22

33
private import rust
44
private import internal.FlowSummaryImpl as Impl
5-
private import codeql.rust.elements.internal.CallExprBaseImpl::Impl as CallExprBaseImpl
65

76
// import all instances below
87
private module Summaries {
98
private import codeql.rust.Frameworks
109
private import codeql.rust.dataflow.internal.ModelsAsData
1110
}
1211

13-
/** Provides the `Range` class used to define the extent of `LibraryCallable`. */
14-
module LibraryCallable {
15-
/** A callable defined in library code, identified by a unique string. */
16-
abstract class Range extends string {
17-
bindingset[this]
18-
Range() { any() }
19-
20-
/** Gets a call to this library callable. */
21-
CallExprBase getACall() {
22-
exists(Resolvable r, string crate |
23-
r = CallExprBaseImpl::getCallResolvable(result) and
24-
this = crate + r.getResolvedPath()
25-
|
26-
crate = r.getResolvedCrateOrigin() + "::_::"
27-
or
28-
not r.hasResolvedCrateOrigin() and
29-
crate = ""
30-
)
31-
}
32-
}
33-
}
34-
35-
final class LibraryCallable = LibraryCallable::Range;
36-
3712
/** Provides the `Range` class used to define the extent of `SummarizedCallable`. */
3813
module SummarizedCallable {
3914
/** A callable with a flow summary, identified by a unique string. */
40-
abstract class Range extends LibraryCallable::Range, Impl::Public::SummarizedCallable {
15+
abstract class Range extends Impl::Public::SummarizedCallable {
4116
bindingset[this]
4217
Range() { any() }
4318

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

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,12 @@ final class DataFlowCallable extends TDataFlowCallable {
4444
/**
4545
* Gets the underlying library callable, if any.
4646
*/
47-
LibraryCallable asLibraryCallable() { this = TLibraryCallable(result) }
47+
SummarizedCallable asSummarizedCallable() { this = TSummarizedCallable(result) }
4848

4949
/** Gets a textual representation of this callable. */
50-
string toString() { result = [this.asCfgScope().toString(), this.asLibraryCallable().toString()] }
50+
string toString() {
51+
result = [this.asCfgScope().toString(), this.asSummarizedCallable().toString()]
52+
}
5153

5254
/** Gets the location of this callable. */
5355
Location getLocation() { result = this.asCfgScope().getLocation() }
@@ -68,12 +70,9 @@ final class DataFlowCall extends TDataFlowCall {
6870
}
6971

7072
DataFlowCallable getEnclosingCallable() {
71-
result = TCfgScope(this.asCallBaseExprCfgNode().getExpr().getEnclosingCfgScope())
73+
result.asCfgScope() = this.asCallBaseExprCfgNode().getExpr().getEnclosingCfgScope()
7274
or
73-
exists(FlowSummaryImpl::Public::SummarizedCallable c |
74-
this.isSummaryCall(c, _) and
75-
result = TLibraryCallable(c)
76-
)
75+
this.isSummaryCall(result.asSummarizedCallable(), _)
7776
}
7877

7978
string toString() {
@@ -419,9 +418,13 @@ module RustDataFlow implements InputSig<Location> {
419418

420419
/** Gets a viable implementation of the target of the given `Call`. */
421420
DataFlowCallable viableCallable(DataFlowCall call) {
422-
result.asCfgScope() = call.asCallBaseExprCfgNode().getCallExprBase().getStaticTarget()
423-
or
424-
result.asLibraryCallable().getACall() = call.asCallBaseExprCfgNode().getCallExprBase()
421+
exists(Callable target |
422+
target = call.asCallBaseExprCfgNode().getCallExprBase().getStaticTarget()
423+
|
424+
target = result.asCfgScope()
425+
or
426+
target = result.asSummarizedCallable()
427+
)
425428
}
426429

427430
/**
@@ -775,7 +778,7 @@ module RustDataFlow implements InputSig<Location> {
775778
predicate allowParameterReturnInSelf(ParameterNode p) {
776779
exists(DataFlowCallable c, ParameterPosition pos |
777780
p.isParameterOf(c, pos) and
778-
FlowSummaryImpl::Private::summaryAllowParameterReturnInSelf(c.asLibraryCallable(), pos)
781+
FlowSummaryImpl::Private::summaryAllowParameterReturnInSelf(c.asSummarizedCallable(), pos)
779782
)
780783
or
781784
VariableCapture::Flow::heuristicAllowInstanceParameterReturnInSelf(p.(ClosureParameterNode)
@@ -986,7 +989,7 @@ private module Cached {
986989
cached
987990
newtype TDataFlowCallable =
988991
TCfgScope(CfgScope scope) or
989-
TLibraryCallable(LibraryCallable c)
992+
TSummarizedCallable(SummarizedCallable c)
990993

991994
/** This is the local flow predicate that is exposed. */
992995
cached

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ module Input implements InputSig<Location, RustDataFlow> {
1313
private import codeql.rust.elements.internal.CallExprBaseImpl::Impl as CallExprBaseImpl
1414
private import codeql.rust.frameworks.stdlib.Stdlib
1515

16-
class SummarizedCallableBase = string;
16+
class SummarizedCallableBase = Function;
1717

1818
abstract private class SourceSinkBase extends AstNode {
1919
/** Gets the associated call. */
@@ -153,7 +153,7 @@ private import Make<Location, RustDataFlow, Input> as Impl
153153

154154
private module StepsInput implements Impl::Private::StepsInputSig {
155155
DataFlowCall getACall(Public::SummarizedCallable sc) {
156-
result.asCallBaseExprCfgNode().getCallExprBase() = sc.(LibraryCallable).getACall()
156+
result.asCallBaseExprCfgNode().getCallExprBase().getStaticTarget() = sc
157157
}
158158

159159
RustDataFlow::Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponent sc) {

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ private import rust
4747
private import codeql.rust.dataflow.FlowSummary
4848
private import codeql.rust.dataflow.FlowSource
4949
private import codeql.rust.dataflow.FlowSink
50+
private import codeql.rust.elements.internal.CallExprBaseImpl::Impl as CallExprBaseImpl
5051

5152
/**
5253
* Holds if in a call to the function with canonical path `path`, defined in the
@@ -120,7 +121,12 @@ private class SummarizedCallableFromModel extends SummarizedCallable::Range {
120121

121122
SummarizedCallableFromModel() {
122123
summaryModel(crate, path, _, _, _, _, _) and
123-
this = crate + "::_::" + path
124+
exists(CallExprBase call, Resolvable r |
125+
call.getStaticTarget() = this and
126+
r = CallExprBaseImpl::getCallResolvable(call) and
127+
r.getResolvedPath() = path and
128+
r.getResolvedCrateOrigin() = crate
129+
)
124130
}
125131

126132
override predicate propagatesFlow(

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ abstract class NodePublic extends TNode {
4444

4545
abstract class Node extends NodePublic {
4646
/** Gets the enclosing callable. */
47-
DataFlowCallable getEnclosingCallable() { result = TCfgScope(this.getCfgScope()) }
47+
DataFlowCallable getEnclosingCallable() { result.asCfgScope() = this.getCfgScope() }
4848

4949
/** Do not call: use `getEnclosingCallable()` instead. */
5050
abstract CfgScope getCfgScope();
@@ -102,9 +102,9 @@ class FlowSummaryNode extends Node, TFlowSummaryNode {
102102
}
103103

104104
override DataFlowCallable getEnclosingCallable() {
105-
result.asLibraryCallable() = this.getSummarizedCallable()
106-
or
107105
result.asCfgScope() = this.getCfgScope()
106+
or
107+
result.asSummarizedCallable() = this.getSummarizedCallable()
108108
}
109109

110110
override Location getLocation() {
@@ -195,7 +195,7 @@ final class SummaryParameterNode extends ParameterNode, FlowSummaryNode {
195195
}
196196

197197
override predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) {
198-
this.getSummarizedCallable() = c.asLibraryCallable() and pos = pos_
198+
this.getSummarizedCallable() = c.asSummarizedCallable() and pos = pos_
199199
}
200200
}
201201

rust/ql/lib/codeql/rust/frameworks/stdlib/Clone.qll

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,9 @@ private import codeql.rust.dataflow.FlowSummary
66
/** A `clone` method. */
77
final class CloneCallable extends SummarizedCallable::Range {
88
CloneCallable() {
9-
// NOTE: The function target may not exist in the database, so we base this
10-
// on method calls.
11-
exists(MethodCallExpr c |
12-
c.getIdentifier().getText() = "clone" and
13-
c.getArgList().getNumberOfArgs() = 0 and
14-
this = c.getResolvedCrateOrigin() + "::_::" + c.getResolvedPath()
15-
)
9+
this.getParamList().hasSelfParam() and
10+
this.getParamList().getNumberOfParams() = 0 and
11+
this.getName().getText() = "clone"
1612
}
1713

1814
final override predicate propagatesFlow(

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,10 @@
6363
| main.rs:238:17:238:25 | source(...) | main.rs:1:1:3:1 | fn source |
6464
| main.rs:239:9:239:15 | sink(...) | main.rs:5:1:7:1 | fn sink |
6565
| main.rs:242:5:242:17 | sink(...) | main.rs:5:1:7:1 | fn sink |
66-
| main.rs:246:13:246:55 | ...::block_on(...) | file://:0:0:0:0 | repo:https://github.com/rust-lang/futures-rs:futures-executor::_::crate::local_pool::block_on |
66+
| main.rs:246:13:246:55 | ...::block_on(...) | file://:0:0:0:0 | fn block_on |
6767
| main.rs:246:41:246:54 | async_source(...) | main.rs:227:1:231:1 | fn async_source |
6868
| main.rs:247:5:247:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
69-
| main.rs:249:5:249:62 | ...::block_on(...) | file://:0:0:0:0 | repo:https://github.com/rust-lang/futures-rs:futures-executor::_::crate::local_pool::block_on |
69+
| main.rs:249:5:249:62 | ...::block_on(...) | file://:0:0:0:0 | fn block_on |
7070
| main.rs:249:33:249:61 | test_async_await_async_part(...) | main.rs:233:1:243:1 | fn test_async_await_async_part |
7171
| main.rs:253:5:253:22 | data_out_of_call(...) | main.rs:16:1:19:1 | fn data_out_of_call |
7272
| main.rs:254:5:254:35 | data_out_of_call_side_effect1(...) | main.rs:35:1:40:1 | fn data_out_of_call_side_effect1 |

rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected

Lines changed: 40 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
localStep
2-
| file://:0:0:0:0 | [summary param] self in lang:std::_::<crate::path::Path>::canonicalize | file://:0:0:0:0 | [summary] read: Argument[self].OptionalBarrier[normalize-path] in lang:std::_::<crate::path::Path>::canonicalize |
32
| main.rs:3:11:3:11 | [SSA] i | main.rs:4:12:4:12 | i |
43
| main.rs:3:11:3:11 | i | main.rs:3:11:3:11 | [SSA] i |
54
| main.rs:3:11:3:11 | i | main.rs:3:11:3:11 | i |
@@ -323,46 +322,46 @@ localStep
323322
| main.rs:263:9:263:10 | i1 | main.rs:263:9:263:10 | i1 |
324323
| main.rs:263:14:263:16 | TryExpr | main.rs:263:9:263:10 | i1 |
325324
| main.rs:266:5:266:11 | Some(...) | main.rs:260:41:267:1 | { ... } |
326-
| main.rs:270:9:270:10 | [SSA] r1 | main.rs:271:29:271:30 | r1 |
325+
| main.rs:270:9:270:10 | [SSA] r1 | main.rs:271:28:271:29 | r1 |
327326
| main.rs:270:9:270:10 | r1 | main.rs:270:9:270:10 | [SSA] r1 |
328327
| main.rs:270:9:270:10 | r1 | main.rs:270:9:270:10 | r1 |
329-
| main.rs:270:33:270:46 | Ok(...) | main.rs:270:9:270:10 | r1 |
328+
| main.rs:270:32:270:45 | Ok(...) | main.rs:270:9:270:10 | r1 |
330329
| main.rs:271:9:271:11 | [SSA] o1a | main.rs:273:10:273:12 | o1a |
331330
| main.rs:271:9:271:11 | o1a | main.rs:271:9:271:11 | [SSA] o1a |
332331
| main.rs:271:9:271:11 | o1a | main.rs:271:9:271:11 | o1a |
333-
| main.rs:271:29:271:30 | [post] r1 | main.rs:272:29:272:30 | r1 |
334-
| main.rs:271:29:271:30 | [post] receiver for r1 | main.rs:271:29:271:30 | [post] r1 |
335-
| main.rs:271:29:271:30 | r1 | main.rs:271:29:271:30 | receiver for r1 |
336-
| main.rs:271:29:271:30 | r1 | main.rs:272:29:272:30 | r1 |
337-
| main.rs:271:29:271:35 | r1.ok() | main.rs:271:9:271:11 | o1a |
332+
| main.rs:271:28:271:29 | [post] r1 | main.rs:272:28:272:29 | r1 |
333+
| main.rs:271:28:271:29 | [post] receiver for r1 | main.rs:271:28:271:29 | [post] r1 |
334+
| main.rs:271:28:271:29 | r1 | main.rs:271:28:271:29 | receiver for r1 |
335+
| main.rs:271:28:271:29 | r1 | main.rs:272:28:272:29 | r1 |
336+
| main.rs:271:28:271:34 | r1.ok() | main.rs:271:9:271:11 | o1a |
338337
| main.rs:272:9:272:11 | [SSA] o1b | main.rs:274:10:274:12 | o1b |
339338
| main.rs:272:9:272:11 | o1b | main.rs:272:9:272:11 | [SSA] o1b |
340339
| main.rs:272:9:272:11 | o1b | main.rs:272:9:272:11 | o1b |
341-
| main.rs:272:29:272:30 | [post] receiver for r1 | main.rs:272:29:272:30 | [post] r1 |
342-
| main.rs:272:29:272:30 | r1 | main.rs:272:29:272:30 | receiver for r1 |
343-
| main.rs:272:29:272:36 | r1.err() | main.rs:272:9:272:11 | o1b |
340+
| main.rs:272:28:272:29 | [post] receiver for r1 | main.rs:272:28:272:29 | [post] r1 |
341+
| main.rs:272:28:272:29 | r1 | main.rs:272:28:272:29 | receiver for r1 |
342+
| main.rs:272:28:272:35 | r1.err() | main.rs:272:9:272:11 | o1b |
344343
| main.rs:273:10:273:12 | [post] receiver for o1a | main.rs:273:10:273:12 | [post] o1a |
345344
| main.rs:273:10:273:12 | o1a | main.rs:273:10:273:12 | receiver for o1a |
346345
| main.rs:274:10:274:12 | [post] receiver for o1b | main.rs:274:10:274:12 | [post] o1b |
347346
| main.rs:274:10:274:12 | o1b | main.rs:274:10:274:12 | receiver for o1b |
348-
| main.rs:276:9:276:10 | [SSA] r2 | main.rs:277:29:277:30 | r2 |
347+
| main.rs:276:9:276:10 | [SSA] r2 | main.rs:277:28:277:29 | r2 |
349348
| main.rs:276:9:276:10 | r2 | main.rs:276:9:276:10 | [SSA] r2 |
350349
| main.rs:276:9:276:10 | r2 | main.rs:276:9:276:10 | r2 |
351-
| main.rs:276:33:276:47 | Err(...) | main.rs:276:9:276:10 | r2 |
350+
| main.rs:276:32:276:46 | Err(...) | main.rs:276:9:276:10 | r2 |
352351
| main.rs:277:9:277:11 | [SSA] o2a | main.rs:279:10:279:12 | o2a |
353352
| main.rs:277:9:277:11 | o2a | main.rs:277:9:277:11 | [SSA] o2a |
354353
| main.rs:277:9:277:11 | o2a | main.rs:277:9:277:11 | o2a |
355-
| main.rs:277:29:277:30 | [post] r2 | main.rs:278:29:278:30 | r2 |
356-
| main.rs:277:29:277:30 | [post] receiver for r2 | main.rs:277:29:277:30 | [post] r2 |
357-
| main.rs:277:29:277:30 | r2 | main.rs:277:29:277:30 | receiver for r2 |
358-
| main.rs:277:29:277:30 | r2 | main.rs:278:29:278:30 | r2 |
359-
| main.rs:277:29:277:35 | r2.ok() | main.rs:277:9:277:11 | o2a |
354+
| main.rs:277:28:277:29 | [post] r2 | main.rs:278:28:278:29 | r2 |
355+
| main.rs:277:28:277:29 | [post] receiver for r2 | main.rs:277:28:277:29 | [post] r2 |
356+
| main.rs:277:28:277:29 | r2 | main.rs:277:28:277:29 | receiver for r2 |
357+
| main.rs:277:28:277:29 | r2 | main.rs:278:28:278:29 | r2 |
358+
| main.rs:277:28:277:34 | r2.ok() | main.rs:277:9:277:11 | o2a |
360359
| main.rs:278:9:278:11 | [SSA] o2b | main.rs:280:10:280:12 | o2b |
361360
| main.rs:278:9:278:11 | o2b | main.rs:278:9:278:11 | [SSA] o2b |
362361
| main.rs:278:9:278:11 | o2b | main.rs:278:9:278:11 | o2b |
363-
| main.rs:278:29:278:30 | [post] receiver for r2 | main.rs:278:29:278:30 | [post] r2 |
364-
| main.rs:278:29:278:30 | r2 | main.rs:278:29:278:30 | receiver for r2 |
365-
| main.rs:278:29:278:36 | r2.err() | main.rs:278:9:278:11 | o2b |
362+
| main.rs:278:28:278:29 | [post] receiver for r2 | main.rs:278:28:278:29 | [post] r2 |
363+
| main.rs:278:28:278:29 | r2 | main.rs:278:28:278:29 | receiver for r2 |
364+
| main.rs:278:28:278:35 | r2.err() | main.rs:278:9:278:11 | o2b |
366365
| main.rs:279:10:279:12 | [post] receiver for o2a | main.rs:279:10:279:12 | [post] o2a |
367366
| main.rs:279:10:279:12 | o2a | main.rs:279:10:279:12 | receiver for o2a |
368367
| main.rs:280:10:280:12 | [post] receiver for o2b | main.rs:280:10:280:12 | [post] o2b |
@@ -702,23 +701,23 @@ localStep
702701
| main.rs:469:9:469:9 | [SSA] c | main.rs:474:10:474:10 | c |
703702
| main.rs:469:9:469:9 | c | main.rs:469:9:469:9 | [SSA] c |
704703
| main.rs:469:9:469:9 | c | main.rs:469:9:469:9 | c |
705-
| main.rs:469:13:469:13 | [post] b | main.rs:470:19:470:19 | b |
704+
| main.rs:469:13:469:13 | [post] b | main.rs:470:18:470:18 | b |
706705
| main.rs:469:13:469:13 | [post] receiver for b | main.rs:469:13:469:13 | [post] b |
707706
| main.rs:469:13:469:13 | b | main.rs:469:13:469:13 | receiver for b |
708-
| main.rs:469:13:469:13 | b | main.rs:470:19:470:19 | b |
707+
| main.rs:469:13:469:13 | b | main.rs:470:18:470:18 | b |
709708
| main.rs:469:13:469:28 | [post] receiver for b.parse() | main.rs:469:13:469:28 | [post] b.parse() |
710709
| main.rs:469:13:469:28 | b.parse() | main.rs:469:13:469:28 | receiver for b.parse() |
711710
| main.rs:469:13:469:37 | ... .unwrap() | main.rs:469:9:469:9 | c |
712711
| main.rs:470:9:470:9 | [SSA] d | main.rs:475:10:475:10 | d |
713712
| main.rs:470:9:470:9 | d | main.rs:470:9:470:9 | [SSA] d |
714713
| main.rs:470:9:470:9 | d | main.rs:470:9:470:9 | d |
715-
| main.rs:470:19:470:19 | [post] b | main.rs:473:17:473:17 | b |
716-
| main.rs:470:19:470:19 | [post] receiver for b | main.rs:470:19:470:19 | [post] b |
717-
| main.rs:470:19:470:19 | b | main.rs:470:19:470:19 | receiver for b |
718-
| main.rs:470:19:470:19 | b | main.rs:473:17:473:17 | b |
719-
| main.rs:470:19:470:27 | [post] receiver for b.parse() | main.rs:470:19:470:27 | [post] b.parse() |
720-
| main.rs:470:19:470:27 | b.parse() | main.rs:470:19:470:27 | receiver for b.parse() |
721-
| main.rs:470:19:470:36 | ... .unwrap() | main.rs:470:9:470:9 | d |
714+
| main.rs:470:18:470:18 | [post] b | main.rs:473:17:473:17 | b |
715+
| main.rs:470:18:470:18 | [post] receiver for b | main.rs:470:18:470:18 | [post] b |
716+
| main.rs:470:18:470:18 | b | main.rs:470:18:470:18 | receiver for b |
717+
| main.rs:470:18:470:18 | b | main.rs:473:17:473:17 | b |
718+
| main.rs:470:18:470:26 | [post] receiver for b.parse() | main.rs:470:18:470:26 | [post] b.parse() |
719+
| main.rs:470:18:470:26 | b.parse() | main.rs:470:18:470:26 | receiver for b.parse() |
720+
| main.rs:470:18:470:35 | ... .unwrap() | main.rs:470:9:470:9 | d |
722721
| main.rs:479:9:479:10 | [SSA] vs | main.rs:481:10:481:11 | vs |
723722
| main.rs:479:9:479:10 | vs | main.rs:479:9:479:10 | [SSA] vs |
724723
| main.rs:479:9:479:10 | vs | main.rs:479:9:479:10 | vs |
@@ -749,19 +748,19 @@ localStep
749748
| main.rs:488:10:488:10 | v | main.rs:488:10:488:10 | [SSA] v |
750749
| main.rs:488:10:488:10 | v | main.rs:488:10:488:10 | v |
751750
| main.rs:488:15:488:16 | [post] receiver for vs | main.rs:488:15:488:16 | [post] vs |
752-
| main.rs:488:15:488:16 | [post] vs | main.rs:492:27:492:28 | vs |
751+
| main.rs:488:15:488:16 | [post] vs | main.rs:492:26:492:27 | vs |
753752
| main.rs:488:15:488:16 | vs | main.rs:488:15:488:16 | receiver for vs |
754-
| main.rs:488:15:488:16 | vs | main.rs:492:27:492:28 | vs |
753+
| main.rs:488:15:488:16 | vs | main.rs:492:26:492:27 | vs |
755754
| main.rs:492:9:492:11 | [SSA] vs2 | main.rs:493:15:493:17 | vs2 |
756755
| main.rs:492:9:492:11 | vs2 | main.rs:492:9:492:11 | [SSA] vs2 |
757756
| main.rs:492:9:492:11 | vs2 | main.rs:492:9:492:11 | vs2 |
758-
| main.rs:492:27:492:28 | [post] receiver for vs | main.rs:492:27:492:28 | [post] vs |
759-
| main.rs:492:27:492:28 | [post] vs | main.rs:497:5:497:6 | vs |
760-
| main.rs:492:27:492:28 | vs | main.rs:492:27:492:28 | receiver for vs |
761-
| main.rs:492:27:492:28 | vs | main.rs:497:5:497:6 | vs |
762-
| main.rs:492:27:492:35 | [post] receiver for vs.iter() | main.rs:492:27:492:35 | [post] vs.iter() |
763-
| main.rs:492:27:492:35 | vs.iter() | main.rs:492:27:492:35 | receiver for vs.iter() |
764-
| main.rs:492:27:492:45 | ... .collect() | main.rs:492:9:492:11 | vs2 |
757+
| main.rs:492:26:492:27 | [post] receiver for vs | main.rs:492:26:492:27 | [post] vs |
758+
| main.rs:492:26:492:27 | [post] vs | main.rs:497:5:497:6 | vs |
759+
| main.rs:492:26:492:27 | vs | main.rs:492:26:492:27 | receiver for vs |
760+
| main.rs:492:26:492:27 | vs | main.rs:497:5:497:6 | vs |
761+
| main.rs:492:26:492:34 | [post] receiver for vs.iter() | main.rs:492:26:492:34 | [post] vs.iter() |
762+
| main.rs:492:26:492:34 | vs.iter() | main.rs:492:26:492:34 | receiver for vs.iter() |
763+
| main.rs:492:26:492:44 | ... .collect() | main.rs:492:9:492:11 | vs2 |
765764
| main.rs:493:10:493:10 | [SSA] v | main.rs:494:14:494:14 | v |
766765
| main.rs:493:10:493:10 | v | main.rs:493:10:493:10 | [SSA] v |
767766
| main.rs:493:10:493:10 | v | main.rs:493:10:493:10 | v |
@@ -908,8 +907,8 @@ storeStep
908907
| main.rs:261:19:261:28 | source(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:261:14:261:29 | Some(...) |
909908
| main.rs:262:19:262:19 | 2 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:262:14:262:20 | Some(...) |
910909
| main.rs:266:10:266:10 | 0 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:266:5:266:11 | Some(...) |
911-
| main.rs:270:36:270:45 | source(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:532:8:532:54 | Ok | main.rs:270:33:270:46 | Ok(...) |
912-
| main.rs:276:37:276:46 | source(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:537:9:537:55 | Err | main.rs:276:33:276:47 | Err(...) |
910+
| main.rs:270:35:270:44 | source(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:532:8:532:54 | Ok | main.rs:270:32:270:45 | Ok(...) |
911+
| main.rs:276:36:276:45 | source(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:537:9:537:55 | Err | main.rs:276:32:276:46 | Err(...) |
913912
| main.rs:284:35:284:44 | source(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:532:8:532:54 | Ok | main.rs:284:32:284:45 | Ok(...) |
914913
| main.rs:285:35:285:35 | 2 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:532:8:532:54 | Ok | main.rs:285:32:285:36 | Ok(...) |
915914
| main.rs:286:36:286:45 | source(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:537:9:537:55 | Err | main.rs:286:32:286:46 | Err(...) |

0 commit comments

Comments
 (0)