mirror of
https://github.com/github/codeql.git
synced 2026-04-23 07:45:17 +02:00
Merge branch 'main' into shared-bb-dominates
This commit is contained in:
3
rust/ql/.generated.list
generated
3
rust/ql/.generated.list
generated
@@ -368,12 +368,10 @@ lib/codeql/rust/elements/internal/RecordExprFieldConstructor.qll 11620bc4e2dc7b3
|
||||
lib/codeql/rust/elements/internal/RecordExprFieldListConstructor.qll 3a0d6ec872792c400d3a0a5ed1c5051b248a597a4b17ada1a078ea5d972b6721 52bae8222e7aa5bc89b73bec3fd1c3c1de0fe11bf30ccf5668454f63fbfc9b83
|
||||
lib/codeql/rust/elements/internal/RecordExprFieldListImpl.qll 1210c23c0495f5d1a72409afc8c559f8da2b8c71340ff2944af9d1f684d0a856 fea96b053cad4135ab09b1c070a4c9f26507dd890a62c30772cf3e2358686640
|
||||
lib/codeql/rust/elements/internal/RecordFieldConstructor.qll 9fc05f5101e48a45a028c479b35ec3d2f1a3cc33f0938667fcb813c5a4ab9526 98791dcf7f3209524f6132f9c26980e499cbcf94c1559e95c67544732245f05b
|
||||
lib/codeql/rust/elements/internal/RecordFieldImpl.qll 2612dae3c95c9064420a3494872213f7fd7a3e1133243f4adea8a30808a209ae 143b75bb539a1bfea16e1c764a1f549522ef9c8d6d5de3fef377bbf67ba42075
|
||||
lib/codeql/rust/elements/internal/RecordFieldListConstructor.qll 9f1d916f3784092dcbff7224451c8f4f0daf6f8293a466b0a30ec9b92cd41358 8aafe377714a134287362c4b96439c1c6baa5a31c2c36a544bd5f73e9213477a
|
||||
lib/codeql/rust/elements/internal/RecordFieldListImpl.qll 1fa89578a1e27a7d6dd84c1cabbff08b38a3160ea0864c7be660984cf96fda1e 9fa6a775f0609f557548168424f02d068abb3978ba20a716c21619e904bd99f3
|
||||
lib/codeql/rust/elements/internal/RecordPatConstructor.qll a5507e0db7cb297c74faa9d571e613799d7b3327584e4696d1d5c219d1ea84ba aa5c8042a88e99dca09a6ea7775bd6963825a3c2dd5d61f118dbbc57a336c4a1
|
||||
lib/codeql/rust/elements/internal/RecordPatFieldConstructor.qll 6e1880ed05401b39c1e5e1a4eedb0a8a18c857aeb79c44c812cdc879eb3af1f4 1f7a5a2d4df22f7d7479fe348665d8a1411de47f8cc5b95b30ba4c3490ed8f61
|
||||
lib/codeql/rust/elements/internal/RecordPatFieldImpl.qll 04bc31b857c8250096d9d1bf3fad1e556a28d83bb3f3b48a3f049048d1e6785f 5853105e55650d05a4b196f17b89baf12b898df0a010e4f88289ce01d16a0379
|
||||
lib/codeql/rust/elements/internal/RecordPatFieldListConstructor.qll b8f0ef9b75ffe6be6ce7e601d528f0a1b871123c63e39cead3fd13b8bd4f54b7 166f07c708ab8b3de6bfaf193bac93081b2aacad046aa86de7441085dd20a8c5
|
||||
lib/codeql/rust/elements/internal/RecordPatFieldListImpl.qll 2d1dd9910480eb65c59fcef2e1576ce639be85c35d90e4bce721ce22ec742ba3 1e788a2d7d00e9f96dbf7e93d3a18d5bfb4d7749194ff8e9810e9053fa88a94b
|
||||
lib/codeql/rust/elements/internal/RefExprConstructor.qll 9ad08c0f3d980a56a2af8857cb84db589941d20ab3ae5c8ece004ccaccaaf950 4cac3ace31b7ed77a72e989fce9cdbae2247f03c28a3f0c50d67385d02c7f193
|
||||
@@ -413,7 +411,6 @@ lib/codeql/rust/elements/internal/TryExprImpl.qll 00635685db339557cfb89fad0bfc13
|
||||
lib/codeql/rust/elements/internal/TupleExprConstructor.qll 71c38786723225d3d90399b8a085b2b2664c62256654db9e1288fadd56745b9d 639ad70b49ebadc027127fbdc9de14e5180169a4285908233bc38ccac6f14110
|
||||
lib/codeql/rust/elements/internal/TupleExprImpl.qll 23a0e4367fbcfcec3e2cf4a429f329a222b399c6729dd60f7ea42550273a6132 615f3b4897fdcbfddcf5c58e6edd64bf6e395923af89cc4e2a336099168bb6ad
|
||||
lib/codeql/rust/elements/internal/TupleFieldConstructor.qll 89d3cf2540235044ed5a89706cfbdebc5cdf9180fd5b6d3376c79a1b2c0430c0 16861fe089aac8e42a5a90d81dd48d5015391d0a06c78ca02bd876d65378699f
|
||||
lib/codeql/rust/elements/internal/TupleFieldImpl.qll f86d5df1598b9276bf2d6cb21a1daec8b27cef7a98db2b2ce91e4e0f9b3870ec b6db10ba5f6351bc1874daf47047ba74ada8b0011f355a44b6d529a1e9003657
|
||||
lib/codeql/rust/elements/internal/TupleFieldListConstructor.qll 4335ba2061b6e4968db9ec05c0b4d3e6a564db89a2df69e036f317672a7900b1 0b8dded875dbf696cf588e8c21acc27332a2ff66ced7bfabdfc1ad621991f888
|
||||
lib/codeql/rust/elements/internal/TupleFieldListImpl.qll ec17ddfe1d03210b7737f9c96b9d4003a91e504f3174e4b0eeba8a429eda2d6e ef6fb91c0d6b14b4d6bea6e516d5425d51d490956075ef314c72da59bfff5621
|
||||
lib/codeql/rust/elements/internal/TuplePatConstructor.qll 2a5e83ad5b8713a732e610128aeddf14e9b344402d6cf30ff0b43aa39e838418 6d467f7141307523994f03ed7b8e8b1a5bcf860963c9934b90e54582ea38096a
|
||||
|
||||
3
rust/ql/.gitattributes
generated
vendored
3
rust/ql/.gitattributes
generated
vendored
@@ -370,12 +370,10 @@
|
||||
/lib/codeql/rust/elements/internal/RecordExprFieldListConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/RecordExprFieldListImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/RecordFieldConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/RecordFieldImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/RecordFieldListConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/RecordFieldListImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/RecordPatConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/RecordPatFieldConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/RecordPatFieldImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/RecordPatFieldListConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/RecordPatFieldListImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/RefExprConstructor.qll linguist-generated
|
||||
@@ -415,7 +413,6 @@
|
||||
/lib/codeql/rust/elements/internal/TupleExprConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/TupleExprImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/TupleFieldConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/TupleFieldImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/TupleFieldListConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/TupleFieldListImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/TuplePatConstructor.qll linguist-generated
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
| Macro calls - resolved | 2 |
|
||||
| Macro calls - total | 2 |
|
||||
| Macro calls - unresolved | 0 |
|
||||
| Taint edges - number of edges | 3 |
|
||||
| Taint edges - number of edges | 4 |
|
||||
| Taint reach - nodes tainted | 0 |
|
||||
| Taint reach - per million nodes | 0 |
|
||||
| Taint sinks - cryptographic operations | 0 |
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
| Macro calls - resolved | 2 |
|
||||
| Macro calls - total | 2 |
|
||||
| Macro calls - unresolved | 0 |
|
||||
| Taint edges - number of edges | 3 |
|
||||
| Taint edges - number of edges | 4 |
|
||||
| Taint reach - nodes tainted | 0 |
|
||||
| Taint reach - per million nodes | 0 |
|
||||
| Taint sinks - cryptographic operations | 0 |
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
| Macro calls - resolved | 2 |
|
||||
| Macro calls - total | 2 |
|
||||
| Macro calls - unresolved | 0 |
|
||||
| Taint edges - number of edges | 3 |
|
||||
| Taint edges - number of edges | 4 |
|
||||
| Taint reach - nodes tainted | 0 |
|
||||
| Taint reach - per million nodes | 0 |
|
||||
| Taint sinks - cryptographic operations | 0 |
|
||||
|
||||
@@ -100,6 +100,32 @@ class ModeledEnvironmentSource extends EnvironmentSource::Range {
|
||||
ModeledEnvironmentSource() { sourceNode(this, "environment-source") }
|
||||
}
|
||||
|
||||
/**
|
||||
* A data flow source corresponding to the program's database reads.
|
||||
*/
|
||||
final class DatabaseSource = DatabaseSource::Range;
|
||||
|
||||
/**
|
||||
* Provides a class for modeling new sources for the program's database reads.
|
||||
*/
|
||||
module DatabaseSource {
|
||||
/**
|
||||
* A data flow source corresponding to the program's database reads.
|
||||
*/
|
||||
abstract class Range extends ThreatModelSource::Range {
|
||||
override string getThreatModel() { result = "database" }
|
||||
|
||||
override string getSourceType() { result = "DatabaseSource" }
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* An externally modeled source for data from the program's database.
|
||||
*/
|
||||
class ModeledDatabaseSource extends DatabaseSource::Range {
|
||||
ModeledDatabaseSource() { sourceNode(this, "database") }
|
||||
}
|
||||
|
||||
/**
|
||||
* A data flow source for remote (network) data.
|
||||
*/
|
||||
|
||||
@@ -4,3 +4,4 @@
|
||||
|
||||
private import codeql.rust.frameworks.rustcrypto.RustCrypto
|
||||
private import codeql.rust.frameworks.Sqlx
|
||||
private import codeql.rust.frameworks.stdlib.Clone
|
||||
|
||||
@@ -241,7 +241,7 @@ final class RecordExprCfgNode extends Nodes::RecordExprCfgNode {
|
||||
exists(RecordExprField ref |
|
||||
ref = node.getRecordExprFieldList().getAField() and
|
||||
any(ChildMapping mapping).hasCfgChild(node, ref.getExpr(), this, result) and
|
||||
field = ref.getNameRef().getText()
|
||||
field = ref.getFieldName()
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -265,12 +265,8 @@ final class RecordPatCfgNode extends Nodes::RecordPatCfgNode {
|
||||
PatCfgNode getFieldPat(string field) {
|
||||
exists(RecordPatField rpf |
|
||||
rpf = node.getRecordPatFieldList().getAField() and
|
||||
any(ChildMapping mapping).hasCfgChild(node, rpf.getPat(), this, result)
|
||||
|
|
||||
field = rpf.getNameRef().getText()
|
||||
or
|
||||
not rpf.hasNameRef() and
|
||||
field = result.(IdentPatCfgNode).getName().getText()
|
||||
any(ChildMapping mapping).hasCfgChild(node, rpf.getPat(), this, result) and
|
||||
field = rpf.getFieldName()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,8 +25,6 @@ module DataFlow {
|
||||
|
||||
final class Content = DataFlowImpl::Content;
|
||||
|
||||
final class VariantContent = DataFlowImpl::VariantContent;
|
||||
|
||||
final class ContentSet = DataFlowImpl::ContentSet;
|
||||
|
||||
/**
|
||||
|
||||
@@ -82,35 +82,6 @@ module Ssa {
|
||||
*/
|
||||
final CfgNode getAFirstRead() { SsaImpl::firstRead(this, result) }
|
||||
|
||||
/**
|
||||
* Gets a last control flow node that reads the value of this SSA definition.
|
||||
* That is, a read that can reach the end of the enclosing CFG scope, or another
|
||||
* SSA definition for the source variable, without passing through any other read.
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* ```rust
|
||||
* fn phi(b : bool) { // defines b_0
|
||||
* let mut x = 1; // defines x_0
|
||||
* println!("{}", x);
|
||||
* println!("{}", x + 1); // last read of x_0
|
||||
*
|
||||
* if b { // last read of b_0
|
||||
* x = 2; // defines x_1
|
||||
* println!("{}", x);
|
||||
* println!("{}", x + 1); // last read of x_1
|
||||
* } else {
|
||||
* x = 3; // defines x_2
|
||||
* println!("{}", x);
|
||||
* println!("{}", x + 1); // last read of x_2
|
||||
* }
|
||||
* // defines x_3 = phi(x_1, x_2)
|
||||
* println!("{}", x); // last read of x_3
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
final CfgNode getALastRead() { SsaImpl::lastRead(this, result) }
|
||||
|
||||
/**
|
||||
* Holds if `read1` and `read2` are adjacent reads of this SSA definition.
|
||||
* That is, `read2` can be reached from `read1` without passing through
|
||||
|
||||
@@ -14,7 +14,6 @@ private import codeql.rust.controlflow.CfgNodes
|
||||
private import codeql.rust.dataflow.Ssa
|
||||
private import codeql.rust.dataflow.FlowSummary
|
||||
private import FlowSummaryImpl as FlowSummaryImpl
|
||||
private import codeql.rust.elements.internal.PathResolution as PathResolution
|
||||
|
||||
/**
|
||||
* A return kind. A return kind describes how a value can be returned from a
|
||||
@@ -661,7 +660,7 @@ private module VariantInLib {
|
||||
}
|
||||
|
||||
/** A tuple variant from library code. */
|
||||
class VariantInLibTupleFieldContent extends VariantContent, TVariantInLibTupleFieldContent {
|
||||
class VariantInLibTupleFieldContent extends Content, TVariantInLibTupleFieldContent {
|
||||
private VariantInLib::VariantInLib v;
|
||||
private int pos_;
|
||||
|
||||
@@ -740,82 +739,73 @@ abstract class Content extends TContent {
|
||||
abstract Location getLocation();
|
||||
}
|
||||
|
||||
/**
|
||||
* A variant of an `enum`. In addition to the variant itself, this also includes the
|
||||
* position (for tuple variants) or the field name (for record variants).
|
||||
*/
|
||||
abstract class VariantContent extends Content { }
|
||||
|
||||
private TupleField getVariantTupleField(Variant v, int i) {
|
||||
result = v.getFieldList().(TupleFieldList).getField(i)
|
||||
/** A field belonging to either a variant or a struct. */
|
||||
abstract class FieldContent extends Content {
|
||||
/** Gets an access to this field. */
|
||||
pragma[nomagic]
|
||||
abstract FieldExprCfgNode getAnAccess();
|
||||
}
|
||||
|
||||
/** A tuple variant. */
|
||||
private class VariantTupleFieldContent extends VariantContent, TVariantTupleFieldContent {
|
||||
private Variant v;
|
||||
private int pos_;
|
||||
/** A tuple field belonging to either a variant or a struct. */
|
||||
class TupleFieldContent extends FieldContent, TTupleFieldContent {
|
||||
private TupleField field;
|
||||
|
||||
VariantTupleFieldContent() { this = TVariantTupleFieldContent(v, pos_) }
|
||||
TupleFieldContent() { this = TTupleFieldContent(field) }
|
||||
|
||||
Variant getVariant(int pos) { result = v and pos = pos_ }
|
||||
predicate isVariantField(Variant v, int pos) { field.isVariantField(v, pos) }
|
||||
|
||||
predicate isStructField(Struct s, int pos) { field.isStructField(s, pos) }
|
||||
|
||||
override FieldExprCfgNode getAnAccess() { none() } // TODO
|
||||
|
||||
final override string toString() {
|
||||
exists(string name |
|
||||
name = v.getName().getText() and
|
||||
exists(Variant v, int pos, string vname |
|
||||
this.isVariantField(v, pos) and
|
||||
vname = v.getName().getText() and
|
||||
// only print indices when the arity is > 1
|
||||
if exists(getVariantTupleField(v, 1)) then result = name + "(" + pos_ + ")" else result = name
|
||||
if exists(v.getTupleField(1)) then result = vname + "(" + pos + ")" else result = vname
|
||||
)
|
||||
or
|
||||
exists(Struct s, int pos, string sname |
|
||||
this.isStructField(s, pos) and
|
||||
sname = s.getName().getText() and
|
||||
// only print indices when the arity is > 1
|
||||
if exists(s.getTupleField(1)) then result = sname + "(" + pos + ")" else result = sname
|
||||
)
|
||||
}
|
||||
|
||||
final override Location getLocation() { result = getVariantTupleField(v, pos_).getLocation() }
|
||||
final override Location getLocation() { result = field.getLocation() }
|
||||
}
|
||||
|
||||
private RecordField getVariantRecordField(Variant v, string field) {
|
||||
result = v.getFieldList().(RecordFieldList).getAField() and
|
||||
field = result.getName().getText()
|
||||
}
|
||||
/** A record field belonging to either a variant or a struct. */
|
||||
class RecordFieldContent extends FieldContent, TRecordFieldContent {
|
||||
private RecordField field;
|
||||
|
||||
/** A record variant. */
|
||||
private class VariantRecordFieldContent extends VariantContent, TVariantRecordFieldContent {
|
||||
private Variant v;
|
||||
private string field_;
|
||||
RecordFieldContent() { this = TRecordFieldContent(field) }
|
||||
|
||||
VariantRecordFieldContent() { this = TVariantRecordFieldContent(v, field_) }
|
||||
predicate isVariantField(Variant v, string name) { field.isVariantField(v, name) }
|
||||
|
||||
Variant getVariant(string field) { result = v and field = field_ }
|
||||
predicate isStructField(Struct s, string name) { field.isStructField(s, name) }
|
||||
|
||||
override FieldExprCfgNode getAnAccess() { none() } // TODO
|
||||
|
||||
final override string toString() {
|
||||
exists(string name |
|
||||
name = v.getName().getText() and
|
||||
exists(Variant v, string name, string vname |
|
||||
this.isVariantField(v, name) and
|
||||
vname = v.getName().getText() and
|
||||
// only print field when the arity is > 1
|
||||
if strictcount(string f | exists(getVariantRecordField(v, f))) > 1
|
||||
then result = name + "{" + field_ + "}"
|
||||
else result = name
|
||||
if strictcount(v.getRecordField(_)) > 1 then result = vname + "." + name else result = vname
|
||||
)
|
||||
or
|
||||
exists(Struct s, string name, string sname |
|
||||
this.isStructField(s, name) and
|
||||
sname = s.getName().getText() and
|
||||
// only print field when the arity is > 1
|
||||
if strictcount(s.getRecordField(_)) > 1 then result = sname + "." + name else result = sname
|
||||
)
|
||||
}
|
||||
|
||||
final override Location getLocation() {
|
||||
result = getVariantRecordField(v, field_).getName().getLocation()
|
||||
}
|
||||
}
|
||||
|
||||
/** Content stored in a field on a struct. */
|
||||
class StructFieldContent extends Content, TStructFieldContent {
|
||||
private Struct s;
|
||||
private string field_;
|
||||
|
||||
StructFieldContent() { this = TStructFieldContent(s, field_) }
|
||||
|
||||
Struct getStruct(string field) { result = s and field = field_ }
|
||||
|
||||
override string toString() { result = s.getName().getText() + "." + field_.toString() }
|
||||
|
||||
override Location getLocation() {
|
||||
exists(Name f | f = s.getFieldList().(RecordFieldList).getAField().getName() |
|
||||
f.getText() = field_ and
|
||||
result = f.getLocation()
|
||||
)
|
||||
}
|
||||
final override Location getLocation() { result = field.getLocation() }
|
||||
}
|
||||
|
||||
/** A captured variable. */
|
||||
@@ -859,13 +849,18 @@ final class ElementContent extends Content, TElementContent {
|
||||
* NOTE: Unlike `struct`s and `enum`s tuples are structural and not nominal,
|
||||
* hence we don't store a canonical path for them.
|
||||
*/
|
||||
final class TuplePositionContent extends Content, TTuplePositionContent {
|
||||
final class TuplePositionContent extends FieldContent, TTuplePositionContent {
|
||||
private int pos;
|
||||
|
||||
TuplePositionContent() { this = TTuplePositionContent(pos) }
|
||||
|
||||
int getPosition() { result = pos }
|
||||
|
||||
override FieldExprCfgNode getAnAccess() {
|
||||
// TODO: limit to tuple types
|
||||
result.getNameRef().getText().toInt() = pos
|
||||
}
|
||||
|
||||
override string toString() { result = "tuple." + pos.toString() }
|
||||
|
||||
override Location getLocation() { result instanceof EmptyLocation }
|
||||
@@ -901,11 +896,6 @@ final class FunctionCallReturnContent extends Content, TFunctionCallReturnConten
|
||||
override Location getLocation() { result instanceof EmptyLocation }
|
||||
}
|
||||
|
||||
/** Holds if `access` indexes a tuple at an index corresponding to `c`. */
|
||||
private predicate fieldTuplePositionContent(FieldExprCfgNode access, TuplePositionContent c) {
|
||||
access.getNameRef().getText().toInt() = c.getPosition()
|
||||
}
|
||||
|
||||
/** A value that represents a set of `Content`s. */
|
||||
abstract class ContentSet extends TContentSet {
|
||||
/** Gets a textual representation of this element. */
|
||||
@@ -1128,23 +1118,6 @@ module RustDataFlow implements InputSig<Location> {
|
||||
node2.(Node::FlowSummaryNode).getSummaryNode())
|
||||
}
|
||||
|
||||
/** Gets the item that `p` resolves to, if any. */
|
||||
private PathResolution::ItemNode resolvePath(PathAstNode p) {
|
||||
result = PathResolution::resolvePath(p.getPath())
|
||||
}
|
||||
|
||||
/** Holds if `p` destructs an enum variant `v`. */
|
||||
pragma[nomagic]
|
||||
private predicate tupleVariantDestruction(TupleStructPat p, Variant v) { v = resolvePath(p) }
|
||||
|
||||
/** Holds if `p` destructs an enum variant `v`. */
|
||||
pragma[nomagic]
|
||||
private predicate recordVariantDestruction(RecordPat p, Variant v) { v = resolvePath(p) }
|
||||
|
||||
/** Holds if `p` destructs a struct `s`. */
|
||||
pragma[nomagic]
|
||||
private predicate structDestruction(RecordPat p, Struct s) { s = resolvePath(p) }
|
||||
|
||||
/**
|
||||
* Holds if data can flow from `node1` to `node2` via a read of `c`. Thus,
|
||||
* `node1` references an object with a content `c.getAReadContent()` whose
|
||||
@@ -1156,7 +1129,7 @@ module RustDataFlow implements InputSig<Location> {
|
||||
pat = node1.asPat() and
|
||||
node2.asPat() = pat.getField(pos)
|
||||
|
|
||||
tupleVariantDestruction(pat.getPat(), c.(VariantTupleFieldContent).getVariant(pos))
|
||||
c = TTupleFieldContent(pat.getTupleStructPat().getTupleField(pos))
|
||||
or
|
||||
VariantInLib::tupleVariantCanonicalDestruction(pat.getPat(), c, pos)
|
||||
)
|
||||
@@ -1169,13 +1142,7 @@ module RustDataFlow implements InputSig<Location> {
|
||||
or
|
||||
exists(RecordPatCfgNode pat, string field |
|
||||
pat = node1.asPat() and
|
||||
(
|
||||
// Pattern destructs a struct-like variant.
|
||||
recordVariantDestruction(pat.getPat(), c.(VariantRecordFieldContent).getVariant(field))
|
||||
or
|
||||
// Pattern destructs a struct.
|
||||
structDestruction(pat.getPat(), c.(StructFieldContent).getStruct(field))
|
||||
) and
|
||||
c = TRecordFieldContent(pat.getRecordPat().getRecordField(field)) and
|
||||
node2.asPat() = pat.getFieldPat(field)
|
||||
)
|
||||
or
|
||||
@@ -1183,11 +1150,9 @@ module RustDataFlow implements InputSig<Location> {
|
||||
node1.asPat().(RefPatCfgNode).getPat() = node2.asPat()
|
||||
or
|
||||
exists(FieldExprCfgNode access |
|
||||
// Read of a tuple entry
|
||||
fieldTuplePositionContent(access, c) and
|
||||
// TODO: Handle read of a struct field.
|
||||
node1.asExpr() = access.getExpr() and
|
||||
node2.asExpr() = access
|
||||
node2.asExpr() = access and
|
||||
access = c.(FieldContent).getAnAccess()
|
||||
)
|
||||
or
|
||||
exists(IndexExprCfgNode arr |
|
||||
@@ -1236,49 +1201,29 @@ module RustDataFlow implements InputSig<Location> {
|
||||
cs, node2.(Node::FlowSummaryNode).getSummaryNode())
|
||||
}
|
||||
|
||||
/** Holds if `ce` constructs an enum value of type `v`. */
|
||||
pragma[nomagic]
|
||||
private predicate tupleVariantConstruction(CallExpr ce, Variant v) {
|
||||
v = resolvePath(ce.getFunction().(PathExpr))
|
||||
}
|
||||
|
||||
/** Holds if `re` constructs an enum value of type `v`. */
|
||||
pragma[nomagic]
|
||||
private predicate recordVariantConstruction(RecordExpr re, Variant v) { v = resolvePath(re) }
|
||||
|
||||
/** Holds if `re` constructs a struct value of type `s`. */
|
||||
pragma[nomagic]
|
||||
private predicate structConstruction(RecordExpr re, Struct s) { s = resolvePath(re) }
|
||||
|
||||
private predicate tupleAssignment(Node node1, Node node2, TuplePositionContent c) {
|
||||
private predicate fieldAssignment(Node node1, Node node2, FieldContent c) {
|
||||
exists(AssignmentExprCfgNode assignment, FieldExprCfgNode access |
|
||||
assignment.getLhs() = access and
|
||||
fieldTuplePositionContent(access, c) and
|
||||
node1.asExpr() = assignment.getRhs() and
|
||||
node2.asExpr() = access.getExpr()
|
||||
node2.asExpr() = access.getExpr() and
|
||||
access = c.getAnAccess()
|
||||
)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate storeContentStep(Node node1, Content c, Node node2) {
|
||||
exists(CallExprCfgNode call, int pos |
|
||||
node1.asExpr() = call.getArgument(pos) and
|
||||
node1.asExpr() = call.getArgument(pragma[only_bind_into](pos)) and
|
||||
node2.asExpr() = call
|
||||
|
|
||||
tupleVariantConstruction(call.getCallExpr(), c.(VariantTupleFieldContent).getVariant(pos))
|
||||
c = TTupleFieldContent(call.getCallExpr().getTupleField(pragma[only_bind_into](pos)))
|
||||
or
|
||||
VariantInLib::tupleVariantCanonicalConstruction(call.getCallExpr(), c, pos)
|
||||
)
|
||||
or
|
||||
exists(RecordExprCfgNode re, string field |
|
||||
(
|
||||
// Expression is for a struct-like enum variant.
|
||||
recordVariantConstruction(re.getRecordExpr(),
|
||||
c.(VariantRecordFieldContent).getVariant(field))
|
||||
or
|
||||
// Expression is for a struct.
|
||||
structConstruction(re.getRecordExpr(), c.(StructFieldContent).getStruct(field))
|
||||
) and
|
||||
c = TRecordFieldContent(re.getRecordExpr().getRecordField(field)) and
|
||||
node1.asExpr() = re.getFieldExpr(field) and
|
||||
node2.asExpr() = re
|
||||
)
|
||||
@@ -1295,7 +1240,7 @@ module RustDataFlow implements InputSig<Location> {
|
||||
node2.asExpr().(ArrayListExprCfgNode).getAnExpr()
|
||||
]
|
||||
or
|
||||
tupleAssignment(node1, node2.(PostUpdateNode).getPreUpdateNode(), c)
|
||||
fieldAssignment(node1, node2.(PostUpdateNode).getPreUpdateNode(), c)
|
||||
or
|
||||
exists(AssignmentExprCfgNode assignment, IndexExprCfgNode index |
|
||||
c instanceof ElementContent and
|
||||
@@ -1338,7 +1283,7 @@ module RustDataFlow implements InputSig<Location> {
|
||||
* in `x.f = newValue`.
|
||||
*/
|
||||
predicate clearsContent(Node n, ContentSet cs) {
|
||||
tupleAssignment(_, n, cs.(SingletonContentSet).getContent())
|
||||
fieldAssignment(_, n, cs.(SingletonContentSet).getContent())
|
||||
or
|
||||
FlowSummaryImpl::Private::Steps::summaryClearsContent(n.(Node::FlowSummaryNode).getSummaryNode(),
|
||||
cs)
|
||||
@@ -1644,10 +1589,10 @@ private module Cached {
|
||||
|
||||
cached
|
||||
newtype TContent =
|
||||
TVariantTupleFieldContent(Variant v, int pos) { exists(getVariantTupleField(v, pos)) } or
|
||||
TTupleFieldContent(TupleField field) or
|
||||
TRecordFieldContent(RecordField field) or
|
||||
// TODO: Remove once library types are extracted
|
||||
TVariantInLibTupleFieldContent(VariantInLib::VariantInLib v, int pos) { pos = v.getAPosition() } or
|
||||
TVariantRecordFieldContent(Variant v, string field) { exists(getVariantRecordField(v, field)) } or
|
||||
TElementContent() or
|
||||
TTuplePositionContent(int pos) {
|
||||
pos in [0 .. max([
|
||||
@@ -1656,9 +1601,6 @@ private module Cached {
|
||||
]
|
||||
)]
|
||||
} or
|
||||
TStructFieldContent(Struct s, string field) {
|
||||
field = s.getFieldList().(RecordFieldList).getAField().getName().getText()
|
||||
} or
|
||||
TFunctionCallReturnContent() or
|
||||
TFunctionCallArgumentContent(int pos) {
|
||||
pos in [0 .. any(CallExpr c).getArgList().getNumberOfArgs() - 1]
|
||||
|
||||
@@ -61,18 +61,26 @@ module Input implements InputSig<Location, RustDataFlow> {
|
||||
|
||||
string encodeContent(ContentSet cs, string arg) {
|
||||
exists(Content c | cs = TSingletonContentSet(c) |
|
||||
exists(Variant v | result = "Variant" |
|
||||
exists(int pos |
|
||||
c = TVariantTupleFieldContent(v, pos) and
|
||||
// TODO: calculate in QL
|
||||
arg = v.getExtendedCanonicalPath() + "(" + pos + ")"
|
||||
)
|
||||
exists(Addressable a, int pos |
|
||||
// TODO: calculate in QL
|
||||
arg = a.getExtendedCanonicalPath() + "(" + pos + ")"
|
||||
|
|
||||
result = "Struct" and
|
||||
c.(TupleFieldContent).isStructField(a, pos)
|
||||
or
|
||||
exists(string field |
|
||||
// TODO: calculate in QL
|
||||
c = TVariantRecordFieldContent(v, field) and
|
||||
arg = v.getExtendedCanonicalPath() + "::" + field
|
||||
)
|
||||
result = "Variant" and
|
||||
c.(TupleFieldContent).isVariantField(a, pos)
|
||||
)
|
||||
or
|
||||
exists(Addressable a, string field |
|
||||
// TODO: calculate in QL
|
||||
arg = a.getExtendedCanonicalPath() + "::" + field
|
||||
|
|
||||
result = "Struct" and
|
||||
c.(RecordFieldContent).isStructField(a, field)
|
||||
or
|
||||
result = "Variant" and
|
||||
c.(RecordFieldContent).isVariantField(a, field)
|
||||
)
|
||||
or
|
||||
result = "Variant" and
|
||||
@@ -81,13 +89,6 @@ module Input implements InputSig<Location, RustDataFlow> {
|
||||
arg = v.getExtendedCanonicalPath() + "(" + v.getPosition() + ")"
|
||||
)
|
||||
or
|
||||
exists(Struct s, string field |
|
||||
result = "Struct" and
|
||||
c = TStructFieldContent(s, field) and
|
||||
// TODO: calculate in QL
|
||||
arg = s.getExtendedCanonicalPath() + "::" + field
|
||||
)
|
||||
or
|
||||
result = "Element" and
|
||||
c = TElementContent() and
|
||||
arg = ""
|
||||
|
||||
@@ -47,8 +47,6 @@ module SsaInput implements SsaImplCommon::InputSig<Location> {
|
||||
|
||||
BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() }
|
||||
|
||||
class ExitBasicBlock = BasicBlocks::ExitBasicBlock;
|
||||
|
||||
/**
|
||||
* A variable amenable to SSA construction.
|
||||
*
|
||||
@@ -218,25 +216,6 @@ private predicate adjacentDefSkipUncertainReads(
|
||||
SsaInput::variableRead(bb2, i2, _, true)
|
||||
}
|
||||
|
||||
private predicate adjacentDefReachesUncertainReadExt(
|
||||
DefinitionExt def, BasicBlock bb1, int i1, BasicBlock bb2, int i2
|
||||
) {
|
||||
adjacentDefReachesReadExt(def, bb1, i1, bb2, i2) and
|
||||
SsaInput::variableRead(bb2, i2, _, false)
|
||||
}
|
||||
|
||||
/** Same as `lastRefRedef`, but skips uncertain reads. */
|
||||
pragma[nomagic]
|
||||
private predicate lastRefSkipUncertainReadsExt(DefinitionExt def, BasicBlock bb, int i) {
|
||||
Impl::lastRef(def, bb, i) and
|
||||
not SsaInput::variableRead(bb, i, def.getSourceVariable(), false)
|
||||
or
|
||||
exists(BasicBlock bb0, int i0 |
|
||||
Impl::lastRef(def, bb0, i0) and
|
||||
adjacentDefReachesUncertainReadExt(def, bb, i, bb0, i0)
|
||||
)
|
||||
}
|
||||
|
||||
private VariableAccess getACapturedVariableAccess(BasicBlock bb, Variable v) {
|
||||
result = bb.getANode().getAstNode() and
|
||||
result.isCapture() and
|
||||
@@ -381,20 +360,6 @@ private module Cached {
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the read of `def` at `read` may be a last read. That is, `read`
|
||||
* can either reach another definition of the underlying source variable or
|
||||
* the end of the CFG scope, without passing through another non-pseudo read.
|
||||
*/
|
||||
cached
|
||||
predicate lastRead(Definition def, CfgNode read) {
|
||||
exists(BasicBlock bb, int i |
|
||||
lastRefSkipUncertainReadsExt(def, bb, i) and
|
||||
variableReadActual(bb, i, _) and
|
||||
read = bb.getNode(i)
|
||||
)
|
||||
}
|
||||
|
||||
cached
|
||||
Definition uncertainWriteDefinitionInput(UncertainWriteDefinition def) {
|
||||
Impl::uncertainWriteDefinitionInput(def, result)
|
||||
|
||||
@@ -12,6 +12,9 @@ private import codeql.rust.elements.PathExpr
|
||||
* be referenced directly.
|
||||
*/
|
||||
module Impl {
|
||||
private import rust
|
||||
private import PathResolution as PathResolution
|
||||
|
||||
// the following QLdoc is generated: if you need to edit it, do it in the schema file
|
||||
/**
|
||||
* A function call expression. For example:
|
||||
@@ -24,5 +27,25 @@ module Impl {
|
||||
*/
|
||||
class CallExpr extends Generated::CallExpr {
|
||||
override string toString() { result = this.getFunction().toAbbreviatedString() + "(...)" }
|
||||
|
||||
pragma[nomagic]
|
||||
private PathResolution::ItemNode getResolvedFunction(int pos) {
|
||||
result = PathResolution::resolvePath(this.getFunction().(PathExpr).getPath()) and
|
||||
exists(this.getArgList().getArg(pos))
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the tuple field that matches the `pos`th argument of this call, if any.
|
||||
*
|
||||
* For example, if this call is `Option::Some(42)`, then the tuple field matching
|
||||
* `42` is the first field of `Option::Some`.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
TupleField getTupleField(int pos) {
|
||||
exists(PathResolution::ItemNode i | i = this.getResolvedFunction(pos) |
|
||||
result.isStructField(i, pos) or
|
||||
result.isVariantField(i, pos)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,4 +34,24 @@ module Impl {
|
||||
pragma[nomagic]
|
||||
string getText() { result = this.getPart().getNameRef().getText() }
|
||||
}
|
||||
|
||||
/** A simple identifier path. */
|
||||
class IdentPath extends Path {
|
||||
private string name;
|
||||
|
||||
IdentPath() {
|
||||
not this.hasQualifier() and
|
||||
exists(PathSegment ps |
|
||||
ps = this.getPart() and
|
||||
not ps.hasGenericArgList() and
|
||||
not ps.hasParenthesizedArgList() and
|
||||
not ps.hasPathType() and
|
||||
not ps.hasReturnTypeSyntax() and
|
||||
name = ps.getNameRef().getText()
|
||||
)
|
||||
}
|
||||
|
||||
/** Gets the identifier name. */
|
||||
string getName() { result = name }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,7 +187,7 @@ abstract private class ImplOrTraitItemNode extends ItemNode {
|
||||
private class ImplItemNode extends ImplOrTraitItemNode instanceof Impl {
|
||||
override string getName() { result = "(impl)" }
|
||||
|
||||
override Visibility getVisibility() { none() }
|
||||
override Visibility getVisibility() { result = Impl.super.getVisibility() }
|
||||
}
|
||||
|
||||
private class MacroCallItemNode extends ItemNode instanceof MacroCall {
|
||||
@@ -232,6 +232,12 @@ private class BlockExprItemNode extends ItemNode instanceof BlockExpr {
|
||||
override Visibility getVisibility() { none() }
|
||||
}
|
||||
|
||||
private class TypeParamItemNode extends ItemNode instanceof TypeParam {
|
||||
override string getName() { result = TypeParam.super.getName().getText() }
|
||||
|
||||
override Visibility getVisibility() { none() }
|
||||
}
|
||||
|
||||
/** Holds if `item` has the name `name` and is a top-level item inside `f`. */
|
||||
private predicate sourceFileEdge(SourceFile f, string name, ItemNode item) {
|
||||
item = f.getAnItem() and
|
||||
|
||||
@@ -11,6 +11,9 @@ private import codeql.rust.elements.internal.generated.RecordExprField
|
||||
* be referenced directly.
|
||||
*/
|
||||
module Impl {
|
||||
private import rust
|
||||
private import codeql.rust.elements.internal.PathImpl::Impl as PathImpl
|
||||
|
||||
// the following QLdoc is generated: if you need to edit it, do it in the schema file
|
||||
/**
|
||||
* A field in a record expression. For example `a: 1` in:
|
||||
@@ -24,7 +27,27 @@ module Impl {
|
||||
private string toStringPart(int index) {
|
||||
index = 0 and result = this.getNameRef().getText()
|
||||
or
|
||||
index = 1 and result = ": " + this.getExpr().toAbbreviatedString()
|
||||
index = 1 and this.hasNameRef() and result = ": "
|
||||
or
|
||||
index = 2 and
|
||||
result = this.getExpr().toAbbreviatedString()
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the name of the field. This includes the case when shorthand syntax is used:
|
||||
*
|
||||
* ```rust
|
||||
* Foo {
|
||||
* a: 1, // field name is `a`
|
||||
* b // field name is `b`
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
string getFieldName() {
|
||||
result = this.getNameRef().getText()
|
||||
or
|
||||
not this.hasNameRef() and
|
||||
result = this.getExpr().(PathExpr).getPath().(PathImpl::IdentPath).getName()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,9 @@ private import codeql.rust.elements.internal.generated.RecordExpr
|
||||
* be referenced directly.
|
||||
*/
|
||||
module Impl {
|
||||
private import rust
|
||||
private import PathResolution as PathResolution
|
||||
|
||||
// the following QLdoc is generated: if you need to edit it, do it in the schema file
|
||||
/**
|
||||
* A record expression. For example:
|
||||
@@ -23,5 +26,17 @@ module Impl {
|
||||
*/
|
||||
class RecordExpr extends Generated::RecordExpr {
|
||||
override string toString() { result = this.getPath().toString() + " {...}" }
|
||||
|
||||
/** Gets the record field that matches the `name` field of this record expression. */
|
||||
pragma[nomagic]
|
||||
RecordField getRecordField(string name) {
|
||||
exists(PathResolution::ItemNode i |
|
||||
i = PathResolution::resolvePath(this.getPath()) and
|
||||
name = this.getRecordExprFieldList().getAField().getFieldName()
|
||||
|
|
||||
result.isStructField(i, name) or
|
||||
result.isVariantField(i, name)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
// generated by codegen, remove this comment if you wish to edit this file
|
||||
/**
|
||||
* This module provides a hand-modifiable wrapper around the generated class `RecordField`.
|
||||
*
|
||||
@@ -12,11 +11,20 @@ private import codeql.rust.elements.internal.generated.RecordField
|
||||
* be referenced directly.
|
||||
*/
|
||||
module Impl {
|
||||
private import rust
|
||||
|
||||
// the following QLdoc is generated: if you need to edit it, do it in the schema file
|
||||
/**
|
||||
* A RecordField. For example:
|
||||
* ```rust
|
||||
* todo!()
|
||||
* ```
|
||||
*/
|
||||
class RecordField extends Generated::RecordField { }
|
||||
class RecordField extends Generated::RecordField {
|
||||
/** Holds if this record field is named `name` and belongs to the variant `v`. */
|
||||
predicate isVariantField(Variant v, string name) { this = v.getRecordField(name) }
|
||||
|
||||
/** Holds if this record field is named `name` and belongs to the struct `s`. */
|
||||
predicate isStructField(Struct s, string name) { this = s.getRecordField(name) }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
// generated by codegen, remove this comment if you wish to edit this file
|
||||
/**
|
||||
* This module provides a hand-modifiable wrapper around the generated class `RecordPatField`.
|
||||
*
|
||||
@@ -12,11 +11,42 @@ private import codeql.rust.elements.internal.generated.RecordPatField
|
||||
* be referenced directly.
|
||||
*/
|
||||
module Impl {
|
||||
private import rust
|
||||
|
||||
// the following QLdoc is generated: if you need to edit it, do it in the schema file
|
||||
/**
|
||||
* A field in a record pattern. For example `a: 1` in:
|
||||
* ```rust
|
||||
* let Foo { a: 1, b: 2 } = foo;
|
||||
* ```
|
||||
*/
|
||||
class RecordPatField extends Generated::RecordPatField { }
|
||||
class RecordPatField extends Generated::RecordPatField {
|
||||
override string toString() { result = concat(int i | | this.toStringPart(i) order by i) }
|
||||
|
||||
private string toStringPart(int index) {
|
||||
index = 0 and result = this.getNameRef().getText()
|
||||
or
|
||||
index = 1 and this.hasNameRef() and result = ": "
|
||||
or
|
||||
index = 2 and
|
||||
result = this.getPat().toAbbreviatedString()
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the name of the field. This includes the case when shorthand syntax is used:
|
||||
*
|
||||
* ```rust
|
||||
* match foo {
|
||||
* Foo { x: a, .. } => ..., // field name is `x`
|
||||
* Bar { y, .. } => ... // field name is `y`
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
string getFieldName() {
|
||||
result = this.getNameRef().getText()
|
||||
or
|
||||
not this.hasNameRef() and
|
||||
result = this.getPat().(IdentPat).getName().getText()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,9 @@ private import codeql.rust.elements.internal.generated.RecordPat
|
||||
* be referenced directly.
|
||||
*/
|
||||
module Impl {
|
||||
private import rust
|
||||
private import PathResolution as PathResolution
|
||||
|
||||
// the following QLdoc is generated: if you need to edit it, do it in the schema file
|
||||
/**
|
||||
* A record pattern. For example:
|
||||
@@ -23,5 +26,17 @@ module Impl {
|
||||
*/
|
||||
class RecordPat extends Generated::RecordPat {
|
||||
override string toString() { result = this.getPath().toAbbreviatedString() + " {...}" }
|
||||
|
||||
/** Gets the record field that matches the `name` pattern of this pattern. */
|
||||
pragma[nomagic]
|
||||
RecordField getRecordField(string name) {
|
||||
exists(PathResolution::ItemNode i |
|
||||
i = PathResolution::resolvePath(this.getPath()) and
|
||||
name = this.getRecordPatFieldList().getAField().getFieldName()
|
||||
|
|
||||
result.isStructField(i, name) or
|
||||
result.isVariantField(i, name)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
|
||||
private import rust
|
||||
private import codeql.rust.elements.internal.generated.Struct
|
||||
|
||||
/**
|
||||
@@ -20,5 +21,16 @@ module Impl {
|
||||
*/
|
||||
class Struct extends Generated::Struct {
|
||||
override string toString() { result = "struct " + this.getName().getText() }
|
||||
|
||||
/** Gets the record field named `name`, if any. */
|
||||
pragma[nomagic]
|
||||
RecordField getRecordField(string name) {
|
||||
result = this.getFieldList().(RecordFieldList).getAField() and
|
||||
result.getName().getText() = name
|
||||
}
|
||||
|
||||
/** Gets the `i`th tuple field, if any. */
|
||||
pragma[nomagic]
|
||||
TupleField getTupleField(int i) { result = this.getFieldList().(TupleFieldList).getField(i) }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
// generated by codegen, remove this comment if you wish to edit this file
|
||||
/**
|
||||
* This module provides a hand-modifiable wrapper around the generated class `TupleField`.
|
||||
*
|
||||
@@ -12,11 +11,20 @@ private import codeql.rust.elements.internal.generated.TupleField
|
||||
* be referenced directly.
|
||||
*/
|
||||
module Impl {
|
||||
private import rust
|
||||
|
||||
// the following QLdoc is generated: if you need to edit it, do it in the schema file
|
||||
/**
|
||||
* A TupleField. For example:
|
||||
* ```rust
|
||||
* todo!()
|
||||
* ```
|
||||
*/
|
||||
class TupleField extends Generated::TupleField { }
|
||||
class TupleField extends Generated::TupleField {
|
||||
/** Holds if this tuple field is the `pos`th field of variant `v`. */
|
||||
predicate isVariantField(Variant v, int pos) { this = v.getTupleField(pos) }
|
||||
|
||||
/** Holds if this tuple field is the `pos`th field of struct `s`. */
|
||||
predicate isStructField(Struct s, int pos) { this = s.getTupleField(pos) }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,9 @@ private import codeql.rust.elements.internal.generated.TupleStructPat
|
||||
* be referenced directly.
|
||||
*/
|
||||
module Impl {
|
||||
private import rust
|
||||
private import PathResolution as PathResolution
|
||||
|
||||
// the following QLdoc is generated: if you need to edit it, do it in the schema file
|
||||
/**
|
||||
* A tuple struct pattern. For example:
|
||||
@@ -24,5 +27,20 @@ module Impl {
|
||||
*/
|
||||
class TupleStructPat extends Generated::TupleStructPat {
|
||||
override string toString() { result = this.getPath().toAbbreviatedString() + "(...)" }
|
||||
|
||||
pragma[nomagic]
|
||||
private PathResolution::ItemNode getResolvedPath(int pos) {
|
||||
result = PathResolution::resolvePath(this.getPath()) and
|
||||
exists(this.getField(pragma[only_bind_into](pos)))
|
||||
}
|
||||
|
||||
/** Gets the tuple field that matches the `pos`th pattern of this pattern. */
|
||||
pragma[nomagic]
|
||||
TupleField getTupleField(int pos) {
|
||||
exists(PathResolution::ItemNode i | i = this.getResolvedPath(pos) |
|
||||
result.isStructField(i, pos) or
|
||||
result.isVariantField(i, pos)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
private import rust
|
||||
private import codeql.rust.controlflow.ControlFlowGraph
|
||||
private import codeql.rust.elements.internal.generated.ParentChild
|
||||
private import codeql.rust.elements.internal.PathImpl::Impl as PathImpl
|
||||
private import codeql.rust.elements.internal.PathExprBaseImpl::Impl as PathExprBaseImpl
|
||||
private import codeql.rust.elements.internal.FormatTemplateVariableAccessImpl::Impl as FormatTemplateVariableAccessImpl
|
||||
private import codeql.util.DenseRank
|
||||
@@ -172,16 +173,7 @@ module Impl {
|
||||
string name_;
|
||||
|
||||
VariableAccessCand() {
|
||||
exists(Path p, PathSegment ps |
|
||||
p = this.(PathExpr).getPath() and
|
||||
not p.hasQualifier() and
|
||||
ps = p.getPart() and
|
||||
not ps.hasGenericArgList() and
|
||||
not ps.hasParenthesizedArgList() and
|
||||
not ps.hasPathType() and
|
||||
not ps.hasReturnTypeSyntax() and
|
||||
name_ = ps.getNameRef().getText()
|
||||
)
|
||||
name_ = this.(PathExpr).getPath().(PathImpl::IdentPath).getName()
|
||||
or
|
||||
this.(FormatTemplateVariableAccess).getName() = name_
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
|
||||
private import rust
|
||||
private import codeql.rust.elements.internal.generated.Variant
|
||||
|
||||
/**
|
||||
@@ -20,5 +21,16 @@ module Impl {
|
||||
*/
|
||||
class Variant extends Generated::Variant {
|
||||
override string toString() { result = this.getName().getText() }
|
||||
|
||||
/** Gets the record field named `name`, if any. */
|
||||
pragma[nomagic]
|
||||
RecordField getRecordField(string name) {
|
||||
result = this.getFieldList().(RecordFieldList).getAField() and
|
||||
result.getName().getText() = name
|
||||
}
|
||||
|
||||
/** Gets the `i`th tuple field, if any. */
|
||||
pragma[nomagic]
|
||||
TupleField getTupleField(int i) { result = this.getFieldList().(TupleFieldList).getField(i) }
|
||||
}
|
||||
}
|
||||
|
||||
21
rust/ql/lib/codeql/rust/frameworks/stdlib/Clone.qll
Normal file
21
rust/ql/lib/codeql/rust/frameworks/stdlib/Clone.qll
Normal file
@@ -0,0 +1,21 @@
|
||||
/** A model for `clone` on the `Clone` trait. */
|
||||
|
||||
private import rust
|
||||
private import codeql.rust.dataflow.FlowSummary
|
||||
|
||||
/** A `clone` method. */
|
||||
final class CloneCallable extends SummarizedCallable::Range {
|
||||
CloneCallable() {
|
||||
// NOTE: The function target may not exist in the database, so we base this
|
||||
// on method calls.
|
||||
exists(MethodCallExpr c |
|
||||
c.getNameRef().getText() = "clone" and
|
||||
c.getArgList().getNumberOfArgs() = 0 and
|
||||
this = c.getResolvedCrateOrigin() + "::_::" + c.getResolvedPath()
|
||||
)
|
||||
}
|
||||
|
||||
final override predicate propagatesFlow(string input, string output, boolean preservesValue) {
|
||||
input = "Argument[self]" and output = "ReturnValue" and preservesValue = true
|
||||
}
|
||||
}
|
||||
@@ -3,12 +3,12 @@ extensions:
|
||||
pack: codeql/rust-all
|
||||
extensible: sourceModel
|
||||
data:
|
||||
- ["lang:std", "crate::env::args", "ReturnValue", "command-line-source", "manual"]
|
||||
- ["lang:std", "crate::env::args_os", "ReturnValue", "command-line-source", "manual"]
|
||||
- ["lang:std", "crate::env::args", "ReturnValue.Element", "command-line-source", "manual"]
|
||||
- ["lang:std", "crate::env::args_os", "ReturnValue.Element", "command-line-source", "manual"]
|
||||
- ["lang:std", "crate::env::current_dir", "ReturnValue.Variant[crate::result::Result::Ok(0)]", "command-line-source", "manual"]
|
||||
- ["lang:std", "crate::env::current_exe", "ReturnValue.Variant[crate::result::Result::Ok(0)]", "command-line-source", "manual"]
|
||||
- ["lang:std", "crate::env::home_dir", "ReturnValue.Variant[crate::option::Option::Some(0)]", "command-line-source", "manual"]
|
||||
- ["lang:std", "crate::env::var", "ReturnValue.Variant[crate::result::Result::Ok(0)]", "environment-source", "manual"]
|
||||
- ["lang:std", "crate::env::var_os", "ReturnValue.Variant[crate::option::Option::Some(0)]", "environment-source", "manual"]
|
||||
- ["lang:std", "crate::env::vars", "ReturnValue", "environment-source", "manual"]
|
||||
- ["lang:std", "crate::env::vars_os", "ReturnValue", "environment-source", "manual"]
|
||||
- ["lang:std", "crate::env::vars", "ReturnValue.Element", "environment-source", "manual"]
|
||||
- ["lang:std", "crate::env::vars_os", "ReturnValue.Element", "environment-source", "manual"]
|
||||
|
||||
@@ -7,6 +7,9 @@ extensions:
|
||||
- ["lang:alloc", "crate::fmt::format", "Argument[0]", "ReturnValue", "taint", "manual"]
|
||||
# Hint
|
||||
- ["lang:core", "crate::hint::must_use", "Argument[0]", "ReturnValue", "value", "manual"]
|
||||
# Iterator
|
||||
- ["lang:core", "crate::iter::traits::iterator::Iterator::nth", "Argument[self].Element", "ReturnValue.Variant[crate::option::Option::Some(0)]", "value", "manual"]
|
||||
- ["lang:core", "crate::iter::traits::iterator::Iterator::collect", "Argument[self].Element", "ReturnValue.Element", "value", "manual"]
|
||||
# Option
|
||||
- ["lang:core", "<crate::option::Option>::unwrap", "Argument[self].Variant[crate::option::Option::Some(0)]", "ReturnValue", "value", "manual"]
|
||||
- ["lang:core", "<crate::option::Option>::unwrap_or", "Argument[self].Variant[crate::option::Option::Some(0)]", "ReturnValue", "value", "manual"]
|
||||
|
||||
24
rust/ql/lib/codeql/rust/frameworks/tokio-postgres.model.yml
Normal file
24
rust/ql/lib/codeql/rust/frameworks/tokio-postgres.model.yml
Normal file
@@ -0,0 +1,24 @@
|
||||
extensions:
|
||||
- addsTo:
|
||||
pack: codeql/rust-all
|
||||
extensible: sinkModel
|
||||
data:
|
||||
- ["repo:https://github.com/sfackler/rust-postgres:tokio-postgres", "<crate::client::Client>::execute", "Argument[0]", "sql-injection", "manual"]
|
||||
- ["repo:https://github.com/sfackler/rust-postgres:tokio-postgres", "<crate::client::Client>::batch_execute", "Argument[0]", "sql-injection", "manual"]
|
||||
- ["repo:https://github.com/sfackler/rust-postgres:tokio-postgres", "<crate::client::Client>::execute_raw", "Argument[0]", "sql-injection", "manual"]
|
||||
- ["repo:https://github.com/sfackler/rust-postgres:tokio-postgres", "<crate::client::Client>::prepare", "Argument[0]", "sql-injection", "manual"]
|
||||
- ["repo:https://github.com/sfackler/rust-postgres:tokio-postgres", "<crate::client::Client>::prepare_typed", "Argument[0]", "sql-injection", "manual"]
|
||||
- ["repo:https://github.com/sfackler/rust-postgres:tokio-postgres", "<crate::client::Client>::query", "Argument[0]", "sql-injection", "manual"]
|
||||
- ["repo:https://github.com/sfackler/rust-postgres:tokio-postgres", "<crate::client::Client>::query_opt", "Argument[0]", "sql-injection", "manual"]
|
||||
- ["repo:https://github.com/sfackler/rust-postgres:tokio-postgres", "<crate::client::Client>::query_raw", "Argument[0]", "sql-injection", "manual"]
|
||||
- ["repo:https://github.com/sfackler/rust-postgres:tokio-postgres", "<crate::client::Client>::query_typed", "Argument[0]", "sql-injection", "manual"]
|
||||
- ["repo:https://github.com/sfackler/rust-postgres:tokio-postgres", "<crate::client::Client>::query_typed_raw", "Argument[0]", "sql-injection", "manual"]
|
||||
- ["repo:https://github.com/sfackler/rust-postgres:tokio-postgres", "<crate::client::Client>::simple_query", "Argument[0]", "sql-injection", "manual"]
|
||||
- ["repo:https://github.com/sfackler/rust-postgres:tokio-postgres", "<crate::client::Client>::simple_query_raw", "Argument[0]", "sql-injection", "manual"]
|
||||
|
||||
- addsTo:
|
||||
pack: codeql/rust-all
|
||||
extensible: sourceModel
|
||||
data:
|
||||
- ["repo:https://github.com/sfackler/rust-postgres:tokio-postgres", "<crate::row::Row>::get", "ReturnValue", "database", "manual"]
|
||||
- ["repo:https://github.com/sfackler/rust-postgres:tokio-postgres", "<crate::row::Row>::try_get", "ReturnValue.Variant[crate::result::Result::Ok(0)]", "database", "manual"]
|
||||
46
rust/ql/src/queries/telemetry/DatabaseQuality.qll
Normal file
46
rust/ql/src/queries/telemetry/DatabaseQuality.qll
Normal file
@@ -0,0 +1,46 @@
|
||||
/**
|
||||
* Provides database quality statistics that are reported by
|
||||
* `rust/telemetry/extractor-information`
|
||||
* and perhaps warned about by `rust/diagnostics/database-quality`.
|
||||
*/
|
||||
|
||||
import rust
|
||||
import codeql.util.ReportStats
|
||||
|
||||
module CallTargetStats implements StatsSig {
|
||||
int getNumberOfOk() { result = count(CallExprBase c | exists(c.getStaticTarget())) }
|
||||
|
||||
private predicate isLambdaCall(CallExpr call) {
|
||||
exists(Expr receiver | receiver = call.getFunction() |
|
||||
// All calls to complex expressions and local variable accesses are lambda calls
|
||||
receiver instanceof PathExpr implies receiver = any(Variable v).getAnAccess()
|
||||
)
|
||||
}
|
||||
|
||||
additional predicate isNotOkCall(CallExprBase c) {
|
||||
not exists(c.getStaticTarget()) and
|
||||
not isLambdaCall(c)
|
||||
}
|
||||
|
||||
int getNumberOfNotOk() { result = count(CallExprBase c | isNotOkCall(c)) }
|
||||
|
||||
string getOkText() { result = "calls with call target" }
|
||||
|
||||
string getNotOkText() { result = "calls with missing call target" }
|
||||
}
|
||||
|
||||
module MacroCallTargetStats implements StatsSig {
|
||||
int getNumberOfOk() { result = count(MacroCall c | c.hasExpanded()) }
|
||||
|
||||
additional predicate isNotOkCall(MacroCall c) { not c.hasExpanded() }
|
||||
|
||||
int getNumberOfNotOk() { result = count(MacroCall c | isNotOkCall(c)) }
|
||||
|
||||
string getOkText() { result = "macro calls with call target" }
|
||||
|
||||
string getNotOkText() { result = "macro calls with missing call target" }
|
||||
}
|
||||
|
||||
module CallTargetStatsReport = ReportStats<CallTargetStats>;
|
||||
|
||||
module MacroCallTargetStatsReport = ReportStats<MacroCallTargetStats>;
|
||||
41
rust/ql/src/queries/telemetry/DatabaseQualityDiagnostics.ql
Normal file
41
rust/ql/src/queries/telemetry/DatabaseQualityDiagnostics.ql
Normal file
@@ -0,0 +1,41 @@
|
||||
/**
|
||||
* @name Low Rust analysis quality
|
||||
* @description Low Rust analysis quality
|
||||
* @kind diagnostic
|
||||
* @id rust/diagnostic/database-quality
|
||||
*/
|
||||
|
||||
import rust
|
||||
import DatabaseQuality
|
||||
import codeql.util.Unit
|
||||
|
||||
class DbQualityDiagnostic extends Unit {
|
||||
DbQualityDiagnostic() {
|
||||
exists(float percentageGood |
|
||||
CallTargetStatsReport::percentageOfOk(_, percentageGood)
|
||||
or
|
||||
MacroCallTargetStatsReport::percentageOfOk(_, percentageGood)
|
||||
|
|
||||
percentageGood < 95
|
||||
)
|
||||
}
|
||||
|
||||
string toString() {
|
||||
result =
|
||||
"Scanning Rust code completed successfully, but the scan encountered issues. " +
|
||||
"This may be caused by problems identifying dependencies or use of generated source code, among other reasons -- "
|
||||
+
|
||||
"see other CodeQL diagnostics reported on the CodeQL status page for more details of possible causes. "
|
||||
+ "Addressing these warnings is advisable to avoid false-positive or missing results."
|
||||
}
|
||||
}
|
||||
|
||||
query predicate diagnosticAttributes(DbQualityDiagnostic e, string key, string value) {
|
||||
exists(e) and // Quieten warning about unconstrained 'e'
|
||||
key = ["visibilityCliSummaryTable", "visibilityTelemetry", "visibilityStatusPage"] and
|
||||
value = "true"
|
||||
}
|
||||
|
||||
from DbQualityDiagnostic d
|
||||
select d, d.toString(), 1
|
||||
/* 1 = Warning severity */
|
||||
65
rust/ql/src/queries/telemetry/ExtractorInformation.ql
Normal file
65
rust/ql/src/queries/telemetry/ExtractorInformation.ql
Normal file
@@ -0,0 +1,65 @@
|
||||
/**
|
||||
* @name Rust extraction information
|
||||
* @description Information about the extraction for a Rust database
|
||||
* @kind metric
|
||||
* @tags summary telemetry
|
||||
* @id rust/telemetry/extraction-information
|
||||
*/
|
||||
|
||||
import rust
|
||||
import DatabaseQuality
|
||||
import codeql.rust.Diagnostics
|
||||
|
||||
predicate fileCount(string key, int value) {
|
||||
key = "Number of files" and
|
||||
value = strictcount(File f)
|
||||
}
|
||||
|
||||
predicate fileCountByExtension(string key, int value) {
|
||||
exists(string extension |
|
||||
key = "Number of files with extension " + extension and
|
||||
value = strictcount(File f | f.getExtension() = extension)
|
||||
)
|
||||
}
|
||||
|
||||
predicate numberOfLinesOfCode(string key, int value) {
|
||||
key = "Number of lines of code" and
|
||||
value = strictsum(File f | any() | f.getNumberOfLinesOfCode())
|
||||
}
|
||||
|
||||
predicate numberOfLinesOfCodeByExtension(string key, int value) {
|
||||
exists(string extension |
|
||||
key = "Number of lines of code with extension " + extension and
|
||||
value = strictsum(File f | f.getExtension() = extension | f.getNumberOfLinesOfCode())
|
||||
)
|
||||
}
|
||||
|
||||
predicate extractorDiagnostics(string key, int value) {
|
||||
exists(int severity |
|
||||
key = "Number of diagnostics with severity " + severity.toString() and
|
||||
value = strictcount(Diagnostic d | d.getSeverity() = severity)
|
||||
)
|
||||
}
|
||||
|
||||
from string key, float value
|
||||
where
|
||||
(
|
||||
fileCount(key, value) or
|
||||
fileCountByExtension(key, value) or
|
||||
numberOfLinesOfCode(key, value) or
|
||||
numberOfLinesOfCodeByExtension(key, value) or
|
||||
extractorDiagnostics(key, value) or
|
||||
CallTargetStatsReport::numberOfOk(key, value) or
|
||||
CallTargetStatsReport::numberOfNotOk(key, value) or
|
||||
CallTargetStatsReport::percentageOfOk(key, value) or
|
||||
MacroCallTargetStatsReport::numberOfOk(key, value) or
|
||||
MacroCallTargetStatsReport::numberOfNotOk(key, value) or
|
||||
MacroCallTargetStatsReport::percentageOfOk(key, value)
|
||||
) and
|
||||
/* Infinity */
|
||||
value != 1.0 / 0.0 and
|
||||
/* -Infinity */
|
||||
value != -1.0 / 0.0 and
|
||||
/* NaN */
|
||||
value != 0.0 / 0.0
|
||||
select key, value
|
||||
@@ -129,7 +129,7 @@ module ModelGeneratorInput implements ModelGeneratorInputSig<Location, RustDataF
|
||||
predicate isAdditionalContentFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { none() }
|
||||
|
||||
predicate isField(DataFlow::ContentSet c) {
|
||||
c.(SingletonContentSet).getContent() instanceof StructFieldContent
|
||||
c.(SingletonContentSet).getContent() instanceof FieldContent
|
||||
}
|
||||
|
||||
predicate isCallback(DataFlow::ContentSet cs) {
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
| gen_record_pat_field.rs:5:15:5:18 | RecordPatField | getNumberOfAttrs: | 0 | hasNameRef: | yes | hasPat: | yes |
|
||||
| gen_record_pat_field.rs:5:21:5:24 | RecordPatField | getNumberOfAttrs: | 0 | hasNameRef: | yes | hasPat: | yes |
|
||||
| gen_record_pat_field.rs:5:15:5:18 | a: 1 | getNumberOfAttrs: | 0 | hasNameRef: | yes | hasPat: | yes |
|
||||
| gen_record_pat_field.rs:5:21:5:24 | b: 2 | getNumberOfAttrs: | 0 | hasNameRef: | yes | hasPat: | yes |
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
| gen_record_pat_field.rs:5:15:5:18 | RecordPatField | gen_record_pat_field.rs:5:15:5:15 | a |
|
||||
| gen_record_pat_field.rs:5:21:5:24 | RecordPatField | gen_record_pat_field.rs:5:21:5:21 | b |
|
||||
| gen_record_pat_field.rs:5:15:5:18 | a: 1 | gen_record_pat_field.rs:5:15:5:15 | a |
|
||||
| gen_record_pat_field.rs:5:21:5:24 | b: 2 | gen_record_pat_field.rs:5:21:5:21 | b |
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
| gen_record_pat_field.rs:5:15:5:18 | RecordPatField | gen_record_pat_field.rs:5:18:5:18 | 1 |
|
||||
| gen_record_pat_field.rs:5:21:5:24 | RecordPatField | gen_record_pat_field.rs:5:24:5:24 | 2 |
|
||||
| gen_record_pat_field.rs:5:15:5:18 | a: 1 | gen_record_pat_field.rs:5:18:5:18 | 1 |
|
||||
| gen_record_pat_field.rs:5:21:5:24 | b: 2 | gen_record_pat_field.rs:5:24:5:24 | 2 |
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
identityLocalStep
|
||||
| main.rs:412:9:412:20 | phi(default_name) | Node steps to itself |
|
||||
| main.rs:425:9:425:20 | phi(default_name) | Node steps to itself |
|
||||
|
||||
@@ -4,6 +4,8 @@ localStep
|
||||
| file://:0:0:0:0 | [summary param] 0 in lang:core::_::crate::hint::must_use | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::crate::hint::must_use | MaD:21 |
|
||||
| file://:0:0:0:0 | [summary] read: Argument[0].ReturnValue in lang:core::_::<crate::option::Option>::unwrap_or_else | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::<crate::option::Option>::unwrap_or_else | MaD:7 |
|
||||
| file://:0:0:0:0 | [summary] read: Argument[0].ReturnValue in lang:core::_::<crate::result::Result>::unwrap_or_else | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::<crate::result::Result>::unwrap_or_else | MaD:18 |
|
||||
| file://:0:0:0:0 | [summary] read: Argument[self].Element in lang:core::_::crate::iter::traits::iterator::Iterator::collect | file://:0:0:0:0 | [summary] to write: ReturnValue.Element in lang:core::_::crate::iter::traits::iterator::Iterator::collect | MaD:22 |
|
||||
| file://:0:0:0:0 | [summary] read: Argument[self].Element in lang:core::_::crate::iter::traits::iterator::Iterator::nth | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::option::Option::Some(0)] in lang:core::_::crate::iter::traits::iterator::Iterator::nth | MaD:23 |
|
||||
| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::option::Option::Some(0)] in lang:core::_::<crate::option::Option>::expect | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::<crate::option::Option>::expect | MaD:2 |
|
||||
| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::option::Option::Some(0)] in lang:core::_::<crate::option::Option>::unwrap | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::<crate::option::Option>::unwrap | MaD:3 |
|
||||
| file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::option::Option::Some(0)] in lang:core::_::<crate::option::Option>::unwrap_or | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::<crate::option::Option>::unwrap_or | MaD:5 |
|
||||
@@ -173,330 +175,347 @@ localStep
|
||||
| main.rs:169:10:169:10 | p | main.rs:170:10:170:10 | p | |
|
||||
| main.rs:170:10:170:10 | [post] p | main.rs:171:10:171:10 | p | |
|
||||
| main.rs:170:10:170:10 | p | main.rs:171:10:171:10 | p | |
|
||||
| main.rs:175:9:175:9 | [SSA] p | main.rs:182:11:182:11 | p | |
|
||||
| main.rs:175:9:175:9 | p | main.rs:175:9:175:9 | [SSA] p | |
|
||||
| main.rs:175:13:181:5 | Point3D {...} | main.rs:175:9:175:9 | p | |
|
||||
| main.rs:182:5:191:5 | match p { ... } | main.rs:174:26:192:1 | { ... } | |
|
||||
| main.rs:182:11:182:11 | p | main.rs:183:9:186:9 | Point3D {...} | |
|
||||
| main.rs:184:28:184:28 | [SSA] x | main.rs:187:18:187:18 | x | |
|
||||
| main.rs:184:28:184:28 | x | main.rs:184:28:184:28 | [SSA] x | |
|
||||
| main.rs:184:31:184:31 | [SSA] y | main.rs:188:18:188:18 | y | |
|
||||
| main.rs:184:31:184:31 | y | main.rs:184:31:184:31 | [SSA] y | |
|
||||
| main.rs:185:13:185:13 | [SSA] z | main.rs:189:18:189:18 | z | |
|
||||
| main.rs:185:13:185:13 | z | main.rs:185:13:185:13 | [SSA] z | |
|
||||
| main.rs:186:14:190:9 | { ... } | main.rs:182:5:191:5 | match p { ... } | |
|
||||
| main.rs:198:9:198:10 | [SSA] s1 | main.rs:200:11:200:12 | s1 | |
|
||||
| main.rs:198:9:198:10 | s1 | main.rs:198:9:198:10 | [SSA] s1 | |
|
||||
| main.rs:198:14:198:37 | ...::Some(...) | main.rs:198:9:198:10 | s1 | |
|
||||
| main.rs:199:9:199:10 | [SSA] s2 | main.rs:204:11:204:12 | s2 | |
|
||||
| main.rs:199:9:199:10 | s2 | main.rs:199:9:199:10 | [SSA] s2 | |
|
||||
| main.rs:199:14:199:28 | ...::Some(...) | main.rs:199:9:199:10 | s2 | |
|
||||
| main.rs:200:11:200:12 | s1 | main.rs:201:9:201:23 | ...::Some(...) | |
|
||||
| main.rs:200:11:200:12 | s1 | main.rs:202:9:202:20 | ...::None | |
|
||||
| main.rs:201:22:201:22 | [SSA] n | main.rs:201:33:201:33 | n | |
|
||||
| main.rs:201:22:201:22 | n | main.rs:201:22:201:22 | [SSA] n | |
|
||||
| main.rs:201:28:201:34 | sink(...) | main.rs:200:5:203:5 | match s1 { ... } | |
|
||||
| main.rs:202:25:202:31 | sink(...) | main.rs:200:5:203:5 | match s1 { ... } | |
|
||||
| main.rs:204:5:207:5 | match s2 { ... } | main.rs:197:37:208:1 | { ... } | |
|
||||
| main.rs:204:11:204:12 | s2 | main.rs:205:9:205:23 | ...::Some(...) | |
|
||||
| main.rs:204:11:204:12 | s2 | main.rs:206:9:206:20 | ...::None | |
|
||||
| main.rs:205:22:205:22 | [SSA] n | main.rs:205:33:205:33 | n | |
|
||||
| main.rs:205:22:205:22 | n | main.rs:205:22:205:22 | [SSA] n | |
|
||||
| main.rs:205:28:205:34 | sink(...) | main.rs:204:5:207:5 | match s2 { ... } | |
|
||||
| main.rs:206:25:206:31 | sink(...) | main.rs:204:5:207:5 | match s2 { ... } | |
|
||||
| main.rs:175:9:175:9 | [SSA] y | main.rs:177:30:177:30 | y | |
|
||||
| main.rs:175:9:175:9 | y | main.rs:175:9:175:9 | [SSA] y | |
|
||||
| main.rs:175:13:175:22 | source(...) | main.rs:175:9:175:9 | y | |
|
||||
| main.rs:176:9:176:9 | [SSA] p | main.rs:180:11:180:11 | p | |
|
||||
| main.rs:176:9:176:9 | p | main.rs:176:9:176:9 | [SSA] p | |
|
||||
| main.rs:176:13:179:5 | Point3D {...} | main.rs:176:9:176:9 | p | |
|
||||
| main.rs:180:5:189:5 | match p { ... } | main.rs:174:26:190:1 | { ... } | |
|
||||
| main.rs:180:11:180:11 | p | main.rs:181:9:184:9 | Point3D {...} | |
|
||||
| main.rs:182:28:182:28 | [SSA] x | main.rs:185:18:185:18 | x | |
|
||||
| main.rs:182:28:182:28 | x | main.rs:182:28:182:28 | [SSA] x | |
|
||||
| main.rs:182:31:182:31 | [SSA] y | main.rs:186:18:186:18 | y | |
|
||||
| main.rs:182:31:182:31 | y | main.rs:182:31:182:31 | [SSA] y | |
|
||||
| main.rs:183:13:183:13 | [SSA] z | main.rs:187:18:187:18 | z | |
|
||||
| main.rs:183:13:183:13 | z | main.rs:183:13:183:13 | [SSA] z | |
|
||||
| main.rs:184:14:188:9 | { ... } | main.rs:180:5:189:5 | match p { ... } | |
|
||||
| main.rs:195:9:195:9 | [SSA] s | main.rs:196:10:196:10 | s | |
|
||||
| main.rs:195:9:195:9 | s | main.rs:195:9:195:9 | [SSA] s | |
|
||||
| main.rs:195:13:195:40 | MyTupleStruct(...) | main.rs:195:9:195:9 | s | |
|
||||
| main.rs:196:10:196:10 | [post] s | main.rs:197:10:197:10 | s | |
|
||||
| main.rs:196:10:196:10 | s | main.rs:197:10:197:10 | s | |
|
||||
| main.rs:197:10:197:10 | [post] s | main.rs:199:11:199:11 | s | |
|
||||
| main.rs:197:10:197:10 | s | main.rs:199:11:199:11 | s | |
|
||||
| main.rs:199:5:204:5 | match s { ... } | main.rs:194:19:205:1 | { ... } | |
|
||||
| main.rs:199:11:199:11 | s | main.rs:200:9:200:27 | MyTupleStruct(...) | |
|
||||
| main.rs:200:23:200:23 | [SSA] x | main.rs:201:18:201:18 | x | |
|
||||
| main.rs:200:23:200:23 | x | main.rs:200:23:200:23 | [SSA] x | |
|
||||
| main.rs:200:26:200:26 | [SSA] y | main.rs:202:18:202:18 | y | |
|
||||
| main.rs:200:26:200:26 | y | main.rs:200:26:200:26 | [SSA] y | |
|
||||
| main.rs:200:32:203:9 | { ... } | main.rs:199:5:204:5 | match s { ... } | |
|
||||
| main.rs:211:9:211:10 | [SSA] s1 | main.rs:213:11:213:12 | s1 | |
|
||||
| main.rs:211:9:211:10 | s1 | main.rs:211:9:211:10 | [SSA] s1 | |
|
||||
| main.rs:211:14:211:29 | Some(...) | main.rs:211:9:211:10 | s1 | |
|
||||
| main.rs:211:14:211:37 | ...::Some(...) | main.rs:211:9:211:10 | s1 | |
|
||||
| main.rs:212:9:212:10 | [SSA] s2 | main.rs:217:11:217:12 | s2 | |
|
||||
| main.rs:212:9:212:10 | s2 | main.rs:212:9:212:10 | [SSA] s2 | |
|
||||
| main.rs:212:14:212:20 | Some(...) | main.rs:212:9:212:10 | s2 | |
|
||||
| main.rs:213:11:213:12 | s1 | main.rs:214:9:214:15 | Some(...) | |
|
||||
| main.rs:213:11:213:12 | s1 | main.rs:215:9:215:12 | None | |
|
||||
| main.rs:214:14:214:14 | [SSA] n | main.rs:214:25:214:25 | n | |
|
||||
| main.rs:214:14:214:14 | n | main.rs:214:14:214:14 | [SSA] n | |
|
||||
| main.rs:214:20:214:26 | sink(...) | main.rs:213:5:216:5 | match s1 { ... } | |
|
||||
| main.rs:215:17:215:23 | sink(...) | main.rs:213:5:216:5 | match s1 { ... } | |
|
||||
| main.rs:217:5:220:5 | match s2 { ... } | main.rs:210:39:221:1 | { ... } | |
|
||||
| main.rs:217:11:217:12 | s2 | main.rs:218:9:218:15 | Some(...) | |
|
||||
| main.rs:217:11:217:12 | s2 | main.rs:219:9:219:12 | None | |
|
||||
| main.rs:218:14:218:14 | [SSA] n | main.rs:218:25:218:25 | n | |
|
||||
| main.rs:218:14:218:14 | n | main.rs:218:14:218:14 | [SSA] n | |
|
||||
| main.rs:218:20:218:26 | sink(...) | main.rs:217:5:220:5 | match s2 { ... } | |
|
||||
| main.rs:219:17:219:23 | sink(...) | main.rs:217:5:220:5 | match s2 { ... } | |
|
||||
| main.rs:224:9:224:10 | [SSA] s1 | main.rs:225:10:225:11 | s1 | |
|
||||
| main.rs:212:14:212:28 | ...::Some(...) | main.rs:212:9:212:10 | s2 | |
|
||||
| main.rs:213:11:213:12 | s1 | main.rs:214:9:214:23 | ...::Some(...) | |
|
||||
| main.rs:213:11:213:12 | s1 | main.rs:215:9:215:20 | ...::None | |
|
||||
| main.rs:214:22:214:22 | [SSA] n | main.rs:214:33:214:33 | n | |
|
||||
| main.rs:214:22:214:22 | n | main.rs:214:22:214:22 | [SSA] n | |
|
||||
| main.rs:214:28:214:34 | sink(...) | main.rs:213:5:216:5 | match s1 { ... } | |
|
||||
| main.rs:215:25:215:31 | sink(...) | main.rs:213:5:216:5 | match s1 { ... } | |
|
||||
| main.rs:217:5:220:5 | match s2 { ... } | main.rs:210:37:221:1 | { ... } | |
|
||||
| main.rs:217:11:217:12 | s2 | main.rs:218:9:218:23 | ...::Some(...) | |
|
||||
| main.rs:217:11:217:12 | s2 | main.rs:219:9:219:20 | ...::None | |
|
||||
| main.rs:218:22:218:22 | [SSA] n | main.rs:218:33:218:33 | n | |
|
||||
| main.rs:218:22:218:22 | n | main.rs:218:22:218:22 | [SSA] n | |
|
||||
| main.rs:218:28:218:34 | sink(...) | main.rs:217:5:220:5 | match s2 { ... } | |
|
||||
| main.rs:219:25:219:31 | sink(...) | main.rs:217:5:220:5 | match s2 { ... } | |
|
||||
| main.rs:224:9:224:10 | [SSA] s1 | main.rs:226:11:226:12 | s1 | |
|
||||
| main.rs:224:9:224:10 | s1 | main.rs:224:9:224:10 | [SSA] s1 | |
|
||||
| main.rs:224:14:224:29 | Some(...) | main.rs:224:9:224:10 | s1 | |
|
||||
| main.rs:229:9:229:10 | [SSA] s1 | main.rs:230:10:230:11 | s1 | |
|
||||
| main.rs:229:9:229:10 | s1 | main.rs:229:9:229:10 | [SSA] s1 | |
|
||||
| main.rs:229:14:229:29 | Some(...) | main.rs:229:9:229:10 | s1 | |
|
||||
| main.rs:232:9:232:10 | [SSA] s2 | main.rs:233:10:233:11 | s2 | |
|
||||
| main.rs:232:9:232:10 | s2 | main.rs:232:9:232:10 | [SSA] s2 | |
|
||||
| main.rs:232:14:232:20 | Some(...) | main.rs:232:9:232:10 | s2 | |
|
||||
| main.rs:225:9:225:10 | [SSA] s2 | main.rs:230:11:230:12 | s2 | |
|
||||
| main.rs:225:9:225:10 | s2 | main.rs:225:9:225:10 | [SSA] s2 | |
|
||||
| main.rs:225:14:225:20 | Some(...) | main.rs:225:9:225:10 | s2 | |
|
||||
| main.rs:226:11:226:12 | s1 | main.rs:227:9:227:15 | Some(...) | |
|
||||
| main.rs:226:11:226:12 | s1 | main.rs:228:9:228:12 | None | |
|
||||
| main.rs:227:14:227:14 | [SSA] n | main.rs:227:25:227:25 | n | |
|
||||
| main.rs:227:14:227:14 | n | main.rs:227:14:227:14 | [SSA] n | |
|
||||
| main.rs:227:20:227:26 | sink(...) | main.rs:226:5:229:5 | match s1 { ... } | |
|
||||
| main.rs:228:17:228:23 | sink(...) | main.rs:226:5:229:5 | match s1 { ... } | |
|
||||
| main.rs:230:5:233:5 | match s2 { ... } | main.rs:223:39:234:1 | { ... } | |
|
||||
| main.rs:230:11:230:12 | s2 | main.rs:231:9:231:15 | Some(...) | |
|
||||
| main.rs:230:11:230:12 | s2 | main.rs:232:9:232:12 | None | |
|
||||
| main.rs:231:14:231:14 | [SSA] n | main.rs:231:25:231:25 | n | |
|
||||
| main.rs:231:14:231:14 | n | main.rs:231:14:231:14 | [SSA] n | |
|
||||
| main.rs:231:20:231:26 | sink(...) | main.rs:230:5:233:5 | match s2 { ... } | |
|
||||
| main.rs:232:17:232:23 | sink(...) | main.rs:230:5:233:5 | match s2 { ... } | |
|
||||
| main.rs:237:9:237:10 | [SSA] s1 | main.rs:238:10:238:11 | s1 | |
|
||||
| main.rs:237:9:237:10 | s1 | main.rs:237:9:237:10 | [SSA] s1 | |
|
||||
| main.rs:237:14:237:29 | Some(...) | main.rs:237:9:237:10 | s1 | |
|
||||
| main.rs:240:9:240:10 | [SSA] s2 | main.rs:241:10:241:11 | s2 | |
|
||||
| main.rs:240:9:240:10 | s2 | main.rs:240:9:240:10 | [SSA] s2 | |
|
||||
| main.rs:240:14:240:17 | None | main.rs:240:9:240:10 | s2 | |
|
||||
| main.rs:245:9:245:10 | [SSA] s1 | main.rs:247:14:247:15 | s1 | |
|
||||
| main.rs:245:9:245:10 | s1 | main.rs:245:9:245:10 | [SSA] s1 | |
|
||||
| main.rs:245:14:245:29 | Some(...) | main.rs:245:9:245:10 | s1 | |
|
||||
| main.rs:246:9:246:10 | [SSA] s2 | main.rs:249:10:249:11 | s2 | |
|
||||
| main.rs:246:9:246:10 | s2 | main.rs:246:9:246:10 | [SSA] s2 | |
|
||||
| main.rs:246:14:246:20 | Some(...) | main.rs:246:9:246:10 | s2 | |
|
||||
| main.rs:247:9:247:10 | [SSA] i1 | main.rs:248:10:248:11 | i1 | |
|
||||
| main.rs:247:9:247:10 | i1 | main.rs:247:9:247:10 | [SSA] i1 | |
|
||||
| main.rs:247:14:247:16 | TryExpr | main.rs:247:9:247:10 | i1 | |
|
||||
| main.rs:250:5:250:11 | Some(...) | main.rs:244:41:251:1 | { ... } | |
|
||||
| main.rs:254:9:254:10 | [SSA] s1 | main.rs:257:14:257:15 | s1 | |
|
||||
| main.rs:254:9:254:10 | s1 | main.rs:254:9:254:10 | [SSA] s1 | |
|
||||
| main.rs:254:32:254:45 | Ok(...) | main.rs:254:9:254:10 | s1 | |
|
||||
| main.rs:255:9:255:10 | [SSA] s2 | main.rs:258:14:258:15 | s2 | |
|
||||
| main.rs:255:9:255:10 | s2 | main.rs:255:9:255:10 | [SSA] s2 | |
|
||||
| main.rs:255:32:255:36 | Ok(...) | main.rs:255:9:255:10 | s2 | |
|
||||
| main.rs:256:9:256:10 | [SSA] s3 | main.rs:261:14:261:15 | s3 | |
|
||||
| main.rs:256:9:256:10 | s3 | main.rs:256:9:256:10 | [SSA] s3 | |
|
||||
| main.rs:256:32:256:46 | Err(...) | main.rs:256:9:256:10 | s3 | |
|
||||
| main.rs:257:9:257:10 | [SSA] i1 | main.rs:259:10:259:11 | i1 | |
|
||||
| main.rs:257:9:257:10 | i1 | main.rs:257:9:257:10 | [SSA] i1 | |
|
||||
| main.rs:257:14:257:16 | TryExpr | main.rs:257:9:257:10 | i1 | |
|
||||
| main.rs:258:9:258:10 | [SSA] i2 | main.rs:260:10:260:11 | i2 | |
|
||||
| main.rs:258:9:258:10 | i2 | main.rs:258:9:258:10 | [SSA] i2 | |
|
||||
| main.rs:258:14:258:16 | TryExpr | main.rs:258:9:258:10 | i2 | |
|
||||
| main.rs:261:9:261:10 | [SSA] i3 | main.rs:262:10:262:11 | i3 | |
|
||||
| main.rs:261:9:261:10 | i3 | main.rs:261:9:261:10 | [SSA] i3 | |
|
||||
| main.rs:261:14:261:16 | TryExpr | main.rs:261:9:261:10 | i3 | |
|
||||
| main.rs:263:5:263:9 | Ok(...) | main.rs:253:46:264:1 | { ... } | |
|
||||
| main.rs:267:9:267:10 | [SSA] s1 | main.rs:268:10:268:11 | s1 | |
|
||||
| main.rs:242:9:242:10 | [SSA] s1 | main.rs:243:10:243:11 | s1 | |
|
||||
| main.rs:242:9:242:10 | s1 | main.rs:242:9:242:10 | [SSA] s1 | |
|
||||
| main.rs:242:14:242:29 | Some(...) | main.rs:242:9:242:10 | s1 | |
|
||||
| main.rs:245:9:245:10 | [SSA] s2 | main.rs:246:10:246:11 | s2 | |
|
||||
| main.rs:245:9:245:10 | s2 | main.rs:245:9:245:10 | [SSA] s2 | |
|
||||
| main.rs:245:14:245:20 | Some(...) | main.rs:245:9:245:10 | s2 | |
|
||||
| main.rs:250:9:250:10 | [SSA] s1 | main.rs:251:10:251:11 | s1 | |
|
||||
| main.rs:250:9:250:10 | s1 | main.rs:250:9:250:10 | [SSA] s1 | |
|
||||
| main.rs:250:14:250:29 | Some(...) | main.rs:250:9:250:10 | s1 | |
|
||||
| main.rs:253:9:253:10 | [SSA] s2 | main.rs:254:10:254:11 | s2 | |
|
||||
| main.rs:253:9:253:10 | s2 | main.rs:253:9:253:10 | [SSA] s2 | |
|
||||
| main.rs:253:14:253:17 | None | main.rs:253:9:253:10 | s2 | |
|
||||
| main.rs:258:9:258:10 | [SSA] s1 | main.rs:260:14:260:15 | s1 | |
|
||||
| main.rs:258:9:258:10 | s1 | main.rs:258:9:258:10 | [SSA] s1 | |
|
||||
| main.rs:258:14:258:29 | Some(...) | main.rs:258:9:258:10 | s1 | |
|
||||
| main.rs:259:9:259:10 | [SSA] s2 | main.rs:262:10:262:11 | s2 | |
|
||||
| main.rs:259:9:259:10 | s2 | main.rs:259:9:259:10 | [SSA] s2 | |
|
||||
| main.rs:259:14:259:20 | Some(...) | main.rs:259:9:259:10 | s2 | |
|
||||
| main.rs:260:9:260:10 | [SSA] i1 | main.rs:261:10:261:11 | i1 | |
|
||||
| main.rs:260:9:260:10 | i1 | main.rs:260:9:260:10 | [SSA] i1 | |
|
||||
| main.rs:260:14:260:16 | TryExpr | main.rs:260:9:260:10 | i1 | |
|
||||
| main.rs:263:5:263:11 | Some(...) | main.rs:257:41:264:1 | { ... } | |
|
||||
| main.rs:267:9:267:10 | [SSA] s1 | main.rs:270:14:270:15 | s1 | |
|
||||
| main.rs:267:9:267:10 | s1 | main.rs:267:9:267:10 | [SSA] s1 | |
|
||||
| main.rs:267:32:267:45 | Ok(...) | main.rs:267:9:267:10 | s1 | |
|
||||
| main.rs:268:10:268:11 | [post] s1 | main.rs:269:10:269:11 | s1 | |
|
||||
| main.rs:268:10:268:11 | s1 | main.rs:269:10:269:11 | s1 | |
|
||||
| main.rs:271:9:271:10 | [SSA] s2 | main.rs:272:10:272:11 | s2 | |
|
||||
| main.rs:271:9:271:10 | s2 | main.rs:271:9:271:10 | [SSA] s2 | |
|
||||
| main.rs:271:32:271:46 | Err(...) | main.rs:271:9:271:10 | s2 | |
|
||||
| main.rs:272:10:272:11 | [post] s2 | main.rs:273:10:273:11 | s2 | |
|
||||
| main.rs:272:10:272:11 | s2 | main.rs:273:10:273:11 | s2 | |
|
||||
| main.rs:282:9:282:10 | [SSA] s1 | main.rs:284:11:284:12 | s1 | |
|
||||
| main.rs:282:9:282:10 | s1 | main.rs:282:9:282:10 | [SSA] s1 | |
|
||||
| main.rs:282:14:282:39 | ...::A(...) | main.rs:282:9:282:10 | s1 | |
|
||||
| main.rs:283:9:283:10 | [SSA] s2 | main.rs:291:11:291:12 | s2 | |
|
||||
| main.rs:283:9:283:10 | s2 | main.rs:283:9:283:10 | [SSA] s2 | |
|
||||
| main.rs:283:14:283:30 | ...::B(...) | main.rs:283:9:283:10 | s2 | |
|
||||
| main.rs:284:11:284:12 | s1 | main.rs:285:9:285:25 | ...::A(...) | |
|
||||
| main.rs:284:11:284:12 | s1 | main.rs:286:9:286:25 | ...::B(...) | |
|
||||
| main.rs:284:11:284:12 | s1 | main.rs:288:11:288:12 | s1 | |
|
||||
| main.rs:285:24:285:24 | [SSA] n | main.rs:285:35:285:35 | n | |
|
||||
| main.rs:285:24:285:24 | n | main.rs:285:24:285:24 | [SSA] n | |
|
||||
| main.rs:285:30:285:36 | sink(...) | main.rs:284:5:287:5 | match s1 { ... } | |
|
||||
| main.rs:286:24:286:24 | [SSA] n | main.rs:286:35:286:35 | n | |
|
||||
| main.rs:286:24:286:24 | n | main.rs:286:24:286:24 | [SSA] n | |
|
||||
| main.rs:286:30:286:36 | sink(...) | main.rs:284:5:287:5 | match s1 { ... } | |
|
||||
| main.rs:288:11:288:12 | s1 | main.rs:289:9:289:45 | ... \| ... | |
|
||||
| main.rs:289:9:289:45 | ... \| ... | main.rs:289:9:289:25 | ...::A(...) | |
|
||||
| main.rs:289:9:289:45 | ... \| ... | main.rs:289:29:289:45 | ...::B(...) | |
|
||||
| main.rs:289:9:289:45 | [SSA] [match(true)] phi | main.rs:289:55:289:55 | n | |
|
||||
| main.rs:289:24:289:24 | [SSA] [input] [match(true)] phi | main.rs:289:9:289:45 | [SSA] [match(true)] phi | |
|
||||
| main.rs:289:24:289:24 | [SSA] n | main.rs:289:24:289:24 | [SSA] [input] [match(true)] phi | |
|
||||
| main.rs:289:24:289:24 | n | main.rs:289:24:289:24 | [SSA] n | |
|
||||
| main.rs:289:44:289:44 | [SSA] [input] [match(true)] phi | main.rs:289:9:289:45 | [SSA] [match(true)] phi | |
|
||||
| main.rs:289:44:289:44 | [SSA] n | main.rs:289:44:289:44 | [SSA] [input] [match(true)] phi | |
|
||||
| main.rs:289:44:289:44 | n | main.rs:289:44:289:44 | [SSA] n | |
|
||||
| main.rs:289:50:289:56 | sink(...) | main.rs:288:5:290:5 | match s1 { ... } | |
|
||||
| main.rs:291:5:294:5 | match s2 { ... } | main.rs:281:48:295:1 | { ... } | |
|
||||
| main.rs:291:11:291:12 | s2 | main.rs:292:9:292:25 | ...::A(...) | |
|
||||
| main.rs:291:11:291:12 | s2 | main.rs:293:9:293:25 | ...::B(...) | |
|
||||
| main.rs:292:24:292:24 | [SSA] n | main.rs:292:35:292:35 | n | |
|
||||
| main.rs:292:24:292:24 | n | main.rs:292:24:292:24 | [SSA] n | |
|
||||
| main.rs:292:30:292:36 | sink(...) | main.rs:291:5:294:5 | match s2 { ... } | |
|
||||
| main.rs:293:24:293:24 | [SSA] n | main.rs:293:35:293:35 | n | |
|
||||
| main.rs:293:24:293:24 | n | main.rs:293:24:293:24 | [SSA] n | |
|
||||
| main.rs:293:30:293:36 | sink(...) | main.rs:291:5:294:5 | match s2 { ... } | |
|
||||
| main.rs:300:9:300:10 | [SSA] s1 | main.rs:302:11:302:12 | s1 | |
|
||||
| main.rs:300:9:300:10 | s1 | main.rs:300:9:300:10 | [SSA] s1 | |
|
||||
| main.rs:300:14:300:26 | A(...) | main.rs:300:9:300:10 | s1 | |
|
||||
| main.rs:301:9:301:10 | [SSA] s2 | main.rs:309:11:309:12 | s2 | |
|
||||
| main.rs:301:9:301:10 | s2 | main.rs:301:9:301:10 | [SSA] s2 | |
|
||||
| main.rs:301:14:301:17 | B(...) | main.rs:301:9:301:10 | s2 | |
|
||||
| main.rs:302:11:302:12 | s1 | main.rs:303:9:303:12 | A(...) | |
|
||||
| main.rs:302:11:302:12 | s1 | main.rs:304:9:304:12 | B(...) | |
|
||||
| main.rs:302:11:302:12 | s1 | main.rs:306:11:306:12 | s1 | |
|
||||
| main.rs:303:11:303:11 | [SSA] n | main.rs:303:22:303:22 | n | |
|
||||
| main.rs:303:11:303:11 | n | main.rs:303:11:303:11 | [SSA] n | |
|
||||
| main.rs:303:17:303:23 | sink(...) | main.rs:302:5:305:5 | match s1 { ... } | |
|
||||
| main.rs:304:11:304:11 | [SSA] n | main.rs:304:22:304:22 | n | |
|
||||
| main.rs:304:11:304:11 | n | main.rs:304:11:304:11 | [SSA] n | |
|
||||
| main.rs:304:17:304:23 | sink(...) | main.rs:302:5:305:5 | match s1 { ... } | |
|
||||
| main.rs:306:11:306:12 | s1 | main.rs:307:9:307:19 | ... \| ... | |
|
||||
| main.rs:307:9:307:19 | ... \| ... | main.rs:307:9:307:12 | A(...) | |
|
||||
| main.rs:307:9:307:19 | ... \| ... | main.rs:307:16:307:19 | B(...) | |
|
||||
| main.rs:307:9:307:19 | [SSA] [match(true)] phi | main.rs:307:29:307:29 | n | |
|
||||
| main.rs:307:11:307:11 | [SSA] [input] [match(true)] phi | main.rs:307:9:307:19 | [SSA] [match(true)] phi | |
|
||||
| main.rs:307:11:307:11 | [SSA] n | main.rs:307:11:307:11 | [SSA] [input] [match(true)] phi | |
|
||||
| main.rs:307:11:307:11 | n | main.rs:307:11:307:11 | [SSA] n | |
|
||||
| main.rs:307:18:307:18 | [SSA] [input] [match(true)] phi | main.rs:307:9:307:19 | [SSA] [match(true)] phi | |
|
||||
| main.rs:307:18:307:18 | [SSA] n | main.rs:307:18:307:18 | [SSA] [input] [match(true)] phi | |
|
||||
| main.rs:307:18:307:18 | n | main.rs:307:18:307:18 | [SSA] n | |
|
||||
| main.rs:307:24:307:30 | sink(...) | main.rs:306:5:308:5 | match s1 { ... } | |
|
||||
| main.rs:309:5:312:5 | match s2 { ... } | main.rs:299:50:313:1 | { ... } | |
|
||||
| main.rs:309:11:309:12 | s2 | main.rs:310:9:310:12 | A(...) | |
|
||||
| main.rs:309:11:309:12 | s2 | main.rs:311:9:311:12 | B(...) | |
|
||||
| main.rs:310:11:310:11 | [SSA] n | main.rs:310:22:310:22 | n | |
|
||||
| main.rs:310:11:310:11 | n | main.rs:310:11:310:11 | [SSA] n | |
|
||||
| main.rs:310:17:310:23 | sink(...) | main.rs:309:5:312:5 | match s2 { ... } | |
|
||||
| main.rs:311:11:311:11 | [SSA] n | main.rs:311:22:311:22 | n | |
|
||||
| main.rs:311:11:311:11 | n | main.rs:311:11:311:11 | [SSA] n | |
|
||||
| main.rs:311:17:311:23 | sink(...) | main.rs:309:5:312:5 | match s2 { ... } | |
|
||||
| main.rs:321:9:321:10 | [SSA] s1 | main.rs:325:11:325:12 | s1 | |
|
||||
| main.rs:321:9:321:10 | s1 | main.rs:321:9:321:10 | [SSA] s1 | |
|
||||
| main.rs:321:14:323:5 | ...::C {...} | main.rs:321:9:321:10 | s1 | |
|
||||
| main.rs:324:9:324:10 | [SSA] s2 | main.rs:332:11:332:12 | s2 | |
|
||||
| main.rs:324:9:324:10 | s2 | main.rs:324:9:324:10 | [SSA] s2 | |
|
||||
| main.rs:324:14:324:43 | ...::D {...} | main.rs:324:9:324:10 | s2 | |
|
||||
| main.rs:325:11:325:12 | s1 | main.rs:326:9:326:38 | ...::C {...} | |
|
||||
| main.rs:325:11:325:12 | s1 | main.rs:327:9:327:38 | ...::D {...} | |
|
||||
| main.rs:325:11:325:12 | s1 | main.rs:329:11:329:12 | s1 | |
|
||||
| main.rs:326:36:326:36 | [SSA] n | main.rs:326:48:326:48 | n | |
|
||||
| main.rs:326:36:326:36 | n | main.rs:326:36:326:36 | [SSA] n | |
|
||||
| main.rs:326:43:326:49 | sink(...) | main.rs:325:5:328:5 | match s1 { ... } | |
|
||||
| main.rs:327:36:327:36 | [SSA] n | main.rs:327:48:327:48 | n | |
|
||||
| main.rs:327:36:327:36 | n | main.rs:327:36:327:36 | [SSA] n | |
|
||||
| main.rs:327:43:327:49 | sink(...) | main.rs:325:5:328:5 | match s1 { ... } | |
|
||||
| main.rs:329:11:329:12 | s1 | main.rs:330:9:330:71 | ... \| ... | |
|
||||
| main.rs:330:9:330:71 | ... \| ... | main.rs:330:9:330:38 | ...::C {...} | |
|
||||
| main.rs:330:9:330:71 | ... \| ... | main.rs:330:42:330:71 | ...::D {...} | |
|
||||
| main.rs:330:9:330:71 | [SSA] [match(true)] phi | main.rs:330:81:330:81 | n | |
|
||||
| main.rs:330:36:330:36 | [SSA] [input] [match(true)] phi | main.rs:330:9:330:71 | [SSA] [match(true)] phi | |
|
||||
| main.rs:330:36:330:36 | [SSA] n | main.rs:330:36:330:36 | [SSA] [input] [match(true)] phi | |
|
||||
| main.rs:330:36:330:36 | n | main.rs:330:36:330:36 | [SSA] n | |
|
||||
| main.rs:330:69:330:69 | [SSA] [input] [match(true)] phi | main.rs:330:9:330:71 | [SSA] [match(true)] phi | |
|
||||
| main.rs:330:69:330:69 | [SSA] n | main.rs:330:69:330:69 | [SSA] [input] [match(true)] phi | |
|
||||
| main.rs:330:69:330:69 | n | main.rs:330:69:330:69 | [SSA] n | |
|
||||
| main.rs:330:76:330:82 | sink(...) | main.rs:329:5:331:5 | match s1 { ... } | |
|
||||
| main.rs:332:5:335:5 | match s2 { ... } | main.rs:320:49:336:1 | { ... } | |
|
||||
| main.rs:332:11:332:12 | s2 | main.rs:333:9:333:38 | ...::C {...} | |
|
||||
| main.rs:332:11:332:12 | s2 | main.rs:334:9:334:38 | ...::D {...} | |
|
||||
| main.rs:333:36:333:36 | [SSA] n | main.rs:333:48:333:48 | n | |
|
||||
| main.rs:333:36:333:36 | n | main.rs:333:36:333:36 | [SSA] n | |
|
||||
| main.rs:333:43:333:49 | sink(...) | main.rs:332:5:335:5 | match s2 { ... } | |
|
||||
| main.rs:334:36:334:36 | [SSA] n | main.rs:334:48:334:48 | n | |
|
||||
| main.rs:334:36:334:36 | n | main.rs:334:36:334:36 | [SSA] n | |
|
||||
| main.rs:334:43:334:49 | sink(...) | main.rs:332:5:335:5 | match s2 { ... } | |
|
||||
| main.rs:341:9:341:10 | [SSA] s1 | main.rs:345:11:345:12 | s1 | |
|
||||
| main.rs:341:9:341:10 | s1 | main.rs:341:9:341:10 | [SSA] s1 | |
|
||||
| main.rs:341:14:343:5 | C {...} | main.rs:341:9:341:10 | s1 | |
|
||||
| main.rs:344:9:344:10 | [SSA] s2 | main.rs:352:11:352:12 | s2 | |
|
||||
| main.rs:344:9:344:10 | s2 | main.rs:344:9:344:10 | [SSA] s2 | |
|
||||
| main.rs:344:14:344:29 | D {...} | main.rs:344:9:344:10 | s2 | |
|
||||
| main.rs:345:11:345:12 | s1 | main.rs:346:9:346:24 | C {...} | |
|
||||
| main.rs:345:11:345:12 | s1 | main.rs:347:9:347:24 | D {...} | |
|
||||
| main.rs:345:11:345:12 | s1 | main.rs:349:11:349:12 | s1 | |
|
||||
| main.rs:346:22:346:22 | [SSA] n | main.rs:346:34:346:34 | n | |
|
||||
| main.rs:346:22:346:22 | n | main.rs:346:22:346:22 | [SSA] n | |
|
||||
| main.rs:346:29:346:35 | sink(...) | main.rs:345:5:348:5 | match s1 { ... } | |
|
||||
| main.rs:347:22:347:22 | [SSA] n | main.rs:347:34:347:34 | n | |
|
||||
| main.rs:347:22:347:22 | n | main.rs:347:22:347:22 | [SSA] n | |
|
||||
| main.rs:347:29:347:35 | sink(...) | main.rs:345:5:348:5 | match s1 { ... } | |
|
||||
| main.rs:349:11:349:12 | s1 | main.rs:350:9:350:43 | ... \| ... | |
|
||||
| main.rs:350:9:350:43 | ... \| ... | main.rs:350:9:350:24 | C {...} | |
|
||||
| main.rs:350:9:350:43 | ... \| ... | main.rs:350:28:350:43 | D {...} | |
|
||||
| main.rs:350:9:350:43 | [SSA] [match(true)] phi | main.rs:350:53:350:53 | n | |
|
||||
| main.rs:350:22:350:22 | [SSA] [input] [match(true)] phi | main.rs:350:9:350:43 | [SSA] [match(true)] phi | |
|
||||
| main.rs:350:22:350:22 | [SSA] n | main.rs:350:22:350:22 | [SSA] [input] [match(true)] phi | |
|
||||
| main.rs:350:22:350:22 | n | main.rs:350:22:350:22 | [SSA] n | |
|
||||
| main.rs:350:41:350:41 | [SSA] [input] [match(true)] phi | main.rs:350:9:350:43 | [SSA] [match(true)] phi | |
|
||||
| main.rs:350:41:350:41 | [SSA] n | main.rs:350:41:350:41 | [SSA] [input] [match(true)] phi | |
|
||||
| main.rs:350:41:350:41 | n | main.rs:350:41:350:41 | [SSA] n | |
|
||||
| main.rs:350:48:350:54 | sink(...) | main.rs:349:5:351:5 | match s1 { ... } | |
|
||||
| main.rs:352:5:355:5 | match s2 { ... } | main.rs:340:51:356:1 | { ... } | |
|
||||
| main.rs:352:11:352:12 | s2 | main.rs:353:9:353:24 | C {...} | |
|
||||
| main.rs:352:11:352:12 | s2 | main.rs:354:9:354:24 | D {...} | |
|
||||
| main.rs:353:22:353:22 | [SSA] n | main.rs:353:34:353:34 | n | |
|
||||
| main.rs:353:22:353:22 | n | main.rs:353:22:353:22 | [SSA] n | |
|
||||
| main.rs:353:29:353:35 | sink(...) | main.rs:352:5:355:5 | match s2 { ... } | |
|
||||
| main.rs:354:22:354:22 | [SSA] n | main.rs:354:34:354:34 | n | |
|
||||
| main.rs:354:22:354:22 | n | main.rs:354:22:354:22 | [SSA] n | |
|
||||
| main.rs:354:29:354:35 | sink(...) | main.rs:352:5:355:5 | match s2 { ... } | |
|
||||
| main.rs:362:9:362:12 | [SSA] arr1 | main.rs:363:14:363:17 | arr1 | |
|
||||
| main.rs:362:9:362:12 | arr1 | main.rs:362:9:362:12 | [SSA] arr1 | |
|
||||
| main.rs:362:16:362:33 | [...] | main.rs:362:9:362:12 | arr1 | |
|
||||
| main.rs:363:9:363:10 | [SSA] n1 | main.rs:364:10:364:11 | n1 | |
|
||||
| main.rs:363:9:363:10 | n1 | main.rs:363:9:363:10 | [SSA] n1 | |
|
||||
| main.rs:363:14:363:20 | arr1[2] | main.rs:363:9:363:10 | n1 | |
|
||||
| main.rs:366:9:366:12 | [SSA] arr2 | main.rs:367:14:367:17 | arr2 | |
|
||||
| main.rs:366:9:366:12 | arr2 | main.rs:366:9:366:12 | [SSA] arr2 | |
|
||||
| main.rs:366:16:366:31 | [...; 10] | main.rs:366:9:366:12 | arr2 | |
|
||||
| main.rs:367:9:367:10 | [SSA] n2 | main.rs:368:10:368:11 | n2 | |
|
||||
| main.rs:367:9:367:10 | n2 | main.rs:367:9:367:10 | [SSA] n2 | |
|
||||
| main.rs:367:14:367:20 | arr2[4] | main.rs:367:9:367:10 | n2 | |
|
||||
| main.rs:370:9:370:12 | [SSA] arr3 | main.rs:371:14:371:17 | arr3 | |
|
||||
| main.rs:370:9:370:12 | arr3 | main.rs:370:9:370:12 | [SSA] arr3 | |
|
||||
| main.rs:370:16:370:24 | [...] | main.rs:370:9:370:12 | arr3 | |
|
||||
| main.rs:371:9:371:10 | [SSA] n3 | main.rs:372:10:372:11 | n3 | |
|
||||
| main.rs:371:9:371:10 | n3 | main.rs:371:9:371:10 | [SSA] n3 | |
|
||||
| main.rs:371:14:371:20 | arr3[2] | main.rs:371:9:371:10 | n3 | |
|
||||
| main.rs:376:9:376:12 | [SSA] arr1 | main.rs:377:15:377:18 | arr1 | |
|
||||
| main.rs:376:9:376:12 | arr1 | main.rs:376:9:376:12 | [SSA] arr1 | |
|
||||
| main.rs:376:16:376:33 | [...] | main.rs:376:9:376:12 | arr1 | |
|
||||
| main.rs:377:9:377:10 | [SSA] n1 | main.rs:378:14:378:15 | n1 | |
|
||||
| main.rs:377:9:377:10 | n1 | main.rs:377:9:377:10 | [SSA] n1 | |
|
||||
| main.rs:381:9:381:12 | [SSA] arr2 | main.rs:382:15:382:18 | arr2 | |
|
||||
| main.rs:381:9:381:12 | arr2 | main.rs:381:9:381:12 | [SSA] arr2 | |
|
||||
| main.rs:381:16:381:24 | [...] | main.rs:381:9:381:12 | arr2 | |
|
||||
| main.rs:382:5:384:5 | for ... in ... { ... } | main.rs:375:21:385:1 | { ... } | |
|
||||
| main.rs:382:9:382:10 | [SSA] n2 | main.rs:383:14:383:15 | n2 | |
|
||||
| main.rs:382:9:382:10 | n2 | main.rs:382:9:382:10 | [SSA] n2 | |
|
||||
| main.rs:388:9:388:12 | [SSA] arr1 | main.rs:389:11:389:14 | arr1 | |
|
||||
| main.rs:388:9:388:12 | arr1 | main.rs:388:9:388:12 | [SSA] arr1 | |
|
||||
| main.rs:388:16:388:33 | [...] | main.rs:388:9:388:12 | arr1 | |
|
||||
| main.rs:389:5:395:5 | match arr1 { ... } | main.rs:387:26:396:1 | { ... } | |
|
||||
| main.rs:389:11:389:14 | arr1 | main.rs:390:9:390:17 | SlicePat | |
|
||||
| main.rs:390:10:390:10 | [SSA] a | main.rs:391:18:391:18 | a | |
|
||||
| main.rs:390:10:390:10 | a | main.rs:390:10:390:10 | [SSA] a | |
|
||||
| main.rs:390:13:390:13 | [SSA] b | main.rs:392:18:392:18 | b | |
|
||||
| main.rs:390:13:390:13 | b | main.rs:390:13:390:13 | [SSA] b | |
|
||||
| main.rs:390:16:390:16 | [SSA] c | main.rs:393:18:393:18 | c | |
|
||||
| main.rs:390:16:390:16 | c | main.rs:390:16:390:16 | [SSA] c | |
|
||||
| main.rs:390:22:394:9 | { ... } | main.rs:389:5:395:5 | match arr1 { ... } | |
|
||||
| main.rs:399:9:399:19 | [SSA] mut_arr | main.rs:400:10:400:16 | mut_arr | |
|
||||
| main.rs:399:9:399:19 | mut_arr | main.rs:399:9:399:19 | [SSA] mut_arr | |
|
||||
| main.rs:399:23:399:31 | [...] | main.rs:399:9:399:19 | mut_arr | |
|
||||
| main.rs:400:10:400:16 | [post] mut_arr | main.rs:402:5:402:11 | mut_arr | |
|
||||
| main.rs:400:10:400:16 | mut_arr | main.rs:402:5:402:11 | mut_arr | |
|
||||
| main.rs:402:5:402:11 | [post] mut_arr | main.rs:403:13:403:19 | mut_arr | |
|
||||
| main.rs:402:5:402:11 | mut_arr | main.rs:403:13:403:19 | mut_arr | |
|
||||
| main.rs:402:18:402:27 | source(...) | main.rs:402:5:402:14 | mut_arr[1] | |
|
||||
| main.rs:403:9:403:9 | [SSA] d | main.rs:404:10:404:10 | d | |
|
||||
| main.rs:403:9:403:9 | d | main.rs:403:9:403:9 | [SSA] d | |
|
||||
| main.rs:403:13:403:19 | [post] mut_arr | main.rs:405:10:405:16 | mut_arr | |
|
||||
| main.rs:403:13:403:19 | mut_arr | main.rs:405:10:405:16 | mut_arr | |
|
||||
| main.rs:403:13:403:22 | mut_arr[1] | main.rs:403:9:403:9 | d | |
|
||||
| main.rs:410:39:410:43 | [SSA] names | main.rs:412:25:412:29 | names | |
|
||||
| main.rs:410:39:410:43 | names | main.rs:410:39:410:43 | [SSA] names | |
|
||||
| main.rs:410:39:410:72 | ...: Vec::<...> | main.rs:410:39:410:43 | names | |
|
||||
| main.rs:411:9:411:20 | default_name | main.rs:411:9:411:20 | [SSA] default_name | |
|
||||
| main.rs:411:24:411:45 | ... .to_string(...) | main.rs:411:9:411:20 | default_name | |
|
||||
| main.rs:411:24:411:45 | ... .to_string(...) | main.rs:412:9:412:20 | phi(default_name) | |
|
||||
| main.rs:412:5:418:5 | for ... in ... { ... } | main.rs:410:75:419:1 | { ... } | |
|
||||
| main.rs:412:9:412:20 | phi(default_name) | main.rs:412:9:412:20 | phi(default_name) | |
|
||||
| main.rs:412:9:412:20 | phi(default_name) | main.rs:414:41:414:67 | default_name | |
|
||||
| main.rs:412:10:412:13 | [SSA] cond | main.rs:413:12:413:15 | cond | |
|
||||
| main.rs:412:10:412:13 | cond | main.rs:412:10:412:13 | [SSA] cond | |
|
||||
| main.rs:412:16:412:19 | [SSA] name | main.rs:414:21:414:24 | name | |
|
||||
| main.rs:412:16:412:19 | name | main.rs:412:16:412:19 | [SSA] name | |
|
||||
| main.rs:413:9:417:9 | if cond {...} | main.rs:412:31:418:5 | { ... } | |
|
||||
| main.rs:414:17:414:17 | [SSA] n | main.rs:415:18:415:18 | n | |
|
||||
| main.rs:414:17:414:17 | n | main.rs:414:17:414:17 | [SSA] n | |
|
||||
| main.rs:414:21:414:68 | name.unwrap_or_else(...) | main.rs:414:17:414:17 | n | |
|
||||
| main.rs:414:41:414:67 | [post] default_name | main.rs:412:9:412:20 | phi(default_name) | |
|
||||
| main.rs:414:41:414:67 | closure self in \|...\| ... | main.rs:414:44:414:55 | this | |
|
||||
| main.rs:414:41:414:67 | default_name | main.rs:412:9:412:20 | phi(default_name) | |
|
||||
| main.rs:428:9:428:9 | [SSA] s | main.rs:429:10:429:10 | s | |
|
||||
| main.rs:428:9:428:9 | s | main.rs:428:9:428:9 | [SSA] s | |
|
||||
| main.rs:428:13:428:27 | MacroExpr | main.rs:428:9:428:9 | s | |
|
||||
| main.rs:428:25:428:26 | source(...) | main.rs:428:13:428:27 | MacroExpr | |
|
||||
| main.rs:454:13:454:33 | result_questionmark(...) | main.rs:454:9:454:9 | _ | |
|
||||
| main.rs:466:36:466:41 | ...::new(...) | main.rs:466:36:466:41 | MacroExpr | |
|
||||
| main.rs:268:9:268:10 | [SSA] s2 | main.rs:271:14:271:15 | s2 | |
|
||||
| main.rs:268:9:268:10 | s2 | main.rs:268:9:268:10 | [SSA] s2 | |
|
||||
| main.rs:268:32:268:36 | Ok(...) | main.rs:268:9:268:10 | s2 | |
|
||||
| main.rs:269:9:269:10 | [SSA] s3 | main.rs:274:14:274:15 | s3 | |
|
||||
| main.rs:269:9:269:10 | s3 | main.rs:269:9:269:10 | [SSA] s3 | |
|
||||
| main.rs:269:32:269:46 | Err(...) | main.rs:269:9:269:10 | s3 | |
|
||||
| main.rs:270:9:270:10 | [SSA] i1 | main.rs:272:10:272:11 | i1 | |
|
||||
| main.rs:270:9:270:10 | i1 | main.rs:270:9:270:10 | [SSA] i1 | |
|
||||
| main.rs:270:14:270:16 | TryExpr | main.rs:270:9:270:10 | i1 | |
|
||||
| main.rs:271:9:271:10 | [SSA] i2 | main.rs:273:10:273:11 | i2 | |
|
||||
| main.rs:271:9:271:10 | i2 | main.rs:271:9:271:10 | [SSA] i2 | |
|
||||
| main.rs:271:14:271:16 | TryExpr | main.rs:271:9:271:10 | i2 | |
|
||||
| main.rs:274:9:274:10 | [SSA] i3 | main.rs:275:10:275:11 | i3 | |
|
||||
| main.rs:274:9:274:10 | i3 | main.rs:274:9:274:10 | [SSA] i3 | |
|
||||
| main.rs:274:14:274:16 | TryExpr | main.rs:274:9:274:10 | i3 | |
|
||||
| main.rs:276:5:276:9 | Ok(...) | main.rs:266:46:277:1 | { ... } | |
|
||||
| main.rs:280:9:280:10 | [SSA] s1 | main.rs:281:10:281:11 | s1 | |
|
||||
| main.rs:280:9:280:10 | s1 | main.rs:280:9:280:10 | [SSA] s1 | |
|
||||
| main.rs:280:32:280:45 | Ok(...) | main.rs:280:9:280:10 | s1 | |
|
||||
| main.rs:281:10:281:11 | [post] s1 | main.rs:282:10:282:11 | s1 | |
|
||||
| main.rs:281:10:281:11 | s1 | main.rs:282:10:282:11 | s1 | |
|
||||
| main.rs:284:9:284:10 | [SSA] s2 | main.rs:285:10:285:11 | s2 | |
|
||||
| main.rs:284:9:284:10 | s2 | main.rs:284:9:284:10 | [SSA] s2 | |
|
||||
| main.rs:284:32:284:46 | Err(...) | main.rs:284:9:284:10 | s2 | |
|
||||
| main.rs:285:10:285:11 | [post] s2 | main.rs:286:10:286:11 | s2 | |
|
||||
| main.rs:285:10:285:11 | s2 | main.rs:286:10:286:11 | s2 | |
|
||||
| main.rs:295:9:295:10 | [SSA] s1 | main.rs:297:11:297:12 | s1 | |
|
||||
| main.rs:295:9:295:10 | s1 | main.rs:295:9:295:10 | [SSA] s1 | |
|
||||
| main.rs:295:14:295:39 | ...::A(...) | main.rs:295:9:295:10 | s1 | |
|
||||
| main.rs:296:9:296:10 | [SSA] s2 | main.rs:304:11:304:12 | s2 | |
|
||||
| main.rs:296:9:296:10 | s2 | main.rs:296:9:296:10 | [SSA] s2 | |
|
||||
| main.rs:296:14:296:30 | ...::B(...) | main.rs:296:9:296:10 | s2 | |
|
||||
| main.rs:297:11:297:12 | s1 | main.rs:298:9:298:25 | ...::A(...) | |
|
||||
| main.rs:297:11:297:12 | s1 | main.rs:299:9:299:25 | ...::B(...) | |
|
||||
| main.rs:297:11:297:12 | s1 | main.rs:301:11:301:12 | s1 | |
|
||||
| main.rs:298:24:298:24 | [SSA] n | main.rs:298:35:298:35 | n | |
|
||||
| main.rs:298:24:298:24 | n | main.rs:298:24:298:24 | [SSA] n | |
|
||||
| main.rs:298:30:298:36 | sink(...) | main.rs:297:5:300:5 | match s1 { ... } | |
|
||||
| main.rs:299:24:299:24 | [SSA] n | main.rs:299:35:299:35 | n | |
|
||||
| main.rs:299:24:299:24 | n | main.rs:299:24:299:24 | [SSA] n | |
|
||||
| main.rs:299:30:299:36 | sink(...) | main.rs:297:5:300:5 | match s1 { ... } | |
|
||||
| main.rs:301:11:301:12 | s1 | main.rs:302:9:302:45 | ... \| ... | |
|
||||
| main.rs:302:9:302:45 | ... \| ... | main.rs:302:9:302:25 | ...::A(...) | |
|
||||
| main.rs:302:9:302:45 | ... \| ... | main.rs:302:29:302:45 | ...::B(...) | |
|
||||
| main.rs:302:9:302:45 | [SSA] [match(true)] phi | main.rs:302:55:302:55 | n | |
|
||||
| main.rs:302:24:302:24 | [SSA] [input] [match(true)] phi | main.rs:302:9:302:45 | [SSA] [match(true)] phi | |
|
||||
| main.rs:302:24:302:24 | [SSA] n | main.rs:302:24:302:24 | [SSA] [input] [match(true)] phi | |
|
||||
| main.rs:302:24:302:24 | n | main.rs:302:24:302:24 | [SSA] n | |
|
||||
| main.rs:302:44:302:44 | [SSA] [input] [match(true)] phi | main.rs:302:9:302:45 | [SSA] [match(true)] phi | |
|
||||
| main.rs:302:44:302:44 | [SSA] n | main.rs:302:44:302:44 | [SSA] [input] [match(true)] phi | |
|
||||
| main.rs:302:44:302:44 | n | main.rs:302:44:302:44 | [SSA] n | |
|
||||
| main.rs:302:50:302:56 | sink(...) | main.rs:301:5:303:5 | match s1 { ... } | |
|
||||
| main.rs:304:5:307:5 | match s2 { ... } | main.rs:294:48:308:1 | { ... } | |
|
||||
| main.rs:304:11:304:12 | s2 | main.rs:305:9:305:25 | ...::A(...) | |
|
||||
| main.rs:304:11:304:12 | s2 | main.rs:306:9:306:25 | ...::B(...) | |
|
||||
| main.rs:305:24:305:24 | [SSA] n | main.rs:305:35:305:35 | n | |
|
||||
| main.rs:305:24:305:24 | n | main.rs:305:24:305:24 | [SSA] n | |
|
||||
| main.rs:305:30:305:36 | sink(...) | main.rs:304:5:307:5 | match s2 { ... } | |
|
||||
| main.rs:306:24:306:24 | [SSA] n | main.rs:306:35:306:35 | n | |
|
||||
| main.rs:306:24:306:24 | n | main.rs:306:24:306:24 | [SSA] n | |
|
||||
| main.rs:306:30:306:36 | sink(...) | main.rs:304:5:307:5 | match s2 { ... } | |
|
||||
| main.rs:313:9:313:10 | [SSA] s1 | main.rs:315:11:315:12 | s1 | |
|
||||
| main.rs:313:9:313:10 | s1 | main.rs:313:9:313:10 | [SSA] s1 | |
|
||||
| main.rs:313:14:313:26 | A(...) | main.rs:313:9:313:10 | s1 | |
|
||||
| main.rs:314:9:314:10 | [SSA] s2 | main.rs:322:11:322:12 | s2 | |
|
||||
| main.rs:314:9:314:10 | s2 | main.rs:314:9:314:10 | [SSA] s2 | |
|
||||
| main.rs:314:14:314:17 | B(...) | main.rs:314:9:314:10 | s2 | |
|
||||
| main.rs:315:11:315:12 | s1 | main.rs:316:9:316:12 | A(...) | |
|
||||
| main.rs:315:11:315:12 | s1 | main.rs:317:9:317:12 | B(...) | |
|
||||
| main.rs:315:11:315:12 | s1 | main.rs:319:11:319:12 | s1 | |
|
||||
| main.rs:316:11:316:11 | [SSA] n | main.rs:316:22:316:22 | n | |
|
||||
| main.rs:316:11:316:11 | n | main.rs:316:11:316:11 | [SSA] n | |
|
||||
| main.rs:316:17:316:23 | sink(...) | main.rs:315:5:318:5 | match s1 { ... } | |
|
||||
| main.rs:317:11:317:11 | [SSA] n | main.rs:317:22:317:22 | n | |
|
||||
| main.rs:317:11:317:11 | n | main.rs:317:11:317:11 | [SSA] n | |
|
||||
| main.rs:317:17:317:23 | sink(...) | main.rs:315:5:318:5 | match s1 { ... } | |
|
||||
| main.rs:319:11:319:12 | s1 | main.rs:320:9:320:19 | ... \| ... | |
|
||||
| main.rs:320:9:320:19 | ... \| ... | main.rs:320:9:320:12 | A(...) | |
|
||||
| main.rs:320:9:320:19 | ... \| ... | main.rs:320:16:320:19 | B(...) | |
|
||||
| main.rs:320:9:320:19 | [SSA] [match(true)] phi | main.rs:320:29:320:29 | n | |
|
||||
| main.rs:320:11:320:11 | [SSA] [input] [match(true)] phi | main.rs:320:9:320:19 | [SSA] [match(true)] phi | |
|
||||
| main.rs:320:11:320:11 | [SSA] n | main.rs:320:11:320:11 | [SSA] [input] [match(true)] phi | |
|
||||
| main.rs:320:11:320:11 | n | main.rs:320:11:320:11 | [SSA] n | |
|
||||
| main.rs:320:18:320:18 | [SSA] [input] [match(true)] phi | main.rs:320:9:320:19 | [SSA] [match(true)] phi | |
|
||||
| main.rs:320:18:320:18 | [SSA] n | main.rs:320:18:320:18 | [SSA] [input] [match(true)] phi | |
|
||||
| main.rs:320:18:320:18 | n | main.rs:320:18:320:18 | [SSA] n | |
|
||||
| main.rs:320:24:320:30 | sink(...) | main.rs:319:5:321:5 | match s1 { ... } | |
|
||||
| main.rs:322:5:325:5 | match s2 { ... } | main.rs:312:50:326:1 | { ... } | |
|
||||
| main.rs:322:11:322:12 | s2 | main.rs:323:9:323:12 | A(...) | |
|
||||
| main.rs:322:11:322:12 | s2 | main.rs:324:9:324:12 | B(...) | |
|
||||
| main.rs:323:11:323:11 | [SSA] n | main.rs:323:22:323:22 | n | |
|
||||
| main.rs:323:11:323:11 | n | main.rs:323:11:323:11 | [SSA] n | |
|
||||
| main.rs:323:17:323:23 | sink(...) | main.rs:322:5:325:5 | match s2 { ... } | |
|
||||
| main.rs:324:11:324:11 | [SSA] n | main.rs:324:22:324:22 | n | |
|
||||
| main.rs:324:11:324:11 | n | main.rs:324:11:324:11 | [SSA] n | |
|
||||
| main.rs:324:17:324:23 | sink(...) | main.rs:322:5:325:5 | match s2 { ... } | |
|
||||
| main.rs:334:9:334:10 | [SSA] s1 | main.rs:338:11:338:12 | s1 | |
|
||||
| main.rs:334:9:334:10 | s1 | main.rs:334:9:334:10 | [SSA] s1 | |
|
||||
| main.rs:334:14:336:5 | ...::C {...} | main.rs:334:9:334:10 | s1 | |
|
||||
| main.rs:337:9:337:10 | [SSA] s2 | main.rs:345:11:345:12 | s2 | |
|
||||
| main.rs:337:9:337:10 | s2 | main.rs:337:9:337:10 | [SSA] s2 | |
|
||||
| main.rs:337:14:337:43 | ...::D {...} | main.rs:337:9:337:10 | s2 | |
|
||||
| main.rs:338:11:338:12 | s1 | main.rs:339:9:339:38 | ...::C {...} | |
|
||||
| main.rs:338:11:338:12 | s1 | main.rs:340:9:340:38 | ...::D {...} | |
|
||||
| main.rs:338:11:338:12 | s1 | main.rs:342:11:342:12 | s1 | |
|
||||
| main.rs:339:36:339:36 | [SSA] n | main.rs:339:48:339:48 | n | |
|
||||
| main.rs:339:36:339:36 | n | main.rs:339:36:339:36 | [SSA] n | |
|
||||
| main.rs:339:43:339:49 | sink(...) | main.rs:338:5:341:5 | match s1 { ... } | |
|
||||
| main.rs:340:36:340:36 | [SSA] n | main.rs:340:48:340:48 | n | |
|
||||
| main.rs:340:36:340:36 | n | main.rs:340:36:340:36 | [SSA] n | |
|
||||
| main.rs:340:43:340:49 | sink(...) | main.rs:338:5:341:5 | match s1 { ... } | |
|
||||
| main.rs:342:11:342:12 | s1 | main.rs:343:9:343:71 | ... \| ... | |
|
||||
| main.rs:343:9:343:71 | ... \| ... | main.rs:343:9:343:38 | ...::C {...} | |
|
||||
| main.rs:343:9:343:71 | ... \| ... | main.rs:343:42:343:71 | ...::D {...} | |
|
||||
| main.rs:343:9:343:71 | [SSA] [match(true)] phi | main.rs:343:81:343:81 | n | |
|
||||
| main.rs:343:36:343:36 | [SSA] [input] [match(true)] phi | main.rs:343:9:343:71 | [SSA] [match(true)] phi | |
|
||||
| main.rs:343:36:343:36 | [SSA] n | main.rs:343:36:343:36 | [SSA] [input] [match(true)] phi | |
|
||||
| main.rs:343:36:343:36 | n | main.rs:343:36:343:36 | [SSA] n | |
|
||||
| main.rs:343:69:343:69 | [SSA] [input] [match(true)] phi | main.rs:343:9:343:71 | [SSA] [match(true)] phi | |
|
||||
| main.rs:343:69:343:69 | [SSA] n | main.rs:343:69:343:69 | [SSA] [input] [match(true)] phi | |
|
||||
| main.rs:343:69:343:69 | n | main.rs:343:69:343:69 | [SSA] n | |
|
||||
| main.rs:343:76:343:82 | sink(...) | main.rs:342:5:344:5 | match s1 { ... } | |
|
||||
| main.rs:345:5:348:5 | match s2 { ... } | main.rs:333:49:349:1 | { ... } | |
|
||||
| main.rs:345:11:345:12 | s2 | main.rs:346:9:346:38 | ...::C {...} | |
|
||||
| main.rs:345:11:345:12 | s2 | main.rs:347:9:347:38 | ...::D {...} | |
|
||||
| main.rs:346:36:346:36 | [SSA] n | main.rs:346:48:346:48 | n | |
|
||||
| main.rs:346:36:346:36 | n | main.rs:346:36:346:36 | [SSA] n | |
|
||||
| main.rs:346:43:346:49 | sink(...) | main.rs:345:5:348:5 | match s2 { ... } | |
|
||||
| main.rs:347:36:347:36 | [SSA] n | main.rs:347:48:347:48 | n | |
|
||||
| main.rs:347:36:347:36 | n | main.rs:347:36:347:36 | [SSA] n | |
|
||||
| main.rs:347:43:347:49 | sink(...) | main.rs:345:5:348:5 | match s2 { ... } | |
|
||||
| main.rs:354:9:354:10 | [SSA] s1 | main.rs:358:11:358:12 | s1 | |
|
||||
| main.rs:354:9:354:10 | s1 | main.rs:354:9:354:10 | [SSA] s1 | |
|
||||
| main.rs:354:14:356:5 | C {...} | main.rs:354:9:354:10 | s1 | |
|
||||
| main.rs:357:9:357:10 | [SSA] s2 | main.rs:365:11:365:12 | s2 | |
|
||||
| main.rs:357:9:357:10 | s2 | main.rs:357:9:357:10 | [SSA] s2 | |
|
||||
| main.rs:357:14:357:29 | D {...} | main.rs:357:9:357:10 | s2 | |
|
||||
| main.rs:358:11:358:12 | s1 | main.rs:359:9:359:24 | C {...} | |
|
||||
| main.rs:358:11:358:12 | s1 | main.rs:360:9:360:24 | D {...} | |
|
||||
| main.rs:358:11:358:12 | s1 | main.rs:362:11:362:12 | s1 | |
|
||||
| main.rs:359:22:359:22 | [SSA] n | main.rs:359:34:359:34 | n | |
|
||||
| main.rs:359:22:359:22 | n | main.rs:359:22:359:22 | [SSA] n | |
|
||||
| main.rs:359:29:359:35 | sink(...) | main.rs:358:5:361:5 | match s1 { ... } | |
|
||||
| main.rs:360:22:360:22 | [SSA] n | main.rs:360:34:360:34 | n | |
|
||||
| main.rs:360:22:360:22 | n | main.rs:360:22:360:22 | [SSA] n | |
|
||||
| main.rs:360:29:360:35 | sink(...) | main.rs:358:5:361:5 | match s1 { ... } | |
|
||||
| main.rs:362:11:362:12 | s1 | main.rs:363:9:363:43 | ... \| ... | |
|
||||
| main.rs:363:9:363:43 | ... \| ... | main.rs:363:9:363:24 | C {...} | |
|
||||
| main.rs:363:9:363:43 | ... \| ... | main.rs:363:28:363:43 | D {...} | |
|
||||
| main.rs:363:9:363:43 | [SSA] [match(true)] phi | main.rs:363:53:363:53 | n | |
|
||||
| main.rs:363:22:363:22 | [SSA] [input] [match(true)] phi | main.rs:363:9:363:43 | [SSA] [match(true)] phi | |
|
||||
| main.rs:363:22:363:22 | [SSA] n | main.rs:363:22:363:22 | [SSA] [input] [match(true)] phi | |
|
||||
| main.rs:363:22:363:22 | n | main.rs:363:22:363:22 | [SSA] n | |
|
||||
| main.rs:363:41:363:41 | [SSA] [input] [match(true)] phi | main.rs:363:9:363:43 | [SSA] [match(true)] phi | |
|
||||
| main.rs:363:41:363:41 | [SSA] n | main.rs:363:41:363:41 | [SSA] [input] [match(true)] phi | |
|
||||
| main.rs:363:41:363:41 | n | main.rs:363:41:363:41 | [SSA] n | |
|
||||
| main.rs:363:48:363:54 | sink(...) | main.rs:362:5:364:5 | match s1 { ... } | |
|
||||
| main.rs:365:5:368:5 | match s2 { ... } | main.rs:353:51:369:1 | { ... } | |
|
||||
| main.rs:365:11:365:12 | s2 | main.rs:366:9:366:24 | C {...} | |
|
||||
| main.rs:365:11:365:12 | s2 | main.rs:367:9:367:24 | D {...} | |
|
||||
| main.rs:366:22:366:22 | [SSA] n | main.rs:366:34:366:34 | n | |
|
||||
| main.rs:366:22:366:22 | n | main.rs:366:22:366:22 | [SSA] n | |
|
||||
| main.rs:366:29:366:35 | sink(...) | main.rs:365:5:368:5 | match s2 { ... } | |
|
||||
| main.rs:367:22:367:22 | [SSA] n | main.rs:367:34:367:34 | n | |
|
||||
| main.rs:367:22:367:22 | n | main.rs:367:22:367:22 | [SSA] n | |
|
||||
| main.rs:367:29:367:35 | sink(...) | main.rs:365:5:368:5 | match s2 { ... } | |
|
||||
| main.rs:375:9:375:12 | [SSA] arr1 | main.rs:376:14:376:17 | arr1 | |
|
||||
| main.rs:375:9:375:12 | arr1 | main.rs:375:9:375:12 | [SSA] arr1 | |
|
||||
| main.rs:375:16:375:33 | [...] | main.rs:375:9:375:12 | arr1 | |
|
||||
| main.rs:376:9:376:10 | [SSA] n1 | main.rs:377:10:377:11 | n1 | |
|
||||
| main.rs:376:9:376:10 | n1 | main.rs:376:9:376:10 | [SSA] n1 | |
|
||||
| main.rs:376:14:376:20 | arr1[2] | main.rs:376:9:376:10 | n1 | |
|
||||
| main.rs:379:9:379:12 | [SSA] arr2 | main.rs:380:14:380:17 | arr2 | |
|
||||
| main.rs:379:9:379:12 | arr2 | main.rs:379:9:379:12 | [SSA] arr2 | |
|
||||
| main.rs:379:16:379:31 | [...; 10] | main.rs:379:9:379:12 | arr2 | |
|
||||
| main.rs:380:9:380:10 | [SSA] n2 | main.rs:381:10:381:11 | n2 | |
|
||||
| main.rs:380:9:380:10 | n2 | main.rs:380:9:380:10 | [SSA] n2 | |
|
||||
| main.rs:380:14:380:20 | arr2[4] | main.rs:380:9:380:10 | n2 | |
|
||||
| main.rs:383:9:383:12 | [SSA] arr3 | main.rs:384:14:384:17 | arr3 | |
|
||||
| main.rs:383:9:383:12 | arr3 | main.rs:383:9:383:12 | [SSA] arr3 | |
|
||||
| main.rs:383:16:383:24 | [...] | main.rs:383:9:383:12 | arr3 | |
|
||||
| main.rs:384:9:384:10 | [SSA] n3 | main.rs:385:10:385:11 | n3 | |
|
||||
| main.rs:384:9:384:10 | n3 | main.rs:384:9:384:10 | [SSA] n3 | |
|
||||
| main.rs:384:14:384:20 | arr3[2] | main.rs:384:9:384:10 | n3 | |
|
||||
| main.rs:389:9:389:12 | [SSA] arr1 | main.rs:390:15:390:18 | arr1 | |
|
||||
| main.rs:389:9:389:12 | arr1 | main.rs:389:9:389:12 | [SSA] arr1 | |
|
||||
| main.rs:389:16:389:33 | [...] | main.rs:389:9:389:12 | arr1 | |
|
||||
| main.rs:390:9:390:10 | [SSA] n1 | main.rs:391:14:391:15 | n1 | |
|
||||
| main.rs:390:9:390:10 | n1 | main.rs:390:9:390:10 | [SSA] n1 | |
|
||||
| main.rs:394:9:394:12 | [SSA] arr2 | main.rs:395:15:395:18 | arr2 | |
|
||||
| main.rs:394:9:394:12 | arr2 | main.rs:394:9:394:12 | [SSA] arr2 | |
|
||||
| main.rs:394:16:394:24 | [...] | main.rs:394:9:394:12 | arr2 | |
|
||||
| main.rs:395:5:397:5 | for ... in ... { ... } | main.rs:388:21:398:1 | { ... } | |
|
||||
| main.rs:395:9:395:10 | [SSA] n2 | main.rs:396:14:396:15 | n2 | |
|
||||
| main.rs:395:9:395:10 | n2 | main.rs:395:9:395:10 | [SSA] n2 | |
|
||||
| main.rs:401:9:401:12 | [SSA] arr1 | main.rs:402:11:402:14 | arr1 | |
|
||||
| main.rs:401:9:401:12 | arr1 | main.rs:401:9:401:12 | [SSA] arr1 | |
|
||||
| main.rs:401:16:401:33 | [...] | main.rs:401:9:401:12 | arr1 | |
|
||||
| main.rs:402:5:408:5 | match arr1 { ... } | main.rs:400:26:409:1 | { ... } | |
|
||||
| main.rs:402:11:402:14 | arr1 | main.rs:403:9:403:17 | SlicePat | |
|
||||
| main.rs:403:10:403:10 | [SSA] a | main.rs:404:18:404:18 | a | |
|
||||
| main.rs:403:10:403:10 | a | main.rs:403:10:403:10 | [SSA] a | |
|
||||
| main.rs:403:13:403:13 | [SSA] b | main.rs:405:18:405:18 | b | |
|
||||
| main.rs:403:13:403:13 | b | main.rs:403:13:403:13 | [SSA] b | |
|
||||
| main.rs:403:16:403:16 | [SSA] c | main.rs:406:18:406:18 | c | |
|
||||
| main.rs:403:16:403:16 | c | main.rs:403:16:403:16 | [SSA] c | |
|
||||
| main.rs:403:22:407:9 | { ... } | main.rs:402:5:408:5 | match arr1 { ... } | |
|
||||
| main.rs:412:9:412:19 | [SSA] mut_arr | main.rs:413:10:413:16 | mut_arr | |
|
||||
| main.rs:412:9:412:19 | mut_arr | main.rs:412:9:412:19 | [SSA] mut_arr | |
|
||||
| main.rs:412:23:412:31 | [...] | main.rs:412:9:412:19 | mut_arr | |
|
||||
| main.rs:413:10:413:16 | [post] mut_arr | main.rs:415:5:415:11 | mut_arr | |
|
||||
| main.rs:413:10:413:16 | mut_arr | main.rs:415:5:415:11 | mut_arr | |
|
||||
| main.rs:415:5:415:11 | [post] mut_arr | main.rs:416:13:416:19 | mut_arr | |
|
||||
| main.rs:415:5:415:11 | mut_arr | main.rs:416:13:416:19 | mut_arr | |
|
||||
| main.rs:415:18:415:27 | source(...) | main.rs:415:5:415:14 | mut_arr[1] | |
|
||||
| main.rs:416:9:416:9 | [SSA] d | main.rs:417:10:417:10 | d | |
|
||||
| main.rs:416:9:416:9 | d | main.rs:416:9:416:9 | [SSA] d | |
|
||||
| main.rs:416:13:416:19 | [post] mut_arr | main.rs:418:10:418:16 | mut_arr | |
|
||||
| main.rs:416:13:416:19 | mut_arr | main.rs:418:10:418:16 | mut_arr | |
|
||||
| main.rs:416:13:416:22 | mut_arr[1] | main.rs:416:9:416:9 | d | |
|
||||
| main.rs:423:39:423:43 | [SSA] names | main.rs:425:25:425:29 | names | |
|
||||
| main.rs:423:39:423:43 | names | main.rs:423:39:423:43 | [SSA] names | |
|
||||
| main.rs:423:39:423:72 | ...: Vec::<...> | main.rs:423:39:423:43 | names | |
|
||||
| main.rs:424:9:424:20 | default_name | main.rs:424:9:424:20 | [SSA] default_name | |
|
||||
| main.rs:424:24:424:45 | ... .to_string(...) | main.rs:424:9:424:20 | default_name | |
|
||||
| main.rs:424:24:424:45 | ... .to_string(...) | main.rs:425:9:425:20 | phi(default_name) | |
|
||||
| main.rs:425:5:431:5 | for ... in ... { ... } | main.rs:423:75:432:1 | { ... } | |
|
||||
| main.rs:425:9:425:20 | phi(default_name) | main.rs:425:9:425:20 | phi(default_name) | |
|
||||
| main.rs:425:9:425:20 | phi(default_name) | main.rs:427:41:427:67 | default_name | |
|
||||
| main.rs:425:10:425:13 | [SSA] cond | main.rs:426:12:426:15 | cond | |
|
||||
| main.rs:425:10:425:13 | cond | main.rs:425:10:425:13 | [SSA] cond | |
|
||||
| main.rs:425:16:425:19 | [SSA] name | main.rs:427:21:427:24 | name | |
|
||||
| main.rs:425:16:425:19 | name | main.rs:425:16:425:19 | [SSA] name | |
|
||||
| main.rs:426:9:430:9 | if cond {...} | main.rs:425:31:431:5 | { ... } | |
|
||||
| main.rs:427:17:427:17 | [SSA] n | main.rs:428:18:428:18 | n | |
|
||||
| main.rs:427:17:427:17 | n | main.rs:427:17:427:17 | [SSA] n | |
|
||||
| main.rs:427:21:427:68 | name.unwrap_or_else(...) | main.rs:427:17:427:17 | n | |
|
||||
| main.rs:427:41:427:67 | [post] default_name | main.rs:425:9:425:20 | phi(default_name) | |
|
||||
| main.rs:427:41:427:67 | closure self in \|...\| ... | main.rs:427:44:427:55 | this | |
|
||||
| main.rs:427:41:427:67 | default_name | main.rs:425:9:425:20 | phi(default_name) | |
|
||||
| main.rs:441:9:441:9 | [SSA] s | main.rs:442:10:442:10 | s | |
|
||||
| main.rs:441:9:441:9 | s | main.rs:441:9:441:9 | [SSA] s | |
|
||||
| main.rs:441:13:441:27 | MacroExpr | main.rs:441:9:441:9 | s | |
|
||||
| main.rs:441:25:441:26 | source(...) | main.rs:441:13:441:27 | MacroExpr | |
|
||||
| main.rs:468:13:468:33 | result_questionmark(...) | main.rs:468:9:468:9 | _ | |
|
||||
| main.rs:480:36:480:41 | ...::new(...) | main.rs:480:36:480:41 | MacroExpr | |
|
||||
models
|
||||
| 1 | Sink: lang:std; crate::io::stdio::_print; log-injection; Argument[0] |
|
||||
| 2 | Summary: lang:core; <crate::option::Option>::expect; Argument[self].Variant[crate::option::Option::Some(0)]; ReturnValue; value |
|
||||
@@ -519,7 +538,11 @@ models
|
||||
| 19 | Summary: lang:core; <crate::result::Result>::unwrap_or_else; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue; value |
|
||||
| 20 | Summary: lang:core; <crate::result::Result>::unwrap_unchecked; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue; value |
|
||||
| 21 | Summary: lang:core; crate::hint::must_use; Argument[0]; ReturnValue; value |
|
||||
| 22 | Summary: lang:core; crate::iter::traits::iterator::Iterator::collect; Argument[self].Element; ReturnValue.Element; value |
|
||||
| 23 | Summary: lang:core; crate::iter::traits::iterator::Iterator::nth; Argument[self].Element; ReturnValue.Variant[crate::option::Option::Some(0)]; value |
|
||||
storeStep
|
||||
| file://:0:0:0:0 | [summary] to write: ReturnValue.Element in lang:core::_::crate::iter::traits::iterator::Iterator::collect | element | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::crate::iter::traits::iterator::Iterator::collect |
|
||||
| file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::option::Option::Some(0)] in lang:core::_::crate::iter::traits::iterator::Iterator::nth | Some | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:core::_::crate::iter::traits::iterator::Iterator::nth |
|
||||
| file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::blocking::response::Response>::bytes | Ok | file://:0:0:0:0 | [summary] to write: ReturnValue in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::blocking::response::Response>::bytes |
|
||||
| file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::blocking::response::Response>::text | Ok | file://:0:0:0:0 | [summary] to write: ReturnValue in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::blocking::response::Response>::text |
|
||||
| file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::blocking::response::Response>::text_with_charset | Ok | file://:0:0:0:0 | [summary] to write: ReturnValue in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::blocking::response::Response>::text_with_charset |
|
||||
@@ -551,57 +574,59 @@ storeStep
|
||||
| main.rs:164:16:164:16 | 2 | Point.x | main.rs:163:16:166:9 | Point {...} |
|
||||
| main.rs:165:16:165:25 | source(...) | Point.y | main.rs:163:16:166:9 | Point {...} |
|
||||
| main.rs:167:12:167:12 | 4 | Point3D.z | main.rs:162:13:168:5 | Point3D {...} |
|
||||
| main.rs:176:16:179:9 | Point {...} | Point3D.plane | main.rs:175:13:181:5 | Point3D {...} |
|
||||
| main.rs:177:16:177:16 | 2 | Point.x | main.rs:176:16:179:9 | Point {...} |
|
||||
| main.rs:178:16:178:25 | source(...) | Point.y | main.rs:176:16:179:9 | Point {...} |
|
||||
| main.rs:180:12:180:12 | 4 | Point3D.z | main.rs:175:13:181:5 | Point3D {...} |
|
||||
| main.rs:198:27:198:36 | source(...) | Some | main.rs:198:14:198:37 | ...::Some(...) |
|
||||
| main.rs:199:27:199:27 | 2 | Some | main.rs:199:14:199:28 | ...::Some(...) |
|
||||
| main.rs:211:19:211:28 | source(...) | Some | main.rs:211:14:211:29 | Some(...) |
|
||||
| main.rs:212:19:212:19 | 2 | Some | main.rs:212:14:212:20 | Some(...) |
|
||||
| main.rs:177:16:177:32 | Point {...} | Point3D.plane | main.rs:176:13:179:5 | Point3D {...} |
|
||||
| main.rs:177:27:177:27 | 2 | Point.x | main.rs:177:16:177:32 | Point {...} |
|
||||
| main.rs:177:30:177:30 | y | Point.y | main.rs:177:16:177:32 | Point {...} |
|
||||
| main.rs:178:12:178:12 | 4 | Point3D.z | main.rs:176:13:179:5 | Point3D {...} |
|
||||
| main.rs:195:27:195:36 | source(...) | MyTupleStruct(0) | main.rs:195:13:195:40 | MyTupleStruct(...) |
|
||||
| main.rs:195:39:195:39 | 2 | MyTupleStruct(1) | main.rs:195:13:195:40 | MyTupleStruct(...) |
|
||||
| main.rs:211:27:211:36 | source(...) | Some | main.rs:211:14:211:37 | ...::Some(...) |
|
||||
| main.rs:212:27:212:27 | 2 | Some | main.rs:212:14:212:28 | ...::Some(...) |
|
||||
| main.rs:224:19:224:28 | source(...) | Some | main.rs:224:14:224:29 | Some(...) |
|
||||
| main.rs:229:19:229:28 | source(...) | Some | main.rs:229:14:229:29 | Some(...) |
|
||||
| main.rs:232:19:232:19 | 0 | Some | main.rs:232:14:232:20 | Some(...) |
|
||||
| main.rs:225:19:225:19 | 2 | Some | main.rs:225:14:225:20 | Some(...) |
|
||||
| main.rs:237:19:237:28 | source(...) | Some | main.rs:237:14:237:29 | Some(...) |
|
||||
| main.rs:245:19:245:28 | source(...) | Some | main.rs:245:14:245:29 | Some(...) |
|
||||
| main.rs:246:19:246:19 | 2 | Some | main.rs:246:14:246:20 | Some(...) |
|
||||
| main.rs:250:10:250:10 | 0 | Some | main.rs:250:5:250:11 | Some(...) |
|
||||
| main.rs:254:35:254:44 | source(...) | Ok | main.rs:254:32:254:45 | Ok(...) |
|
||||
| main.rs:255:35:255:35 | 2 | Ok | main.rs:255:32:255:36 | Ok(...) |
|
||||
| main.rs:256:36:256:45 | source(...) | Err | main.rs:256:32:256:46 | Err(...) |
|
||||
| main.rs:263:8:263:8 | 0 | Ok | main.rs:263:5:263:9 | Ok(...) |
|
||||
| main.rs:242:19:242:28 | source(...) | Some | main.rs:242:14:242:29 | Some(...) |
|
||||
| main.rs:245:19:245:19 | 0 | Some | main.rs:245:14:245:20 | Some(...) |
|
||||
| main.rs:250:19:250:28 | source(...) | Some | main.rs:250:14:250:29 | Some(...) |
|
||||
| main.rs:258:19:258:28 | source(...) | Some | main.rs:258:14:258:29 | Some(...) |
|
||||
| main.rs:259:19:259:19 | 2 | Some | main.rs:259:14:259:20 | Some(...) |
|
||||
| main.rs:263:10:263:10 | 0 | Some | main.rs:263:5:263:11 | Some(...) |
|
||||
| main.rs:267:35:267:44 | source(...) | Ok | main.rs:267:32:267:45 | Ok(...) |
|
||||
| main.rs:271:36:271:45 | source(...) | Err | main.rs:271:32:271:46 | Err(...) |
|
||||
| main.rs:282:29:282:38 | source(...) | A | main.rs:282:14:282:39 | ...::A(...) |
|
||||
| main.rs:283:29:283:29 | 2 | B | main.rs:283:14:283:30 | ...::B(...) |
|
||||
| main.rs:300:16:300:25 | source(...) | A | main.rs:300:14:300:26 | A(...) |
|
||||
| main.rs:301:16:301:16 | 2 | B | main.rs:301:14:301:17 | B(...) |
|
||||
| main.rs:322:18:322:27 | source(...) | C | main.rs:321:14:323:5 | ...::C {...} |
|
||||
| main.rs:324:41:324:41 | 2 | D | main.rs:324:14:324:43 | ...::D {...} |
|
||||
| main.rs:342:18:342:27 | source(...) | C | main.rs:341:14:343:5 | C {...} |
|
||||
| main.rs:344:27:344:27 | 2 | D | main.rs:344:14:344:29 | D {...} |
|
||||
| main.rs:362:17:362:17 | 1 | element | main.rs:362:16:362:33 | [...] |
|
||||
| main.rs:362:20:362:20 | 2 | element | main.rs:362:16:362:33 | [...] |
|
||||
| main.rs:362:23:362:32 | source(...) | element | main.rs:362:16:362:33 | [...] |
|
||||
| main.rs:366:17:366:26 | source(...) | element | main.rs:366:16:366:31 | [...; 10] |
|
||||
| main.rs:370:17:370:17 | 1 | element | main.rs:370:16:370:24 | [...] |
|
||||
| main.rs:370:20:370:20 | 2 | element | main.rs:370:16:370:24 | [...] |
|
||||
| main.rs:370:23:370:23 | 3 | element | main.rs:370:16:370:24 | [...] |
|
||||
| main.rs:376:17:376:17 | 1 | element | main.rs:376:16:376:33 | [...] |
|
||||
| main.rs:376:20:376:20 | 2 | element | main.rs:376:16:376:33 | [...] |
|
||||
| main.rs:376:23:376:32 | source(...) | element | main.rs:376:16:376:33 | [...] |
|
||||
| main.rs:381:17:381:17 | 1 | element | main.rs:381:16:381:24 | [...] |
|
||||
| main.rs:381:20:381:20 | 2 | element | main.rs:381:16:381:24 | [...] |
|
||||
| main.rs:381:23:381:23 | 3 | element | main.rs:381:16:381:24 | [...] |
|
||||
| main.rs:388:17:388:17 | 1 | element | main.rs:388:16:388:33 | [...] |
|
||||
| main.rs:388:20:388:20 | 2 | element | main.rs:388:16:388:33 | [...] |
|
||||
| main.rs:388:23:388:32 | source(...) | element | main.rs:388:16:388:33 | [...] |
|
||||
| main.rs:399:24:399:24 | 1 | element | main.rs:399:23:399:31 | [...] |
|
||||
| main.rs:399:27:399:27 | 2 | element | main.rs:399:23:399:31 | [...] |
|
||||
| main.rs:399:30:399:30 | 3 | element | main.rs:399:23:399:31 | [...] |
|
||||
| main.rs:402:18:402:27 | source(...) | element | main.rs:402:5:402:11 | [post] mut_arr |
|
||||
| main.rs:414:41:414:67 | default_name | captured default_name | main.rs:414:41:414:67 | \|...\| ... |
|
||||
| main.rs:436:27:436:27 | 0 | Some | main.rs:436:22:436:28 | Some(...) |
|
||||
| main.rs:268:35:268:35 | 2 | Ok | main.rs:268:32:268:36 | Ok(...) |
|
||||
| main.rs:269:36:269:45 | source(...) | Err | main.rs:269:32:269:46 | Err(...) |
|
||||
| main.rs:276:8:276:8 | 0 | Ok | main.rs:276:5:276:9 | Ok(...) |
|
||||
| main.rs:280:35:280:44 | source(...) | Ok | main.rs:280:32:280:45 | Ok(...) |
|
||||
| main.rs:284:36:284:45 | source(...) | Err | main.rs:284:32:284:46 | Err(...) |
|
||||
| main.rs:295:29:295:38 | source(...) | A | main.rs:295:14:295:39 | ...::A(...) |
|
||||
| main.rs:296:29:296:29 | 2 | B | main.rs:296:14:296:30 | ...::B(...) |
|
||||
| main.rs:313:16:313:25 | source(...) | A | main.rs:313:14:313:26 | A(...) |
|
||||
| main.rs:314:16:314:16 | 2 | B | main.rs:314:14:314:17 | B(...) |
|
||||
| main.rs:335:18:335:27 | source(...) | C | main.rs:334:14:336:5 | ...::C {...} |
|
||||
| main.rs:337:41:337:41 | 2 | D | main.rs:337:14:337:43 | ...::D {...} |
|
||||
| main.rs:355:18:355:27 | source(...) | C | main.rs:354:14:356:5 | C {...} |
|
||||
| main.rs:357:27:357:27 | 2 | D | main.rs:357:14:357:29 | D {...} |
|
||||
| main.rs:375:17:375:17 | 1 | element | main.rs:375:16:375:33 | [...] |
|
||||
| main.rs:375:20:375:20 | 2 | element | main.rs:375:16:375:33 | [...] |
|
||||
| main.rs:375:23:375:32 | source(...) | element | main.rs:375:16:375:33 | [...] |
|
||||
| main.rs:379:17:379:26 | source(...) | element | main.rs:379:16:379:31 | [...; 10] |
|
||||
| main.rs:383:17:383:17 | 1 | element | main.rs:383:16:383:24 | [...] |
|
||||
| main.rs:383:20:383:20 | 2 | element | main.rs:383:16:383:24 | [...] |
|
||||
| main.rs:383:23:383:23 | 3 | element | main.rs:383:16:383:24 | [...] |
|
||||
| main.rs:389:17:389:17 | 1 | element | main.rs:389:16:389:33 | [...] |
|
||||
| main.rs:389:20:389:20 | 2 | element | main.rs:389:16:389:33 | [...] |
|
||||
| main.rs:389:23:389:32 | source(...) | element | main.rs:389:16:389:33 | [...] |
|
||||
| main.rs:394:17:394:17 | 1 | element | main.rs:394:16:394:24 | [...] |
|
||||
| main.rs:394:20:394:20 | 2 | element | main.rs:394:16:394:24 | [...] |
|
||||
| main.rs:394:23:394:23 | 3 | element | main.rs:394:16:394:24 | [...] |
|
||||
| main.rs:401:17:401:17 | 1 | element | main.rs:401:16:401:33 | [...] |
|
||||
| main.rs:401:20:401:20 | 2 | element | main.rs:401:16:401:33 | [...] |
|
||||
| main.rs:401:23:401:32 | source(...) | element | main.rs:401:16:401:33 | [...] |
|
||||
| main.rs:412:24:412:24 | 1 | element | main.rs:412:23:412:31 | [...] |
|
||||
| main.rs:412:27:412:27 | 2 | element | main.rs:412:23:412:31 | [...] |
|
||||
| main.rs:412:30:412:30 | 3 | element | main.rs:412:23:412:31 | [...] |
|
||||
| main.rs:415:18:415:27 | source(...) | element | main.rs:415:5:415:11 | [post] mut_arr |
|
||||
| main.rs:427:41:427:67 | default_name | captured default_name | main.rs:427:41:427:67 | \|...\| ... |
|
||||
| main.rs:449:27:449:27 | 0 | Some | main.rs:449:22:449:28 | Some(...) |
|
||||
readStep
|
||||
| file://:0:0:0:0 | [summary param] 0 in lang:core::_::<crate::option::Option>::unwrap_or_else | function return | file://:0:0:0:0 | [summary] read: Argument[0].ReturnValue in lang:core::_::<crate::option::Option>::unwrap_or_else |
|
||||
| file://:0:0:0:0 | [summary param] 0 in lang:core::_::<crate::result::Result>::unwrap_or_else | function return | file://:0:0:0:0 | [summary] read: Argument[0].ReturnValue in lang:core::_::<crate::result::Result>::unwrap_or_else |
|
||||
@@ -620,6 +645,8 @@ readStep
|
||||
| file://:0:0:0:0 | [summary param] self in lang:core::_::<crate::result::Result>::unwrap_or_default | Ok | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::<crate::result::Result>::unwrap_or_default |
|
||||
| file://:0:0:0:0 | [summary param] self in lang:core::_::<crate::result::Result>::unwrap_or_else | Ok | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::<crate::result::Result>::unwrap_or_else |
|
||||
| file://:0:0:0:0 | [summary param] self in lang:core::_::<crate::result::Result>::unwrap_unchecked | Ok | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::<crate::result::Result>::unwrap_unchecked |
|
||||
| file://:0:0:0:0 | [summary param] self in lang:core::_::crate::iter::traits::iterator::Iterator::collect | element | file://:0:0:0:0 | [summary] read: Argument[self].Element in lang:core::_::crate::iter::traits::iterator::Iterator::collect |
|
||||
| file://:0:0:0:0 | [summary param] self in lang:core::_::crate::iter::traits::iterator::Iterator::nth | element | file://:0:0:0:0 | [summary] read: Argument[self].Element in lang:core::_::crate::iter::traits::iterator::Iterator::nth |
|
||||
| main.rs:33:9:33:15 | Some(...) | Some | main.rs:33:14:33:14 | _ |
|
||||
| main.rs:87:11:87:11 | i | &ref | main.rs:87:10:87:11 | * ... |
|
||||
| main.rs:95:10:95:10 | a | tuple.0 | main.rs:95:10:95:12 | a.0 |
|
||||
@@ -640,62 +667,66 @@ readStep
|
||||
| main.rs:122:10:122:10 | b | tuple.1 | main.rs:122:10:122:12 | b.1 |
|
||||
| main.rs:151:9:151:28 | Point {...} | Point.x | main.rs:151:20:151:20 | a |
|
||||
| main.rs:151:9:151:28 | Point {...} | Point.y | main.rs:151:26:151:26 | b |
|
||||
| main.rs:183:9:186:9 | Point3D {...} | Point3D.plane | main.rs:184:20:184:33 | Point {...} |
|
||||
| main.rs:183:9:186:9 | Point3D {...} | Point3D.z | main.rs:185:13:185:13 | z |
|
||||
| main.rs:184:20:184:33 | Point {...} | Point.x | main.rs:184:28:184:28 | x |
|
||||
| main.rs:184:20:184:33 | Point {...} | Point.y | main.rs:184:31:184:31 | y |
|
||||
| main.rs:201:9:201:23 | ...::Some(...) | Some | main.rs:201:22:201:22 | n |
|
||||
| main.rs:205:9:205:23 | ...::Some(...) | Some | main.rs:205:22:205:22 | n |
|
||||
| main.rs:214:9:214:15 | Some(...) | Some | main.rs:214:14:214:14 | n |
|
||||
| main.rs:218:9:218:15 | Some(...) | Some | main.rs:218:14:218:14 | n |
|
||||
| main.rs:247:14:247:15 | s1 | Ok | main.rs:247:14:247:16 | TryExpr |
|
||||
| main.rs:247:14:247:15 | s1 | Some | main.rs:247:14:247:16 | TryExpr |
|
||||
| main.rs:249:10:249:11 | s2 | Ok | main.rs:249:10:249:12 | TryExpr |
|
||||
| main.rs:249:10:249:11 | s2 | Some | main.rs:249:10:249:12 | TryExpr |
|
||||
| main.rs:257:14:257:15 | s1 | Ok | main.rs:257:14:257:16 | TryExpr |
|
||||
| main.rs:257:14:257:15 | s1 | Some | main.rs:257:14:257:16 | TryExpr |
|
||||
| main.rs:258:14:258:15 | s2 | Ok | main.rs:258:14:258:16 | TryExpr |
|
||||
| main.rs:258:14:258:15 | s2 | Some | main.rs:258:14:258:16 | TryExpr |
|
||||
| main.rs:261:14:261:15 | s3 | Ok | main.rs:261:14:261:16 | TryExpr |
|
||||
| main.rs:261:14:261:15 | s3 | Some | main.rs:261:14:261:16 | TryExpr |
|
||||
| main.rs:285:9:285:25 | ...::A(...) | A | main.rs:285:24:285:24 | n |
|
||||
| main.rs:286:9:286:25 | ...::B(...) | B | main.rs:286:24:286:24 | n |
|
||||
| main.rs:289:9:289:25 | ...::A(...) | A | main.rs:289:24:289:24 | n |
|
||||
| main.rs:289:29:289:45 | ...::B(...) | B | main.rs:289:44:289:44 | n |
|
||||
| main.rs:292:9:292:25 | ...::A(...) | A | main.rs:292:24:292:24 | n |
|
||||
| main.rs:293:9:293:25 | ...::B(...) | B | main.rs:293:24:293:24 | n |
|
||||
| main.rs:303:9:303:12 | A(...) | A | main.rs:303:11:303:11 | n |
|
||||
| main.rs:304:9:304:12 | B(...) | B | main.rs:304:11:304:11 | n |
|
||||
| main.rs:307:9:307:12 | A(...) | A | main.rs:307:11:307:11 | n |
|
||||
| main.rs:307:16:307:19 | B(...) | B | main.rs:307:18:307:18 | n |
|
||||
| main.rs:310:9:310:12 | A(...) | A | main.rs:310:11:310:11 | n |
|
||||
| main.rs:311:9:311:12 | B(...) | B | main.rs:311:11:311:11 | n |
|
||||
| main.rs:326:9:326:38 | ...::C {...} | C | main.rs:326:36:326:36 | n |
|
||||
| main.rs:327:9:327:38 | ...::D {...} | D | main.rs:327:36:327:36 | n |
|
||||
| main.rs:330:9:330:38 | ...::C {...} | C | main.rs:330:36:330:36 | n |
|
||||
| main.rs:330:42:330:71 | ...::D {...} | D | main.rs:330:69:330:69 | n |
|
||||
| main.rs:333:9:333:38 | ...::C {...} | C | main.rs:333:36:333:36 | n |
|
||||
| main.rs:334:9:334:38 | ...::D {...} | D | main.rs:334:36:334:36 | n |
|
||||
| main.rs:346:9:346:24 | C {...} | C | main.rs:346:22:346:22 | n |
|
||||
| main.rs:347:9:347:24 | D {...} | D | main.rs:347:22:347:22 | n |
|
||||
| main.rs:350:9:350:24 | C {...} | C | main.rs:350:22:350:22 | n |
|
||||
| main.rs:350:28:350:43 | D {...} | D | main.rs:350:41:350:41 | n |
|
||||
| main.rs:353:9:353:24 | C {...} | C | main.rs:353:22:353:22 | n |
|
||||
| main.rs:354:9:354:24 | D {...} | D | main.rs:354:22:354:22 | n |
|
||||
| main.rs:363:14:363:17 | arr1 | element | main.rs:363:14:363:20 | arr1[2] |
|
||||
| main.rs:367:14:367:17 | arr2 | element | main.rs:367:14:367:20 | arr2[4] |
|
||||
| main.rs:371:14:371:17 | arr3 | element | main.rs:371:14:371:20 | arr3[2] |
|
||||
| main.rs:377:15:377:18 | arr1 | element | main.rs:377:9:377:10 | n1 |
|
||||
| main.rs:382:15:382:18 | arr2 | element | main.rs:382:9:382:10 | n2 |
|
||||
| main.rs:390:9:390:17 | SlicePat | element | main.rs:390:10:390:10 | a |
|
||||
| main.rs:390:9:390:17 | SlicePat | element | main.rs:390:13:390:13 | b |
|
||||
| main.rs:390:9:390:17 | SlicePat | element | main.rs:390:16:390:16 | c |
|
||||
| main.rs:400:10:400:16 | mut_arr | element | main.rs:400:10:400:19 | mut_arr[1] |
|
||||
| main.rs:402:5:402:11 | mut_arr | element | main.rs:402:5:402:14 | mut_arr[1] |
|
||||
| main.rs:403:13:403:19 | mut_arr | element | main.rs:403:13:403:22 | mut_arr[1] |
|
||||
| main.rs:405:10:405:16 | mut_arr | element | main.rs:405:10:405:19 | mut_arr[0] |
|
||||
| main.rs:412:9:412:20 | TuplePat | tuple.0 | main.rs:412:10:412:13 | cond |
|
||||
| main.rs:412:9:412:20 | TuplePat | tuple.1 | main.rs:412:16:412:19 | name |
|
||||
| main.rs:412:25:412:29 | names | element | main.rs:412:9:412:20 | TuplePat |
|
||||
| main.rs:414:41:414:67 | [post] \|...\| ... | captured default_name | main.rs:414:41:414:67 | [post] default_name |
|
||||
| main.rs:414:44:414:55 | this | captured default_name | main.rs:414:44:414:55 | default_name |
|
||||
| main.rs:181:9:184:9 | Point3D {...} | Point3D.plane | main.rs:182:20:182:33 | Point {...} |
|
||||
| main.rs:181:9:184:9 | Point3D {...} | Point3D.z | main.rs:183:13:183:13 | z |
|
||||
| main.rs:182:20:182:33 | Point {...} | Point.x | main.rs:182:28:182:28 | x |
|
||||
| main.rs:182:20:182:33 | Point {...} | Point.y | main.rs:182:31:182:31 | y |
|
||||
| main.rs:196:10:196:10 | s | tuple.0 | main.rs:196:10:196:12 | s.0 |
|
||||
| main.rs:197:10:197:10 | s | tuple.1 | main.rs:197:10:197:12 | s.1 |
|
||||
| main.rs:200:9:200:27 | MyTupleStruct(...) | MyTupleStruct(0) | main.rs:200:23:200:23 | x |
|
||||
| main.rs:200:9:200:27 | MyTupleStruct(...) | MyTupleStruct(1) | main.rs:200:26:200:26 | y |
|
||||
| main.rs:214:9:214:23 | ...::Some(...) | Some | main.rs:214:22:214:22 | n |
|
||||
| main.rs:218:9:218:23 | ...::Some(...) | Some | main.rs:218:22:218:22 | n |
|
||||
| main.rs:227:9:227:15 | Some(...) | Some | main.rs:227:14:227:14 | n |
|
||||
| main.rs:231:9:231:15 | Some(...) | Some | main.rs:231:14:231:14 | n |
|
||||
| main.rs:260:14:260:15 | s1 | Ok | main.rs:260:14:260:16 | TryExpr |
|
||||
| main.rs:260:14:260:15 | s1 | Some | main.rs:260:14:260:16 | TryExpr |
|
||||
| main.rs:262:10:262:11 | s2 | Ok | main.rs:262:10:262:12 | TryExpr |
|
||||
| main.rs:262:10:262:11 | s2 | Some | main.rs:262:10:262:12 | TryExpr |
|
||||
| main.rs:270:14:270:15 | s1 | Ok | main.rs:270:14:270:16 | TryExpr |
|
||||
| main.rs:270:14:270:15 | s1 | Some | main.rs:270:14:270:16 | TryExpr |
|
||||
| main.rs:271:14:271:15 | s2 | Ok | main.rs:271:14:271:16 | TryExpr |
|
||||
| main.rs:271:14:271:15 | s2 | Some | main.rs:271:14:271:16 | TryExpr |
|
||||
| main.rs:274:14:274:15 | s3 | Ok | main.rs:274:14:274:16 | TryExpr |
|
||||
| main.rs:274:14:274:15 | s3 | Some | main.rs:274:14:274:16 | TryExpr |
|
||||
| main.rs:298:9:298:25 | ...::A(...) | A | main.rs:298:24:298:24 | n |
|
||||
| main.rs:299:9:299:25 | ...::B(...) | B | main.rs:299:24:299:24 | n |
|
||||
| main.rs:302:9:302:25 | ...::A(...) | A | main.rs:302:24:302:24 | n |
|
||||
| main.rs:302:29:302:45 | ...::B(...) | B | main.rs:302:44:302:44 | n |
|
||||
| main.rs:305:9:305:25 | ...::A(...) | A | main.rs:305:24:305:24 | n |
|
||||
| main.rs:306:9:306:25 | ...::B(...) | B | main.rs:306:24:306:24 | n |
|
||||
| main.rs:316:9:316:12 | A(...) | A | main.rs:316:11:316:11 | n |
|
||||
| main.rs:317:9:317:12 | B(...) | B | main.rs:317:11:317:11 | n |
|
||||
| main.rs:320:9:320:12 | A(...) | A | main.rs:320:11:320:11 | n |
|
||||
| main.rs:320:16:320:19 | B(...) | B | main.rs:320:18:320:18 | n |
|
||||
| main.rs:323:9:323:12 | A(...) | A | main.rs:323:11:323:11 | n |
|
||||
| main.rs:324:9:324:12 | B(...) | B | main.rs:324:11:324:11 | n |
|
||||
| main.rs:339:9:339:38 | ...::C {...} | C | main.rs:339:36:339:36 | n |
|
||||
| main.rs:340:9:340:38 | ...::D {...} | D | main.rs:340:36:340:36 | n |
|
||||
| main.rs:343:9:343:38 | ...::C {...} | C | main.rs:343:36:343:36 | n |
|
||||
| main.rs:343:42:343:71 | ...::D {...} | D | main.rs:343:69:343:69 | n |
|
||||
| main.rs:346:9:346:38 | ...::C {...} | C | main.rs:346:36:346:36 | n |
|
||||
| main.rs:347:9:347:38 | ...::D {...} | D | main.rs:347:36:347:36 | n |
|
||||
| main.rs:359:9:359:24 | C {...} | C | main.rs:359:22:359:22 | n |
|
||||
| main.rs:360:9:360:24 | D {...} | D | main.rs:360:22:360:22 | n |
|
||||
| main.rs:363:9:363:24 | C {...} | C | main.rs:363:22:363:22 | n |
|
||||
| main.rs:363:28:363:43 | D {...} | D | main.rs:363:41:363:41 | n |
|
||||
| main.rs:366:9:366:24 | C {...} | C | main.rs:366:22:366:22 | n |
|
||||
| main.rs:367:9:367:24 | D {...} | D | main.rs:367:22:367:22 | n |
|
||||
| main.rs:376:14:376:17 | arr1 | element | main.rs:376:14:376:20 | arr1[2] |
|
||||
| main.rs:380:14:380:17 | arr2 | element | main.rs:380:14:380:20 | arr2[4] |
|
||||
| main.rs:384:14:384:17 | arr3 | element | main.rs:384:14:384:20 | arr3[2] |
|
||||
| main.rs:390:15:390:18 | arr1 | element | main.rs:390:9:390:10 | n1 |
|
||||
| main.rs:395:15:395:18 | arr2 | element | main.rs:395:9:395:10 | n2 |
|
||||
| main.rs:403:9:403:17 | SlicePat | element | main.rs:403:10:403:10 | a |
|
||||
| main.rs:403:9:403:17 | SlicePat | element | main.rs:403:13:403:13 | b |
|
||||
| main.rs:403:9:403:17 | SlicePat | element | main.rs:403:16:403:16 | c |
|
||||
| main.rs:413:10:413:16 | mut_arr | element | main.rs:413:10:413:19 | mut_arr[1] |
|
||||
| main.rs:415:5:415:11 | mut_arr | element | main.rs:415:5:415:14 | mut_arr[1] |
|
||||
| main.rs:416:13:416:19 | mut_arr | element | main.rs:416:13:416:22 | mut_arr[1] |
|
||||
| main.rs:418:10:418:16 | mut_arr | element | main.rs:418:10:418:19 | mut_arr[0] |
|
||||
| main.rs:425:9:425:20 | TuplePat | tuple.0 | main.rs:425:10:425:13 | cond |
|
||||
| main.rs:425:9:425:20 | TuplePat | tuple.1 | main.rs:425:16:425:19 | name |
|
||||
| main.rs:425:25:425:29 | names | element | main.rs:425:9:425:20 | TuplePat |
|
||||
| main.rs:427:41:427:67 | [post] \|...\| ... | captured default_name | main.rs:427:41:427:67 | [post] default_name |
|
||||
| main.rs:427:44:427:55 | this | captured default_name | main.rs:427:44:427:55 | default_name |
|
||||
|
||||
@@ -49,136 +49,144 @@ edges
|
||||
| main.rs:148:12:148:21 | source(...) | main.rs:147:13:150:5 | Point {...} [Point.x] | provenance | |
|
||||
| main.rs:151:9:151:28 | Point {...} [Point.x] | main.rs:151:20:151:20 | a | provenance | |
|
||||
| main.rs:151:20:151:20 | a | main.rs:152:10:152:10 | a | provenance | |
|
||||
| main.rs:175:9:175:9 | p [Point3D.plane, Point.y] | main.rs:182:11:182:11 | p [Point3D.plane, Point.y] | provenance | |
|
||||
| main.rs:175:13:181:5 | Point3D {...} [Point3D.plane, Point.y] | main.rs:175:9:175:9 | p [Point3D.plane, Point.y] | provenance | |
|
||||
| main.rs:176:16:179:9 | Point {...} [Point.y] | main.rs:175:13:181:5 | Point3D {...} [Point3D.plane, Point.y] | provenance | |
|
||||
| main.rs:178:16:178:25 | source(...) | main.rs:176:16:179:9 | Point {...} [Point.y] | provenance | |
|
||||
| main.rs:182:11:182:11 | p [Point3D.plane, Point.y] | main.rs:183:9:186:9 | Point3D {...} [Point3D.plane, Point.y] | provenance | |
|
||||
| main.rs:183:9:186:9 | Point3D {...} [Point3D.plane, Point.y] | main.rs:184:20:184:33 | Point {...} [Point.y] | provenance | |
|
||||
| main.rs:184:20:184:33 | Point {...} [Point.y] | main.rs:184:31:184:31 | y | provenance | |
|
||||
| main.rs:184:31:184:31 | y | main.rs:188:18:188:18 | y | provenance | |
|
||||
| main.rs:198:9:198:10 | s1 [Some] | main.rs:200:11:200:12 | s1 [Some] | provenance | |
|
||||
| main.rs:198:14:198:37 | ...::Some(...) [Some] | main.rs:198:9:198:10 | s1 [Some] | provenance | |
|
||||
| main.rs:198:27:198:36 | source(...) | main.rs:198:14:198:37 | ...::Some(...) [Some] | provenance | |
|
||||
| main.rs:200:11:200:12 | s1 [Some] | main.rs:201:9:201:23 | ...::Some(...) [Some] | provenance | |
|
||||
| main.rs:201:9:201:23 | ...::Some(...) [Some] | main.rs:201:22:201:22 | n | provenance | |
|
||||
| main.rs:201:22:201:22 | n | main.rs:201:33:201:33 | n | provenance | |
|
||||
| main.rs:175:9:175:9 | y | main.rs:177:30:177:30 | y | provenance | |
|
||||
| main.rs:175:13:175:22 | source(...) | main.rs:175:9:175:9 | y | provenance | |
|
||||
| main.rs:176:9:176:9 | p [Point3D.plane, Point.y] | main.rs:180:11:180:11 | p [Point3D.plane, Point.y] | provenance | |
|
||||
| main.rs:176:13:179:5 | Point3D {...} [Point3D.plane, Point.y] | main.rs:176:9:176:9 | p [Point3D.plane, Point.y] | provenance | |
|
||||
| main.rs:177:16:177:32 | Point {...} [Point.y] | main.rs:176:13:179:5 | Point3D {...} [Point3D.plane, Point.y] | provenance | |
|
||||
| main.rs:177:30:177:30 | y | main.rs:177:16:177:32 | Point {...} [Point.y] | provenance | |
|
||||
| main.rs:180:11:180:11 | p [Point3D.plane, Point.y] | main.rs:181:9:184:9 | Point3D {...} [Point3D.plane, Point.y] | provenance | |
|
||||
| main.rs:181:9:184:9 | Point3D {...} [Point3D.plane, Point.y] | main.rs:182:20:182:33 | Point {...} [Point.y] | provenance | |
|
||||
| main.rs:182:20:182:33 | Point {...} [Point.y] | main.rs:182:31:182:31 | y | provenance | |
|
||||
| main.rs:182:31:182:31 | y | main.rs:186:18:186:18 | y | provenance | |
|
||||
| main.rs:195:9:195:9 | s [MyTupleStruct(0)] | main.rs:199:11:199:11 | s [MyTupleStruct(0)] | provenance | |
|
||||
| main.rs:195:13:195:40 | MyTupleStruct(...) [MyTupleStruct(0)] | main.rs:195:9:195:9 | s [MyTupleStruct(0)] | provenance | |
|
||||
| main.rs:195:27:195:36 | source(...) | main.rs:195:13:195:40 | MyTupleStruct(...) [MyTupleStruct(0)] | provenance | |
|
||||
| main.rs:199:11:199:11 | s [MyTupleStruct(0)] | main.rs:200:9:200:27 | MyTupleStruct(...) [MyTupleStruct(0)] | provenance | |
|
||||
| main.rs:200:9:200:27 | MyTupleStruct(...) [MyTupleStruct(0)] | main.rs:200:23:200:23 | x | provenance | |
|
||||
| main.rs:200:23:200:23 | x | main.rs:201:18:201:18 | x | provenance | |
|
||||
| main.rs:211:9:211:10 | s1 [Some] | main.rs:213:11:213:12 | s1 [Some] | provenance | |
|
||||
| main.rs:211:14:211:29 | Some(...) [Some] | main.rs:211:9:211:10 | s1 [Some] | provenance | |
|
||||
| main.rs:211:19:211:28 | source(...) | main.rs:211:14:211:29 | Some(...) [Some] | provenance | |
|
||||
| main.rs:213:11:213:12 | s1 [Some] | main.rs:214:9:214:15 | Some(...) [Some] | provenance | |
|
||||
| main.rs:214:9:214:15 | Some(...) [Some] | main.rs:214:14:214:14 | n | provenance | |
|
||||
| main.rs:214:14:214:14 | n | main.rs:214:25:214:25 | n | provenance | |
|
||||
| main.rs:224:9:224:10 | s1 [Some] | main.rs:225:10:225:11 | s1 [Some] | provenance | |
|
||||
| main.rs:211:14:211:37 | ...::Some(...) [Some] | main.rs:211:9:211:10 | s1 [Some] | provenance | |
|
||||
| main.rs:211:27:211:36 | source(...) | main.rs:211:14:211:37 | ...::Some(...) [Some] | provenance | |
|
||||
| main.rs:213:11:213:12 | s1 [Some] | main.rs:214:9:214:23 | ...::Some(...) [Some] | provenance | |
|
||||
| main.rs:214:9:214:23 | ...::Some(...) [Some] | main.rs:214:22:214:22 | n | provenance | |
|
||||
| main.rs:214:22:214:22 | n | main.rs:214:33:214:33 | n | provenance | |
|
||||
| main.rs:224:9:224:10 | s1 [Some] | main.rs:226:11:226:12 | s1 [Some] | provenance | |
|
||||
| main.rs:224:14:224:29 | Some(...) [Some] | main.rs:224:9:224:10 | s1 [Some] | provenance | |
|
||||
| main.rs:224:19:224:28 | source(...) | main.rs:224:14:224:29 | Some(...) [Some] | provenance | |
|
||||
| main.rs:225:10:225:11 | s1 [Some] | main.rs:225:10:225:20 | s1.unwrap(...) | provenance | MaD:1 |
|
||||
| main.rs:229:9:229:10 | s1 [Some] | main.rs:230:10:230:11 | s1 [Some] | provenance | |
|
||||
| main.rs:229:14:229:29 | Some(...) [Some] | main.rs:229:9:229:10 | s1 [Some] | provenance | |
|
||||
| main.rs:229:19:229:28 | source(...) | main.rs:229:14:229:29 | Some(...) [Some] | provenance | |
|
||||
| main.rs:230:10:230:11 | s1 [Some] | main.rs:230:10:230:24 | s1.unwrap_or(...) | provenance | MaD:3 |
|
||||
| main.rs:233:23:233:32 | source(...) | main.rs:233:10:233:33 | s2.unwrap_or(...) | provenance | MaD:2 |
|
||||
| main.rs:226:11:226:12 | s1 [Some] | main.rs:227:9:227:15 | Some(...) [Some] | provenance | |
|
||||
| main.rs:227:9:227:15 | Some(...) [Some] | main.rs:227:14:227:14 | n | provenance | |
|
||||
| main.rs:227:14:227:14 | n | main.rs:227:25:227:25 | n | provenance | |
|
||||
| main.rs:237:9:237:10 | s1 [Some] | main.rs:238:10:238:11 | s1 [Some] | provenance | |
|
||||
| main.rs:237:14:237:29 | Some(...) [Some] | main.rs:237:9:237:10 | s1 [Some] | provenance | |
|
||||
| main.rs:237:19:237:28 | source(...) | main.rs:237:14:237:29 | Some(...) [Some] | provenance | |
|
||||
| main.rs:238:10:238:11 | s1 [Some] | main.rs:238:10:238:32 | s1.unwrap_or_else(...) | provenance | MaD:5 |
|
||||
| main.rs:241:31:241:40 | source(...) | main.rs:241:10:241:41 | s2.unwrap_or_else(...) | provenance | MaD:4 |
|
||||
| main.rs:245:9:245:10 | s1 [Some] | main.rs:247:14:247:15 | s1 [Some] | provenance | |
|
||||
| main.rs:245:14:245:29 | Some(...) [Some] | main.rs:245:9:245:10 | s1 [Some] | provenance | |
|
||||
| main.rs:245:19:245:28 | source(...) | main.rs:245:14:245:29 | Some(...) [Some] | provenance | |
|
||||
| main.rs:247:9:247:10 | i1 | main.rs:248:10:248:11 | i1 | provenance | |
|
||||
| main.rs:247:14:247:15 | s1 [Some] | main.rs:247:14:247:16 | TryExpr | provenance | |
|
||||
| main.rs:247:14:247:16 | TryExpr | main.rs:247:9:247:10 | i1 | provenance | |
|
||||
| main.rs:254:9:254:10 | s1 [Ok] | main.rs:257:14:257:15 | s1 [Ok] | provenance | |
|
||||
| main.rs:254:32:254:45 | Ok(...) [Ok] | main.rs:254:9:254:10 | s1 [Ok] | provenance | |
|
||||
| main.rs:254:35:254:44 | source(...) | main.rs:254:32:254:45 | Ok(...) [Ok] | provenance | |
|
||||
| main.rs:257:9:257:10 | i1 | main.rs:259:10:259:11 | i1 | provenance | |
|
||||
| main.rs:257:14:257:15 | s1 [Ok] | main.rs:257:14:257:16 | TryExpr | provenance | |
|
||||
| main.rs:257:14:257:16 | TryExpr | main.rs:257:9:257:10 | i1 | provenance | |
|
||||
| main.rs:267:9:267:10 | s1 [Ok] | main.rs:268:10:268:11 | s1 [Ok] | provenance | |
|
||||
| main.rs:238:10:238:11 | s1 [Some] | main.rs:238:10:238:20 | s1.unwrap(...) | provenance | MaD:1 |
|
||||
| main.rs:242:9:242:10 | s1 [Some] | main.rs:243:10:243:11 | s1 [Some] | provenance | |
|
||||
| main.rs:242:14:242:29 | Some(...) [Some] | main.rs:242:9:242:10 | s1 [Some] | provenance | |
|
||||
| main.rs:242:19:242:28 | source(...) | main.rs:242:14:242:29 | Some(...) [Some] | provenance | |
|
||||
| main.rs:243:10:243:11 | s1 [Some] | main.rs:243:10:243:24 | s1.unwrap_or(...) | provenance | MaD:3 |
|
||||
| main.rs:246:23:246:32 | source(...) | main.rs:246:10:246:33 | s2.unwrap_or(...) | provenance | MaD:2 |
|
||||
| main.rs:250:9:250:10 | s1 [Some] | main.rs:251:10:251:11 | s1 [Some] | provenance | |
|
||||
| main.rs:250:14:250:29 | Some(...) [Some] | main.rs:250:9:250:10 | s1 [Some] | provenance | |
|
||||
| main.rs:250:19:250:28 | source(...) | main.rs:250:14:250:29 | Some(...) [Some] | provenance | |
|
||||
| main.rs:251:10:251:11 | s1 [Some] | main.rs:251:10:251:32 | s1.unwrap_or_else(...) | provenance | MaD:5 |
|
||||
| main.rs:254:31:254:40 | source(...) | main.rs:254:10:254:41 | s2.unwrap_or_else(...) | provenance | MaD:4 |
|
||||
| main.rs:258:9:258:10 | s1 [Some] | main.rs:260:14:260:15 | s1 [Some] | provenance | |
|
||||
| main.rs:258:14:258:29 | Some(...) [Some] | main.rs:258:9:258:10 | s1 [Some] | provenance | |
|
||||
| main.rs:258:19:258:28 | source(...) | main.rs:258:14:258:29 | Some(...) [Some] | provenance | |
|
||||
| main.rs:260:9:260:10 | i1 | main.rs:261:10:261:11 | i1 | provenance | |
|
||||
| main.rs:260:14:260:15 | s1 [Some] | main.rs:260:14:260:16 | TryExpr | provenance | |
|
||||
| main.rs:260:14:260:16 | TryExpr | main.rs:260:9:260:10 | i1 | provenance | |
|
||||
| main.rs:267:9:267:10 | s1 [Ok] | main.rs:270:14:270:15 | s1 [Ok] | provenance | |
|
||||
| main.rs:267:32:267:45 | Ok(...) [Ok] | main.rs:267:9:267:10 | s1 [Ok] | provenance | |
|
||||
| main.rs:267:35:267:44 | source(...) | main.rs:267:32:267:45 | Ok(...) [Ok] | provenance | |
|
||||
| main.rs:268:10:268:11 | s1 [Ok] | main.rs:268:10:268:22 | s1.expect(...) | provenance | MaD:6 |
|
||||
| main.rs:271:9:271:10 | s2 [Err] | main.rs:273:10:273:11 | s2 [Err] | provenance | |
|
||||
| main.rs:271:32:271:46 | Err(...) [Err] | main.rs:271:9:271:10 | s2 [Err] | provenance | |
|
||||
| main.rs:271:36:271:45 | source(...) | main.rs:271:32:271:46 | Err(...) [Err] | provenance | |
|
||||
| main.rs:273:10:273:11 | s2 [Err] | main.rs:273:10:273:26 | s2.expect_err(...) | provenance | MaD:7 |
|
||||
| main.rs:282:9:282:10 | s1 [A] | main.rs:284:11:284:12 | s1 [A] | provenance | |
|
||||
| main.rs:282:14:282:39 | ...::A(...) [A] | main.rs:282:9:282:10 | s1 [A] | provenance | |
|
||||
| main.rs:282:29:282:38 | source(...) | main.rs:282:14:282:39 | ...::A(...) [A] | provenance | |
|
||||
| main.rs:284:11:284:12 | s1 [A] | main.rs:285:9:285:25 | ...::A(...) [A] | provenance | |
|
||||
| main.rs:284:11:284:12 | s1 [A] | main.rs:288:11:288:12 | s1 [A] | provenance | |
|
||||
| main.rs:285:9:285:25 | ...::A(...) [A] | main.rs:285:24:285:24 | n | provenance | |
|
||||
| main.rs:285:24:285:24 | n | main.rs:285:35:285:35 | n | provenance | |
|
||||
| main.rs:288:11:288:12 | s1 [A] | main.rs:289:9:289:25 | ...::A(...) [A] | provenance | |
|
||||
| main.rs:289:9:289:25 | ...::A(...) [A] | main.rs:289:24:289:24 | n | provenance | |
|
||||
| main.rs:289:24:289:24 | n | main.rs:289:55:289:55 | n | provenance | |
|
||||
| main.rs:300:9:300:10 | s1 [A] | main.rs:302:11:302:12 | s1 [A] | provenance | |
|
||||
| main.rs:300:14:300:26 | A(...) [A] | main.rs:300:9:300:10 | s1 [A] | provenance | |
|
||||
| main.rs:300:16:300:25 | source(...) | main.rs:300:14:300:26 | A(...) [A] | provenance | |
|
||||
| main.rs:302:11:302:12 | s1 [A] | main.rs:303:9:303:12 | A(...) [A] | provenance | |
|
||||
| main.rs:302:11:302:12 | s1 [A] | main.rs:306:11:306:12 | s1 [A] | provenance | |
|
||||
| main.rs:303:9:303:12 | A(...) [A] | main.rs:303:11:303:11 | n | provenance | |
|
||||
| main.rs:303:11:303:11 | n | main.rs:303:22:303:22 | n | provenance | |
|
||||
| main.rs:306:11:306:12 | s1 [A] | main.rs:307:9:307:12 | A(...) [A] | provenance | |
|
||||
| main.rs:307:9:307:12 | A(...) [A] | main.rs:307:11:307:11 | n | provenance | |
|
||||
| main.rs:307:11:307:11 | n | main.rs:307:29:307:29 | n | provenance | |
|
||||
| main.rs:321:9:321:10 | s1 [C] | main.rs:325:11:325:12 | s1 [C] | provenance | |
|
||||
| main.rs:321:14:323:5 | ...::C {...} [C] | main.rs:321:9:321:10 | s1 [C] | provenance | |
|
||||
| main.rs:322:18:322:27 | source(...) | main.rs:321:14:323:5 | ...::C {...} [C] | provenance | |
|
||||
| main.rs:325:11:325:12 | s1 [C] | main.rs:326:9:326:38 | ...::C {...} [C] | provenance | |
|
||||
| main.rs:325:11:325:12 | s1 [C] | main.rs:329:11:329:12 | s1 [C] | provenance | |
|
||||
| main.rs:326:9:326:38 | ...::C {...} [C] | main.rs:326:36:326:36 | n | provenance | |
|
||||
| main.rs:326:36:326:36 | n | main.rs:326:48:326:48 | n | provenance | |
|
||||
| main.rs:329:11:329:12 | s1 [C] | main.rs:330:9:330:38 | ...::C {...} [C] | provenance | |
|
||||
| main.rs:330:9:330:38 | ...::C {...} [C] | main.rs:330:36:330:36 | n | provenance | |
|
||||
| main.rs:330:36:330:36 | n | main.rs:330:81:330:81 | n | provenance | |
|
||||
| main.rs:341:9:341:10 | s1 [C] | main.rs:345:11:345:12 | s1 [C] | provenance | |
|
||||
| main.rs:341:14:343:5 | C {...} [C] | main.rs:341:9:341:10 | s1 [C] | provenance | |
|
||||
| main.rs:342:18:342:27 | source(...) | main.rs:341:14:343:5 | C {...} [C] | provenance | |
|
||||
| main.rs:345:11:345:12 | s1 [C] | main.rs:346:9:346:24 | C {...} [C] | provenance | |
|
||||
| main.rs:345:11:345:12 | s1 [C] | main.rs:349:11:349:12 | s1 [C] | provenance | |
|
||||
| main.rs:346:9:346:24 | C {...} [C] | main.rs:346:22:346:22 | n | provenance | |
|
||||
| main.rs:346:22:346:22 | n | main.rs:346:34:346:34 | n | provenance | |
|
||||
| main.rs:349:11:349:12 | s1 [C] | main.rs:350:9:350:24 | C {...} [C] | provenance | |
|
||||
| main.rs:350:9:350:24 | C {...} [C] | main.rs:350:22:350:22 | n | provenance | |
|
||||
| main.rs:350:22:350:22 | n | main.rs:350:53:350:53 | n | provenance | |
|
||||
| main.rs:362:9:362:12 | arr1 [element] | main.rs:363:14:363:17 | arr1 [element] | provenance | |
|
||||
| main.rs:362:16:362:33 | [...] [element] | main.rs:362:9:362:12 | arr1 [element] | provenance | |
|
||||
| main.rs:362:23:362:32 | source(...) | main.rs:362:16:362:33 | [...] [element] | provenance | |
|
||||
| main.rs:363:9:363:10 | n1 | main.rs:364:10:364:11 | n1 | provenance | |
|
||||
| main.rs:363:14:363:17 | arr1 [element] | main.rs:363:14:363:20 | arr1[2] | provenance | |
|
||||
| main.rs:363:14:363:20 | arr1[2] | main.rs:363:9:363:10 | n1 | provenance | |
|
||||
| main.rs:366:9:366:12 | arr2 [element] | main.rs:367:14:367:17 | arr2 [element] | provenance | |
|
||||
| main.rs:366:16:366:31 | [...; 10] [element] | main.rs:366:9:366:12 | arr2 [element] | provenance | |
|
||||
| main.rs:366:17:366:26 | source(...) | main.rs:366:16:366:31 | [...; 10] [element] | provenance | |
|
||||
| main.rs:367:9:367:10 | n2 | main.rs:368:10:368:11 | n2 | provenance | |
|
||||
| main.rs:367:14:367:17 | arr2 [element] | main.rs:367:14:367:20 | arr2[4] | provenance | |
|
||||
| main.rs:367:14:367:20 | arr2[4] | main.rs:367:9:367:10 | n2 | provenance | |
|
||||
| main.rs:376:9:376:12 | arr1 [element] | main.rs:377:15:377:18 | arr1 [element] | provenance | |
|
||||
| main.rs:376:16:376:33 | [...] [element] | main.rs:376:9:376:12 | arr1 [element] | provenance | |
|
||||
| main.rs:376:23:376:32 | source(...) | main.rs:376:16:376:33 | [...] [element] | provenance | |
|
||||
| main.rs:377:9:377:10 | n1 | main.rs:378:14:378:15 | n1 | provenance | |
|
||||
| main.rs:377:15:377:18 | arr1 [element] | main.rs:377:9:377:10 | n1 | provenance | |
|
||||
| main.rs:388:9:388:12 | arr1 [element] | main.rs:389:11:389:14 | arr1 [element] | provenance | |
|
||||
| main.rs:388:16:388:33 | [...] [element] | main.rs:388:9:388:12 | arr1 [element] | provenance | |
|
||||
| main.rs:388:23:388:32 | source(...) | main.rs:388:16:388:33 | [...] [element] | provenance | |
|
||||
| main.rs:389:11:389:14 | arr1 [element] | main.rs:390:9:390:17 | SlicePat [element] | provenance | |
|
||||
| main.rs:390:9:390:17 | SlicePat [element] | main.rs:390:10:390:10 | a | provenance | |
|
||||
| main.rs:390:9:390:17 | SlicePat [element] | main.rs:390:13:390:13 | b | provenance | |
|
||||
| main.rs:390:9:390:17 | SlicePat [element] | main.rs:390:16:390:16 | c | provenance | |
|
||||
| main.rs:390:10:390:10 | a | main.rs:391:18:391:18 | a | provenance | |
|
||||
| main.rs:390:13:390:13 | b | main.rs:392:18:392:18 | b | provenance | |
|
||||
| main.rs:390:16:390:16 | c | main.rs:393:18:393:18 | c | provenance | |
|
||||
| main.rs:402:5:402:11 | [post] mut_arr [element] | main.rs:403:13:403:19 | mut_arr [element] | provenance | |
|
||||
| main.rs:402:5:402:11 | [post] mut_arr [element] | main.rs:405:10:405:16 | mut_arr [element] | provenance | |
|
||||
| main.rs:402:18:402:27 | source(...) | main.rs:402:5:402:11 | [post] mut_arr [element] | provenance | |
|
||||
| main.rs:403:9:403:9 | d | main.rs:404:10:404:10 | d | provenance | |
|
||||
| main.rs:403:13:403:19 | mut_arr [element] | main.rs:403:13:403:22 | mut_arr[1] | provenance | |
|
||||
| main.rs:403:13:403:22 | mut_arr[1] | main.rs:403:9:403:9 | d | provenance | |
|
||||
| main.rs:405:10:405:16 | mut_arr [element] | main.rs:405:10:405:19 | mut_arr[0] | provenance | |
|
||||
| main.rs:428:9:428:9 | s | main.rs:429:10:429:10 | s | provenance | |
|
||||
| main.rs:428:25:428:26 | source(...) | main.rs:428:9:428:9 | s | provenance | |
|
||||
| main.rs:270:9:270:10 | i1 | main.rs:272:10:272:11 | i1 | provenance | |
|
||||
| main.rs:270:14:270:15 | s1 [Ok] | main.rs:270:14:270:16 | TryExpr | provenance | |
|
||||
| main.rs:270:14:270:16 | TryExpr | main.rs:270:9:270:10 | i1 | provenance | |
|
||||
| main.rs:280:9:280:10 | s1 [Ok] | main.rs:281:10:281:11 | s1 [Ok] | provenance | |
|
||||
| main.rs:280:32:280:45 | Ok(...) [Ok] | main.rs:280:9:280:10 | s1 [Ok] | provenance | |
|
||||
| main.rs:280:35:280:44 | source(...) | main.rs:280:32:280:45 | Ok(...) [Ok] | provenance | |
|
||||
| main.rs:281:10:281:11 | s1 [Ok] | main.rs:281:10:281:22 | s1.expect(...) | provenance | MaD:6 |
|
||||
| main.rs:284:9:284:10 | s2 [Err] | main.rs:286:10:286:11 | s2 [Err] | provenance | |
|
||||
| main.rs:284:32:284:46 | Err(...) [Err] | main.rs:284:9:284:10 | s2 [Err] | provenance | |
|
||||
| main.rs:284:36:284:45 | source(...) | main.rs:284:32:284:46 | Err(...) [Err] | provenance | |
|
||||
| main.rs:286:10:286:11 | s2 [Err] | main.rs:286:10:286:26 | s2.expect_err(...) | provenance | MaD:7 |
|
||||
| main.rs:295:9:295:10 | s1 [A] | main.rs:297:11:297:12 | s1 [A] | provenance | |
|
||||
| main.rs:295:14:295:39 | ...::A(...) [A] | main.rs:295:9:295:10 | s1 [A] | provenance | |
|
||||
| main.rs:295:29:295:38 | source(...) | main.rs:295:14:295:39 | ...::A(...) [A] | provenance | |
|
||||
| main.rs:297:11:297:12 | s1 [A] | main.rs:298:9:298:25 | ...::A(...) [A] | provenance | |
|
||||
| main.rs:297:11:297:12 | s1 [A] | main.rs:301:11:301:12 | s1 [A] | provenance | |
|
||||
| main.rs:298:9:298:25 | ...::A(...) [A] | main.rs:298:24:298:24 | n | provenance | |
|
||||
| main.rs:298:24:298:24 | n | main.rs:298:35:298:35 | n | provenance | |
|
||||
| main.rs:301:11:301:12 | s1 [A] | main.rs:302:9:302:25 | ...::A(...) [A] | provenance | |
|
||||
| main.rs:302:9:302:25 | ...::A(...) [A] | main.rs:302:24:302:24 | n | provenance | |
|
||||
| main.rs:302:24:302:24 | n | main.rs:302:55:302:55 | n | provenance | |
|
||||
| main.rs:313:9:313:10 | s1 [A] | main.rs:315:11:315:12 | s1 [A] | provenance | |
|
||||
| main.rs:313:14:313:26 | A(...) [A] | main.rs:313:9:313:10 | s1 [A] | provenance | |
|
||||
| main.rs:313:16:313:25 | source(...) | main.rs:313:14:313:26 | A(...) [A] | provenance | |
|
||||
| main.rs:315:11:315:12 | s1 [A] | main.rs:316:9:316:12 | A(...) [A] | provenance | |
|
||||
| main.rs:315:11:315:12 | s1 [A] | main.rs:319:11:319:12 | s1 [A] | provenance | |
|
||||
| main.rs:316:9:316:12 | A(...) [A] | main.rs:316:11:316:11 | n | provenance | |
|
||||
| main.rs:316:11:316:11 | n | main.rs:316:22:316:22 | n | provenance | |
|
||||
| main.rs:319:11:319:12 | s1 [A] | main.rs:320:9:320:12 | A(...) [A] | provenance | |
|
||||
| main.rs:320:9:320:12 | A(...) [A] | main.rs:320:11:320:11 | n | provenance | |
|
||||
| main.rs:320:11:320:11 | n | main.rs:320:29:320:29 | n | provenance | |
|
||||
| main.rs:334:9:334:10 | s1 [C] | main.rs:338:11:338:12 | s1 [C] | provenance | |
|
||||
| main.rs:334:14:336:5 | ...::C {...} [C] | main.rs:334:9:334:10 | s1 [C] | provenance | |
|
||||
| main.rs:335:18:335:27 | source(...) | main.rs:334:14:336:5 | ...::C {...} [C] | provenance | |
|
||||
| main.rs:338:11:338:12 | s1 [C] | main.rs:339:9:339:38 | ...::C {...} [C] | provenance | |
|
||||
| main.rs:338:11:338:12 | s1 [C] | main.rs:342:11:342:12 | s1 [C] | provenance | |
|
||||
| main.rs:339:9:339:38 | ...::C {...} [C] | main.rs:339:36:339:36 | n | provenance | |
|
||||
| main.rs:339:36:339:36 | n | main.rs:339:48:339:48 | n | provenance | |
|
||||
| main.rs:342:11:342:12 | s1 [C] | main.rs:343:9:343:38 | ...::C {...} [C] | provenance | |
|
||||
| main.rs:343:9:343:38 | ...::C {...} [C] | main.rs:343:36:343:36 | n | provenance | |
|
||||
| main.rs:343:36:343:36 | n | main.rs:343:81:343:81 | n | provenance | |
|
||||
| main.rs:354:9:354:10 | s1 [C] | main.rs:358:11:358:12 | s1 [C] | provenance | |
|
||||
| main.rs:354:14:356:5 | C {...} [C] | main.rs:354:9:354:10 | s1 [C] | provenance | |
|
||||
| main.rs:355:18:355:27 | source(...) | main.rs:354:14:356:5 | C {...} [C] | provenance | |
|
||||
| main.rs:358:11:358:12 | s1 [C] | main.rs:359:9:359:24 | C {...} [C] | provenance | |
|
||||
| main.rs:358:11:358:12 | s1 [C] | main.rs:362:11:362:12 | s1 [C] | provenance | |
|
||||
| main.rs:359:9:359:24 | C {...} [C] | main.rs:359:22:359:22 | n | provenance | |
|
||||
| main.rs:359:22:359:22 | n | main.rs:359:34:359:34 | n | provenance | |
|
||||
| main.rs:362:11:362:12 | s1 [C] | main.rs:363:9:363:24 | C {...} [C] | provenance | |
|
||||
| main.rs:363:9:363:24 | C {...} [C] | main.rs:363:22:363:22 | n | provenance | |
|
||||
| main.rs:363:22:363:22 | n | main.rs:363:53:363:53 | n | provenance | |
|
||||
| main.rs:375:9:375:12 | arr1 [element] | main.rs:376:14:376:17 | arr1 [element] | provenance | |
|
||||
| main.rs:375:16:375:33 | [...] [element] | main.rs:375:9:375:12 | arr1 [element] | provenance | |
|
||||
| main.rs:375:23:375:32 | source(...) | main.rs:375:16:375:33 | [...] [element] | provenance | |
|
||||
| main.rs:376:9:376:10 | n1 | main.rs:377:10:377:11 | n1 | provenance | |
|
||||
| main.rs:376:14:376:17 | arr1 [element] | main.rs:376:14:376:20 | arr1[2] | provenance | |
|
||||
| main.rs:376:14:376:20 | arr1[2] | main.rs:376:9:376:10 | n1 | provenance | |
|
||||
| main.rs:379:9:379:12 | arr2 [element] | main.rs:380:14:380:17 | arr2 [element] | provenance | |
|
||||
| main.rs:379:16:379:31 | [...; 10] [element] | main.rs:379:9:379:12 | arr2 [element] | provenance | |
|
||||
| main.rs:379:17:379:26 | source(...) | main.rs:379:16:379:31 | [...; 10] [element] | provenance | |
|
||||
| main.rs:380:9:380:10 | n2 | main.rs:381:10:381:11 | n2 | provenance | |
|
||||
| main.rs:380:14:380:17 | arr2 [element] | main.rs:380:14:380:20 | arr2[4] | provenance | |
|
||||
| main.rs:380:14:380:20 | arr2[4] | main.rs:380:9:380:10 | n2 | provenance | |
|
||||
| main.rs:389:9:389:12 | arr1 [element] | main.rs:390:15:390:18 | arr1 [element] | provenance | |
|
||||
| main.rs:389:16:389:33 | [...] [element] | main.rs:389:9:389:12 | arr1 [element] | provenance | |
|
||||
| main.rs:389:23:389:32 | source(...) | main.rs:389:16:389:33 | [...] [element] | provenance | |
|
||||
| main.rs:390:9:390:10 | n1 | main.rs:391:14:391:15 | n1 | provenance | |
|
||||
| main.rs:390:15:390:18 | arr1 [element] | main.rs:390:9:390:10 | n1 | provenance | |
|
||||
| main.rs:401:9:401:12 | arr1 [element] | main.rs:402:11:402:14 | arr1 [element] | provenance | |
|
||||
| main.rs:401:16:401:33 | [...] [element] | main.rs:401:9:401:12 | arr1 [element] | provenance | |
|
||||
| main.rs:401:23:401:32 | source(...) | main.rs:401:16:401:33 | [...] [element] | provenance | |
|
||||
| main.rs:402:11:402:14 | arr1 [element] | main.rs:403:9:403:17 | SlicePat [element] | provenance | |
|
||||
| main.rs:403:9:403:17 | SlicePat [element] | main.rs:403:10:403:10 | a | provenance | |
|
||||
| main.rs:403:9:403:17 | SlicePat [element] | main.rs:403:13:403:13 | b | provenance | |
|
||||
| main.rs:403:9:403:17 | SlicePat [element] | main.rs:403:16:403:16 | c | provenance | |
|
||||
| main.rs:403:10:403:10 | a | main.rs:404:18:404:18 | a | provenance | |
|
||||
| main.rs:403:13:403:13 | b | main.rs:405:18:405:18 | b | provenance | |
|
||||
| main.rs:403:16:403:16 | c | main.rs:406:18:406:18 | c | provenance | |
|
||||
| main.rs:415:5:415:11 | [post] mut_arr [element] | main.rs:416:13:416:19 | mut_arr [element] | provenance | |
|
||||
| main.rs:415:5:415:11 | [post] mut_arr [element] | main.rs:418:10:418:16 | mut_arr [element] | provenance | |
|
||||
| main.rs:415:18:415:27 | source(...) | main.rs:415:5:415:11 | [post] mut_arr [element] | provenance | |
|
||||
| main.rs:416:9:416:9 | d | main.rs:417:10:417:10 | d | provenance | |
|
||||
| main.rs:416:13:416:19 | mut_arr [element] | main.rs:416:13:416:22 | mut_arr[1] | provenance | |
|
||||
| main.rs:416:13:416:22 | mut_arr[1] | main.rs:416:9:416:9 | d | provenance | |
|
||||
| main.rs:418:10:418:16 | mut_arr [element] | main.rs:418:10:418:19 | mut_arr[0] | provenance | |
|
||||
| main.rs:441:9:441:9 | s | main.rs:442:10:442:10 | s | provenance | |
|
||||
| main.rs:441:25:441:26 | source(...) | main.rs:441:9:441:9 | s | provenance | |
|
||||
nodes
|
||||
| main.rs:15:10:15:18 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:19:9:19:9 | s | semmle.label | s |
|
||||
@@ -234,158 +242,167 @@ nodes
|
||||
| main.rs:151:9:151:28 | Point {...} [Point.x] | semmle.label | Point {...} [Point.x] |
|
||||
| main.rs:151:20:151:20 | a | semmle.label | a |
|
||||
| main.rs:152:10:152:10 | a | semmle.label | a |
|
||||
| main.rs:175:9:175:9 | p [Point3D.plane, Point.y] | semmle.label | p [Point3D.plane, Point.y] |
|
||||
| main.rs:175:13:181:5 | Point3D {...} [Point3D.plane, Point.y] | semmle.label | Point3D {...} [Point3D.plane, Point.y] |
|
||||
| main.rs:176:16:179:9 | Point {...} [Point.y] | semmle.label | Point {...} [Point.y] |
|
||||
| main.rs:178:16:178:25 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:182:11:182:11 | p [Point3D.plane, Point.y] | semmle.label | p [Point3D.plane, Point.y] |
|
||||
| main.rs:183:9:186:9 | Point3D {...} [Point3D.plane, Point.y] | semmle.label | Point3D {...} [Point3D.plane, Point.y] |
|
||||
| main.rs:184:20:184:33 | Point {...} [Point.y] | semmle.label | Point {...} [Point.y] |
|
||||
| main.rs:184:31:184:31 | y | semmle.label | y |
|
||||
| main.rs:188:18:188:18 | y | semmle.label | y |
|
||||
| main.rs:198:9:198:10 | s1 [Some] | semmle.label | s1 [Some] |
|
||||
| main.rs:198:14:198:37 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] |
|
||||
| main.rs:198:27:198:36 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:200:11:200:12 | s1 [Some] | semmle.label | s1 [Some] |
|
||||
| main.rs:201:9:201:23 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] |
|
||||
| main.rs:201:22:201:22 | n | semmle.label | n |
|
||||
| main.rs:201:33:201:33 | n | semmle.label | n |
|
||||
| main.rs:175:9:175:9 | y | semmle.label | y |
|
||||
| main.rs:175:13:175:22 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:176:9:176:9 | p [Point3D.plane, Point.y] | semmle.label | p [Point3D.plane, Point.y] |
|
||||
| main.rs:176:13:179:5 | Point3D {...} [Point3D.plane, Point.y] | semmle.label | Point3D {...} [Point3D.plane, Point.y] |
|
||||
| main.rs:177:16:177:32 | Point {...} [Point.y] | semmle.label | Point {...} [Point.y] |
|
||||
| main.rs:177:30:177:30 | y | semmle.label | y |
|
||||
| main.rs:180:11:180:11 | p [Point3D.plane, Point.y] | semmle.label | p [Point3D.plane, Point.y] |
|
||||
| main.rs:181:9:184:9 | Point3D {...} [Point3D.plane, Point.y] | semmle.label | Point3D {...} [Point3D.plane, Point.y] |
|
||||
| main.rs:182:20:182:33 | Point {...} [Point.y] | semmle.label | Point {...} [Point.y] |
|
||||
| main.rs:182:31:182:31 | y | semmle.label | y |
|
||||
| main.rs:186:18:186:18 | y | semmle.label | y |
|
||||
| main.rs:195:9:195:9 | s [MyTupleStruct(0)] | semmle.label | s [MyTupleStruct(0)] |
|
||||
| main.rs:195:13:195:40 | MyTupleStruct(...) [MyTupleStruct(0)] | semmle.label | MyTupleStruct(...) [MyTupleStruct(0)] |
|
||||
| main.rs:195:27:195:36 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:199:11:199:11 | s [MyTupleStruct(0)] | semmle.label | s [MyTupleStruct(0)] |
|
||||
| main.rs:200:9:200:27 | MyTupleStruct(...) [MyTupleStruct(0)] | semmle.label | MyTupleStruct(...) [MyTupleStruct(0)] |
|
||||
| main.rs:200:23:200:23 | x | semmle.label | x |
|
||||
| main.rs:201:18:201:18 | x | semmle.label | x |
|
||||
| main.rs:211:9:211:10 | s1 [Some] | semmle.label | s1 [Some] |
|
||||
| main.rs:211:14:211:29 | Some(...) [Some] | semmle.label | Some(...) [Some] |
|
||||
| main.rs:211:19:211:28 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:211:14:211:37 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] |
|
||||
| main.rs:211:27:211:36 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:213:11:213:12 | s1 [Some] | semmle.label | s1 [Some] |
|
||||
| main.rs:214:9:214:15 | Some(...) [Some] | semmle.label | Some(...) [Some] |
|
||||
| main.rs:214:14:214:14 | n | semmle.label | n |
|
||||
| main.rs:214:25:214:25 | n | semmle.label | n |
|
||||
| main.rs:214:9:214:23 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] |
|
||||
| main.rs:214:22:214:22 | n | semmle.label | n |
|
||||
| main.rs:214:33:214:33 | n | semmle.label | n |
|
||||
| main.rs:224:9:224:10 | s1 [Some] | semmle.label | s1 [Some] |
|
||||
| main.rs:224:14:224:29 | Some(...) [Some] | semmle.label | Some(...) [Some] |
|
||||
| main.rs:224:19:224:28 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:225:10:225:11 | s1 [Some] | semmle.label | s1 [Some] |
|
||||
| main.rs:225:10:225:20 | s1.unwrap(...) | semmle.label | s1.unwrap(...) |
|
||||
| main.rs:229:9:229:10 | s1 [Some] | semmle.label | s1 [Some] |
|
||||
| main.rs:229:14:229:29 | Some(...) [Some] | semmle.label | Some(...) [Some] |
|
||||
| main.rs:229:19:229:28 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:230:10:230:11 | s1 [Some] | semmle.label | s1 [Some] |
|
||||
| main.rs:230:10:230:24 | s1.unwrap_or(...) | semmle.label | s1.unwrap_or(...) |
|
||||
| main.rs:233:10:233:33 | s2.unwrap_or(...) | semmle.label | s2.unwrap_or(...) |
|
||||
| main.rs:233:23:233:32 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:226:11:226:12 | s1 [Some] | semmle.label | s1 [Some] |
|
||||
| main.rs:227:9:227:15 | Some(...) [Some] | semmle.label | Some(...) [Some] |
|
||||
| main.rs:227:14:227:14 | n | semmle.label | n |
|
||||
| main.rs:227:25:227:25 | n | semmle.label | n |
|
||||
| main.rs:237:9:237:10 | s1 [Some] | semmle.label | s1 [Some] |
|
||||
| main.rs:237:14:237:29 | Some(...) [Some] | semmle.label | Some(...) [Some] |
|
||||
| main.rs:237:19:237:28 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:238:10:238:11 | s1 [Some] | semmle.label | s1 [Some] |
|
||||
| main.rs:238:10:238:32 | s1.unwrap_or_else(...) | semmle.label | s1.unwrap_or_else(...) |
|
||||
| main.rs:241:10:241:41 | s2.unwrap_or_else(...) | semmle.label | s2.unwrap_or_else(...) |
|
||||
| main.rs:241:31:241:40 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:245:9:245:10 | s1 [Some] | semmle.label | s1 [Some] |
|
||||
| main.rs:245:14:245:29 | Some(...) [Some] | semmle.label | Some(...) [Some] |
|
||||
| main.rs:245:19:245:28 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:247:9:247:10 | i1 | semmle.label | i1 |
|
||||
| main.rs:247:14:247:15 | s1 [Some] | semmle.label | s1 [Some] |
|
||||
| main.rs:247:14:247:16 | TryExpr | semmle.label | TryExpr |
|
||||
| main.rs:248:10:248:11 | i1 | semmle.label | i1 |
|
||||
| main.rs:254:9:254:10 | s1 [Ok] | semmle.label | s1 [Ok] |
|
||||
| main.rs:254:32:254:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] |
|
||||
| main.rs:254:35:254:44 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:257:9:257:10 | i1 | semmle.label | i1 |
|
||||
| main.rs:257:14:257:15 | s1 [Ok] | semmle.label | s1 [Ok] |
|
||||
| main.rs:257:14:257:16 | TryExpr | semmle.label | TryExpr |
|
||||
| main.rs:259:10:259:11 | i1 | semmle.label | i1 |
|
||||
| main.rs:238:10:238:20 | s1.unwrap(...) | semmle.label | s1.unwrap(...) |
|
||||
| main.rs:242:9:242:10 | s1 [Some] | semmle.label | s1 [Some] |
|
||||
| main.rs:242:14:242:29 | Some(...) [Some] | semmle.label | Some(...) [Some] |
|
||||
| main.rs:242:19:242:28 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:243:10:243:11 | s1 [Some] | semmle.label | s1 [Some] |
|
||||
| main.rs:243:10:243:24 | s1.unwrap_or(...) | semmle.label | s1.unwrap_or(...) |
|
||||
| main.rs:246:10:246:33 | s2.unwrap_or(...) | semmle.label | s2.unwrap_or(...) |
|
||||
| main.rs:246:23:246:32 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:250:9:250:10 | s1 [Some] | semmle.label | s1 [Some] |
|
||||
| main.rs:250:14:250:29 | Some(...) [Some] | semmle.label | Some(...) [Some] |
|
||||
| main.rs:250:19:250:28 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:251:10:251:11 | s1 [Some] | semmle.label | s1 [Some] |
|
||||
| main.rs:251:10:251:32 | s1.unwrap_or_else(...) | semmle.label | s1.unwrap_or_else(...) |
|
||||
| main.rs:254:10:254:41 | s2.unwrap_or_else(...) | semmle.label | s2.unwrap_or_else(...) |
|
||||
| main.rs:254:31:254:40 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:258:9:258:10 | s1 [Some] | semmle.label | s1 [Some] |
|
||||
| main.rs:258:14:258:29 | Some(...) [Some] | semmle.label | Some(...) [Some] |
|
||||
| main.rs:258:19:258:28 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:260:9:260:10 | i1 | semmle.label | i1 |
|
||||
| main.rs:260:14:260:15 | s1 [Some] | semmle.label | s1 [Some] |
|
||||
| main.rs:260:14:260:16 | TryExpr | semmle.label | TryExpr |
|
||||
| main.rs:261:10:261:11 | i1 | semmle.label | i1 |
|
||||
| main.rs:267:9:267:10 | s1 [Ok] | semmle.label | s1 [Ok] |
|
||||
| main.rs:267:32:267:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] |
|
||||
| main.rs:267:35:267:44 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:268:10:268:11 | s1 [Ok] | semmle.label | s1 [Ok] |
|
||||
| main.rs:268:10:268:22 | s1.expect(...) | semmle.label | s1.expect(...) |
|
||||
| main.rs:271:9:271:10 | s2 [Err] | semmle.label | s2 [Err] |
|
||||
| main.rs:271:32:271:46 | Err(...) [Err] | semmle.label | Err(...) [Err] |
|
||||
| main.rs:271:36:271:45 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:273:10:273:11 | s2 [Err] | semmle.label | s2 [Err] |
|
||||
| main.rs:273:10:273:26 | s2.expect_err(...) | semmle.label | s2.expect_err(...) |
|
||||
| main.rs:282:9:282:10 | s1 [A] | semmle.label | s1 [A] |
|
||||
| main.rs:282:14:282:39 | ...::A(...) [A] | semmle.label | ...::A(...) [A] |
|
||||
| main.rs:282:29:282:38 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:284:11:284:12 | s1 [A] | semmle.label | s1 [A] |
|
||||
| main.rs:285:9:285:25 | ...::A(...) [A] | semmle.label | ...::A(...) [A] |
|
||||
| main.rs:285:24:285:24 | n | semmle.label | n |
|
||||
| main.rs:285:35:285:35 | n | semmle.label | n |
|
||||
| main.rs:288:11:288:12 | s1 [A] | semmle.label | s1 [A] |
|
||||
| main.rs:289:9:289:25 | ...::A(...) [A] | semmle.label | ...::A(...) [A] |
|
||||
| main.rs:289:24:289:24 | n | semmle.label | n |
|
||||
| main.rs:289:55:289:55 | n | semmle.label | n |
|
||||
| main.rs:300:9:300:10 | s1 [A] | semmle.label | s1 [A] |
|
||||
| main.rs:300:14:300:26 | A(...) [A] | semmle.label | A(...) [A] |
|
||||
| main.rs:300:16:300:25 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:302:11:302:12 | s1 [A] | semmle.label | s1 [A] |
|
||||
| main.rs:303:9:303:12 | A(...) [A] | semmle.label | A(...) [A] |
|
||||
| main.rs:303:11:303:11 | n | semmle.label | n |
|
||||
| main.rs:303:22:303:22 | n | semmle.label | n |
|
||||
| main.rs:306:11:306:12 | s1 [A] | semmle.label | s1 [A] |
|
||||
| main.rs:307:9:307:12 | A(...) [A] | semmle.label | A(...) [A] |
|
||||
| main.rs:307:11:307:11 | n | semmle.label | n |
|
||||
| main.rs:307:29:307:29 | n | semmle.label | n |
|
||||
| main.rs:321:9:321:10 | s1 [C] | semmle.label | s1 [C] |
|
||||
| main.rs:321:14:323:5 | ...::C {...} [C] | semmle.label | ...::C {...} [C] |
|
||||
| main.rs:322:18:322:27 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:325:11:325:12 | s1 [C] | semmle.label | s1 [C] |
|
||||
| main.rs:326:9:326:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] |
|
||||
| main.rs:326:36:326:36 | n | semmle.label | n |
|
||||
| main.rs:326:48:326:48 | n | semmle.label | n |
|
||||
| main.rs:329:11:329:12 | s1 [C] | semmle.label | s1 [C] |
|
||||
| main.rs:330:9:330:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] |
|
||||
| main.rs:330:36:330:36 | n | semmle.label | n |
|
||||
| main.rs:330:81:330:81 | n | semmle.label | n |
|
||||
| main.rs:341:9:341:10 | s1 [C] | semmle.label | s1 [C] |
|
||||
| main.rs:341:14:343:5 | C {...} [C] | semmle.label | C {...} [C] |
|
||||
| main.rs:342:18:342:27 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:345:11:345:12 | s1 [C] | semmle.label | s1 [C] |
|
||||
| main.rs:346:9:346:24 | C {...} [C] | semmle.label | C {...} [C] |
|
||||
| main.rs:346:22:346:22 | n | semmle.label | n |
|
||||
| main.rs:346:34:346:34 | n | semmle.label | n |
|
||||
| main.rs:349:11:349:12 | s1 [C] | semmle.label | s1 [C] |
|
||||
| main.rs:350:9:350:24 | C {...} [C] | semmle.label | C {...} [C] |
|
||||
| main.rs:350:22:350:22 | n | semmle.label | n |
|
||||
| main.rs:350:53:350:53 | n | semmle.label | n |
|
||||
| main.rs:362:9:362:12 | arr1 [element] | semmle.label | arr1 [element] |
|
||||
| main.rs:362:16:362:33 | [...] [element] | semmle.label | [...] [element] |
|
||||
| main.rs:362:23:362:32 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:363:9:363:10 | n1 | semmle.label | n1 |
|
||||
| main.rs:363:14:363:17 | arr1 [element] | semmle.label | arr1 [element] |
|
||||
| main.rs:363:14:363:20 | arr1[2] | semmle.label | arr1[2] |
|
||||
| main.rs:364:10:364:11 | n1 | semmle.label | n1 |
|
||||
| main.rs:366:9:366:12 | arr2 [element] | semmle.label | arr2 [element] |
|
||||
| main.rs:366:16:366:31 | [...; 10] [element] | semmle.label | [...; 10] [element] |
|
||||
| main.rs:366:17:366:26 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:367:9:367:10 | n2 | semmle.label | n2 |
|
||||
| main.rs:367:14:367:17 | arr2 [element] | semmle.label | arr2 [element] |
|
||||
| main.rs:367:14:367:20 | arr2[4] | semmle.label | arr2[4] |
|
||||
| main.rs:368:10:368:11 | n2 | semmle.label | n2 |
|
||||
| main.rs:376:9:376:12 | arr1 [element] | semmle.label | arr1 [element] |
|
||||
| main.rs:376:16:376:33 | [...] [element] | semmle.label | [...] [element] |
|
||||
| main.rs:376:23:376:32 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:377:9:377:10 | n1 | semmle.label | n1 |
|
||||
| main.rs:377:15:377:18 | arr1 [element] | semmle.label | arr1 [element] |
|
||||
| main.rs:378:14:378:15 | n1 | semmle.label | n1 |
|
||||
| main.rs:388:9:388:12 | arr1 [element] | semmle.label | arr1 [element] |
|
||||
| main.rs:388:16:388:33 | [...] [element] | semmle.label | [...] [element] |
|
||||
| main.rs:388:23:388:32 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:389:11:389:14 | arr1 [element] | semmle.label | arr1 [element] |
|
||||
| main.rs:390:9:390:17 | SlicePat [element] | semmle.label | SlicePat [element] |
|
||||
| main.rs:390:10:390:10 | a | semmle.label | a |
|
||||
| main.rs:390:13:390:13 | b | semmle.label | b |
|
||||
| main.rs:390:16:390:16 | c | semmle.label | c |
|
||||
| main.rs:391:18:391:18 | a | semmle.label | a |
|
||||
| main.rs:392:18:392:18 | b | semmle.label | b |
|
||||
| main.rs:393:18:393:18 | c | semmle.label | c |
|
||||
| main.rs:402:5:402:11 | [post] mut_arr [element] | semmle.label | [post] mut_arr [element] |
|
||||
| main.rs:402:18:402:27 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:403:9:403:9 | d | semmle.label | d |
|
||||
| main.rs:403:13:403:19 | mut_arr [element] | semmle.label | mut_arr [element] |
|
||||
| main.rs:403:13:403:22 | mut_arr[1] | semmle.label | mut_arr[1] |
|
||||
| main.rs:404:10:404:10 | d | semmle.label | d |
|
||||
| main.rs:405:10:405:16 | mut_arr [element] | semmle.label | mut_arr [element] |
|
||||
| main.rs:405:10:405:19 | mut_arr[0] | semmle.label | mut_arr[0] |
|
||||
| main.rs:428:9:428:9 | s | semmle.label | s |
|
||||
| main.rs:428:25:428:26 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:429:10:429:10 | s | semmle.label | s |
|
||||
| main.rs:270:9:270:10 | i1 | semmle.label | i1 |
|
||||
| main.rs:270:14:270:15 | s1 [Ok] | semmle.label | s1 [Ok] |
|
||||
| main.rs:270:14:270:16 | TryExpr | semmle.label | TryExpr |
|
||||
| main.rs:272:10:272:11 | i1 | semmle.label | i1 |
|
||||
| main.rs:280:9:280:10 | s1 [Ok] | semmle.label | s1 [Ok] |
|
||||
| main.rs:280:32:280:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] |
|
||||
| main.rs:280:35:280:44 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:281:10:281:11 | s1 [Ok] | semmle.label | s1 [Ok] |
|
||||
| main.rs:281:10:281:22 | s1.expect(...) | semmle.label | s1.expect(...) |
|
||||
| main.rs:284:9:284:10 | s2 [Err] | semmle.label | s2 [Err] |
|
||||
| main.rs:284:32:284:46 | Err(...) [Err] | semmle.label | Err(...) [Err] |
|
||||
| main.rs:284:36:284:45 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:286:10:286:11 | s2 [Err] | semmle.label | s2 [Err] |
|
||||
| main.rs:286:10:286:26 | s2.expect_err(...) | semmle.label | s2.expect_err(...) |
|
||||
| main.rs:295:9:295:10 | s1 [A] | semmle.label | s1 [A] |
|
||||
| main.rs:295:14:295:39 | ...::A(...) [A] | semmle.label | ...::A(...) [A] |
|
||||
| main.rs:295:29:295:38 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:297:11:297:12 | s1 [A] | semmle.label | s1 [A] |
|
||||
| main.rs:298:9:298:25 | ...::A(...) [A] | semmle.label | ...::A(...) [A] |
|
||||
| main.rs:298:24:298:24 | n | semmle.label | n |
|
||||
| main.rs:298:35:298:35 | n | semmle.label | n |
|
||||
| main.rs:301:11:301:12 | s1 [A] | semmle.label | s1 [A] |
|
||||
| main.rs:302:9:302:25 | ...::A(...) [A] | semmle.label | ...::A(...) [A] |
|
||||
| main.rs:302:24:302:24 | n | semmle.label | n |
|
||||
| main.rs:302:55:302:55 | n | semmle.label | n |
|
||||
| main.rs:313:9:313:10 | s1 [A] | semmle.label | s1 [A] |
|
||||
| main.rs:313:14:313:26 | A(...) [A] | semmle.label | A(...) [A] |
|
||||
| main.rs:313:16:313:25 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:315:11:315:12 | s1 [A] | semmle.label | s1 [A] |
|
||||
| main.rs:316:9:316:12 | A(...) [A] | semmle.label | A(...) [A] |
|
||||
| main.rs:316:11:316:11 | n | semmle.label | n |
|
||||
| main.rs:316:22:316:22 | n | semmle.label | n |
|
||||
| main.rs:319:11:319:12 | s1 [A] | semmle.label | s1 [A] |
|
||||
| main.rs:320:9:320:12 | A(...) [A] | semmle.label | A(...) [A] |
|
||||
| main.rs:320:11:320:11 | n | semmle.label | n |
|
||||
| main.rs:320:29:320:29 | n | semmle.label | n |
|
||||
| main.rs:334:9:334:10 | s1 [C] | semmle.label | s1 [C] |
|
||||
| main.rs:334:14:336:5 | ...::C {...} [C] | semmle.label | ...::C {...} [C] |
|
||||
| main.rs:335:18:335:27 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:338:11:338:12 | s1 [C] | semmle.label | s1 [C] |
|
||||
| main.rs:339:9:339:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] |
|
||||
| main.rs:339:36:339:36 | n | semmle.label | n |
|
||||
| main.rs:339:48:339:48 | n | semmle.label | n |
|
||||
| main.rs:342:11:342:12 | s1 [C] | semmle.label | s1 [C] |
|
||||
| main.rs:343:9:343:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] |
|
||||
| main.rs:343:36:343:36 | n | semmle.label | n |
|
||||
| main.rs:343:81:343:81 | n | semmle.label | n |
|
||||
| main.rs:354:9:354:10 | s1 [C] | semmle.label | s1 [C] |
|
||||
| main.rs:354:14:356:5 | C {...} [C] | semmle.label | C {...} [C] |
|
||||
| main.rs:355:18:355:27 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:358:11:358:12 | s1 [C] | semmle.label | s1 [C] |
|
||||
| main.rs:359:9:359:24 | C {...} [C] | semmle.label | C {...} [C] |
|
||||
| main.rs:359:22:359:22 | n | semmle.label | n |
|
||||
| main.rs:359:34:359:34 | n | semmle.label | n |
|
||||
| main.rs:362:11:362:12 | s1 [C] | semmle.label | s1 [C] |
|
||||
| main.rs:363:9:363:24 | C {...} [C] | semmle.label | C {...} [C] |
|
||||
| main.rs:363:22:363:22 | n | semmle.label | n |
|
||||
| main.rs:363:53:363:53 | n | semmle.label | n |
|
||||
| main.rs:375:9:375:12 | arr1 [element] | semmle.label | arr1 [element] |
|
||||
| main.rs:375:16:375:33 | [...] [element] | semmle.label | [...] [element] |
|
||||
| main.rs:375:23:375:32 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:376:9:376:10 | n1 | semmle.label | n1 |
|
||||
| main.rs:376:14:376:17 | arr1 [element] | semmle.label | arr1 [element] |
|
||||
| main.rs:376:14:376:20 | arr1[2] | semmle.label | arr1[2] |
|
||||
| main.rs:377:10:377:11 | n1 | semmle.label | n1 |
|
||||
| main.rs:379:9:379:12 | arr2 [element] | semmle.label | arr2 [element] |
|
||||
| main.rs:379:16:379:31 | [...; 10] [element] | semmle.label | [...; 10] [element] |
|
||||
| main.rs:379:17:379:26 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:380:9:380:10 | n2 | semmle.label | n2 |
|
||||
| main.rs:380:14:380:17 | arr2 [element] | semmle.label | arr2 [element] |
|
||||
| main.rs:380:14:380:20 | arr2[4] | semmle.label | arr2[4] |
|
||||
| main.rs:381:10:381:11 | n2 | semmle.label | n2 |
|
||||
| main.rs:389:9:389:12 | arr1 [element] | semmle.label | arr1 [element] |
|
||||
| main.rs:389:16:389:33 | [...] [element] | semmle.label | [...] [element] |
|
||||
| main.rs:389:23:389:32 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:390:9:390:10 | n1 | semmle.label | n1 |
|
||||
| main.rs:390:15:390:18 | arr1 [element] | semmle.label | arr1 [element] |
|
||||
| main.rs:391:14:391:15 | n1 | semmle.label | n1 |
|
||||
| main.rs:401:9:401:12 | arr1 [element] | semmle.label | arr1 [element] |
|
||||
| main.rs:401:16:401:33 | [...] [element] | semmle.label | [...] [element] |
|
||||
| main.rs:401:23:401:32 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:402:11:402:14 | arr1 [element] | semmle.label | arr1 [element] |
|
||||
| main.rs:403:9:403:17 | SlicePat [element] | semmle.label | SlicePat [element] |
|
||||
| main.rs:403:10:403:10 | a | semmle.label | a |
|
||||
| main.rs:403:13:403:13 | b | semmle.label | b |
|
||||
| main.rs:403:16:403:16 | c | semmle.label | c |
|
||||
| main.rs:404:18:404:18 | a | semmle.label | a |
|
||||
| main.rs:405:18:405:18 | b | semmle.label | b |
|
||||
| main.rs:406:18:406:18 | c | semmle.label | c |
|
||||
| main.rs:415:5:415:11 | [post] mut_arr [element] | semmle.label | [post] mut_arr [element] |
|
||||
| main.rs:415:18:415:27 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:416:9:416:9 | d | semmle.label | d |
|
||||
| main.rs:416:13:416:19 | mut_arr [element] | semmle.label | mut_arr [element] |
|
||||
| main.rs:416:13:416:22 | mut_arr[1] | semmle.label | mut_arr[1] |
|
||||
| main.rs:417:10:417:10 | d | semmle.label | d |
|
||||
| main.rs:418:10:418:16 | mut_arr [element] | semmle.label | mut_arr [element] |
|
||||
| main.rs:418:10:418:19 | mut_arr[0] | semmle.label | mut_arr[0] |
|
||||
| main.rs:441:9:441:9 | s | semmle.label | s |
|
||||
| main.rs:441:25:441:26 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:442:10:442:10 | s | semmle.label | s |
|
||||
subpaths
|
||||
testFailures
|
||||
#select
|
||||
@@ -401,32 +418,33 @@ testFailures
|
||||
| main.rs:113:10:113:12 | a.0 | main.rs:111:11:111:20 | source(...) | main.rs:113:10:113:12 | a.0 | $@ | main.rs:111:11:111:20 | source(...) | source(...) |
|
||||
| main.rs:121:10:121:15 | ... .1 | main.rs:118:17:118:26 | source(...) | main.rs:121:10:121:15 | ... .1 | $@ | main.rs:118:17:118:26 | source(...) | source(...) |
|
||||
| main.rs:152:10:152:10 | a | main.rs:148:12:148:21 | source(...) | main.rs:152:10:152:10 | a | $@ | main.rs:148:12:148:21 | source(...) | source(...) |
|
||||
| main.rs:188:18:188:18 | y | main.rs:178:16:178:25 | source(...) | main.rs:188:18:188:18 | y | $@ | main.rs:178:16:178:25 | source(...) | source(...) |
|
||||
| main.rs:201:33:201:33 | n | main.rs:198:27:198:36 | source(...) | main.rs:201:33:201:33 | n | $@ | main.rs:198:27:198:36 | source(...) | source(...) |
|
||||
| main.rs:214:25:214:25 | n | main.rs:211:19:211:28 | source(...) | main.rs:214:25:214:25 | n | $@ | main.rs:211:19:211:28 | source(...) | source(...) |
|
||||
| main.rs:225:10:225:20 | s1.unwrap(...) | main.rs:224:19:224:28 | source(...) | main.rs:225:10:225:20 | s1.unwrap(...) | $@ | main.rs:224:19:224:28 | source(...) | source(...) |
|
||||
| main.rs:230:10:230:24 | s1.unwrap_or(...) | main.rs:229:19:229:28 | source(...) | main.rs:230:10:230:24 | s1.unwrap_or(...) | $@ | main.rs:229:19:229:28 | source(...) | source(...) |
|
||||
| main.rs:233:10:233:33 | s2.unwrap_or(...) | main.rs:233:23:233:32 | source(...) | main.rs:233:10:233:33 | s2.unwrap_or(...) | $@ | main.rs:233:23:233:32 | source(...) | source(...) |
|
||||
| main.rs:238:10:238:32 | s1.unwrap_or_else(...) | main.rs:237:19:237:28 | source(...) | main.rs:238:10:238:32 | s1.unwrap_or_else(...) | $@ | main.rs:237:19:237:28 | source(...) | source(...) |
|
||||
| main.rs:241:10:241:41 | s2.unwrap_or_else(...) | main.rs:241:31:241:40 | source(...) | main.rs:241:10:241:41 | s2.unwrap_or_else(...) | $@ | main.rs:241:31:241:40 | source(...) | source(...) |
|
||||
| main.rs:248:10:248:11 | i1 | main.rs:245:19:245:28 | source(...) | main.rs:248:10:248:11 | i1 | $@ | main.rs:245:19:245:28 | source(...) | source(...) |
|
||||
| main.rs:259:10:259:11 | i1 | main.rs:254:35:254:44 | source(...) | main.rs:259:10:259:11 | i1 | $@ | main.rs:254:35:254:44 | source(...) | source(...) |
|
||||
| main.rs:268:10:268:22 | s1.expect(...) | main.rs:267:35:267:44 | source(...) | main.rs:268:10:268:22 | s1.expect(...) | $@ | main.rs:267:35:267:44 | source(...) | source(...) |
|
||||
| main.rs:273:10:273:26 | s2.expect_err(...) | main.rs:271:36:271:45 | source(...) | main.rs:273:10:273:26 | s2.expect_err(...) | $@ | main.rs:271:36:271:45 | source(...) | source(...) |
|
||||
| main.rs:285:35:285:35 | n | main.rs:282:29:282:38 | source(...) | main.rs:285:35:285:35 | n | $@ | main.rs:282:29:282:38 | source(...) | source(...) |
|
||||
| main.rs:289:55:289:55 | n | main.rs:282:29:282:38 | source(...) | main.rs:289:55:289:55 | n | $@ | main.rs:282:29:282:38 | source(...) | source(...) |
|
||||
| main.rs:303:22:303:22 | n | main.rs:300:16:300:25 | source(...) | main.rs:303:22:303:22 | n | $@ | main.rs:300:16:300:25 | source(...) | source(...) |
|
||||
| main.rs:307:29:307:29 | n | main.rs:300:16:300:25 | source(...) | main.rs:307:29:307:29 | n | $@ | main.rs:300:16:300:25 | source(...) | source(...) |
|
||||
| main.rs:326:48:326:48 | n | main.rs:322:18:322:27 | source(...) | main.rs:326:48:326:48 | n | $@ | main.rs:322:18:322:27 | source(...) | source(...) |
|
||||
| main.rs:330:81:330:81 | n | main.rs:322:18:322:27 | source(...) | main.rs:330:81:330:81 | n | $@ | main.rs:322:18:322:27 | source(...) | source(...) |
|
||||
| main.rs:346:34:346:34 | n | main.rs:342:18:342:27 | source(...) | main.rs:346:34:346:34 | n | $@ | main.rs:342:18:342:27 | source(...) | source(...) |
|
||||
| main.rs:350:53:350:53 | n | main.rs:342:18:342:27 | source(...) | main.rs:350:53:350:53 | n | $@ | main.rs:342:18:342:27 | source(...) | source(...) |
|
||||
| main.rs:364:10:364:11 | n1 | main.rs:362:23:362:32 | source(...) | main.rs:364:10:364:11 | n1 | $@ | main.rs:362:23:362:32 | source(...) | source(...) |
|
||||
| main.rs:368:10:368:11 | n2 | main.rs:366:17:366:26 | source(...) | main.rs:368:10:368:11 | n2 | $@ | main.rs:366:17:366:26 | source(...) | source(...) |
|
||||
| main.rs:378:14:378:15 | n1 | main.rs:376:23:376:32 | source(...) | main.rs:378:14:378:15 | n1 | $@ | main.rs:376:23:376:32 | source(...) | source(...) |
|
||||
| main.rs:391:18:391:18 | a | main.rs:388:23:388:32 | source(...) | main.rs:391:18:391:18 | a | $@ | main.rs:388:23:388:32 | source(...) | source(...) |
|
||||
| main.rs:392:18:392:18 | b | main.rs:388:23:388:32 | source(...) | main.rs:392:18:392:18 | b | $@ | main.rs:388:23:388:32 | source(...) | source(...) |
|
||||
| main.rs:393:18:393:18 | c | main.rs:388:23:388:32 | source(...) | main.rs:393:18:393:18 | c | $@ | main.rs:388:23:388:32 | source(...) | source(...) |
|
||||
| main.rs:404:10:404:10 | d | main.rs:402:18:402:27 | source(...) | main.rs:404:10:404:10 | d | $@ | main.rs:402:18:402:27 | source(...) | source(...) |
|
||||
| main.rs:405:10:405:19 | mut_arr[0] | main.rs:402:18:402:27 | source(...) | main.rs:405:10:405:19 | mut_arr[0] | $@ | main.rs:402:18:402:27 | source(...) | source(...) |
|
||||
| main.rs:429:10:429:10 | s | main.rs:428:25:428:26 | source(...) | main.rs:429:10:429:10 | s | $@ | main.rs:428:25:428:26 | source(...) | source(...) |
|
||||
| main.rs:186:18:186:18 | y | main.rs:175:13:175:22 | source(...) | main.rs:186:18:186:18 | y | $@ | main.rs:175:13:175:22 | source(...) | source(...) |
|
||||
| main.rs:201:18:201:18 | x | main.rs:195:27:195:36 | source(...) | main.rs:201:18:201:18 | x | $@ | main.rs:195:27:195:36 | source(...) | source(...) |
|
||||
| main.rs:214:33:214:33 | n | main.rs:211:27:211:36 | source(...) | main.rs:214:33:214:33 | n | $@ | main.rs:211:27:211:36 | source(...) | source(...) |
|
||||
| main.rs:227:25:227:25 | n | main.rs:224:19:224:28 | source(...) | main.rs:227:25:227:25 | n | $@ | main.rs:224:19:224:28 | source(...) | source(...) |
|
||||
| main.rs:238:10:238:20 | s1.unwrap(...) | main.rs:237:19:237:28 | source(...) | main.rs:238:10:238:20 | s1.unwrap(...) | $@ | main.rs:237:19:237:28 | source(...) | source(...) |
|
||||
| main.rs:243:10:243:24 | s1.unwrap_or(...) | main.rs:242:19:242:28 | source(...) | main.rs:243:10:243:24 | s1.unwrap_or(...) | $@ | main.rs:242:19:242:28 | source(...) | source(...) |
|
||||
| main.rs:246:10:246:33 | s2.unwrap_or(...) | main.rs:246:23:246:32 | source(...) | main.rs:246:10:246:33 | s2.unwrap_or(...) | $@ | main.rs:246:23:246:32 | source(...) | source(...) |
|
||||
| main.rs:251:10:251:32 | s1.unwrap_or_else(...) | main.rs:250:19:250:28 | source(...) | main.rs:251:10:251:32 | s1.unwrap_or_else(...) | $@ | main.rs:250:19:250:28 | source(...) | source(...) |
|
||||
| main.rs:254:10:254:41 | s2.unwrap_or_else(...) | main.rs:254:31:254:40 | source(...) | main.rs:254:10:254:41 | s2.unwrap_or_else(...) | $@ | main.rs:254:31:254:40 | source(...) | source(...) |
|
||||
| main.rs:261:10:261:11 | i1 | main.rs:258:19:258:28 | source(...) | main.rs:261:10:261:11 | i1 | $@ | main.rs:258:19:258:28 | source(...) | source(...) |
|
||||
| main.rs:272:10:272:11 | i1 | main.rs:267:35:267:44 | source(...) | main.rs:272:10:272:11 | i1 | $@ | main.rs:267:35:267:44 | source(...) | source(...) |
|
||||
| main.rs:281:10:281:22 | s1.expect(...) | main.rs:280:35:280:44 | source(...) | main.rs:281:10:281:22 | s1.expect(...) | $@ | main.rs:280:35:280:44 | source(...) | source(...) |
|
||||
| main.rs:286:10:286:26 | s2.expect_err(...) | main.rs:284:36:284:45 | source(...) | main.rs:286:10:286:26 | s2.expect_err(...) | $@ | main.rs:284:36:284:45 | source(...) | source(...) |
|
||||
| main.rs:298:35:298:35 | n | main.rs:295:29:295:38 | source(...) | main.rs:298:35:298:35 | n | $@ | main.rs:295:29:295:38 | source(...) | source(...) |
|
||||
| main.rs:302:55:302:55 | n | main.rs:295:29:295:38 | source(...) | main.rs:302:55:302:55 | n | $@ | main.rs:295:29:295:38 | source(...) | source(...) |
|
||||
| main.rs:316:22:316:22 | n | main.rs:313:16:313:25 | source(...) | main.rs:316:22:316:22 | n | $@ | main.rs:313:16:313:25 | source(...) | source(...) |
|
||||
| main.rs:320:29:320:29 | n | main.rs:313:16:313:25 | source(...) | main.rs:320:29:320:29 | n | $@ | main.rs:313:16:313:25 | source(...) | source(...) |
|
||||
| main.rs:339:48:339:48 | n | main.rs:335:18:335:27 | source(...) | main.rs:339:48:339:48 | n | $@ | main.rs:335:18:335:27 | source(...) | source(...) |
|
||||
| main.rs:343:81:343:81 | n | main.rs:335:18:335:27 | source(...) | main.rs:343:81:343:81 | n | $@ | main.rs:335:18:335:27 | source(...) | source(...) |
|
||||
| main.rs:359:34:359:34 | n | main.rs:355:18:355:27 | source(...) | main.rs:359:34:359:34 | n | $@ | main.rs:355:18:355:27 | source(...) | source(...) |
|
||||
| main.rs:363:53:363:53 | n | main.rs:355:18:355:27 | source(...) | main.rs:363:53:363:53 | n | $@ | main.rs:355:18:355:27 | source(...) | source(...) |
|
||||
| main.rs:377:10:377:11 | n1 | main.rs:375:23:375:32 | source(...) | main.rs:377:10:377:11 | n1 | $@ | main.rs:375:23:375:32 | source(...) | source(...) |
|
||||
| main.rs:381:10:381:11 | n2 | main.rs:379:17:379:26 | source(...) | main.rs:381:10:381:11 | n2 | $@ | main.rs:379:17:379:26 | source(...) | source(...) |
|
||||
| main.rs:391:14:391:15 | n1 | main.rs:389:23:389:32 | source(...) | main.rs:391:14:391:15 | n1 | $@ | main.rs:389:23:389:32 | source(...) | source(...) |
|
||||
| main.rs:404:18:404:18 | a | main.rs:401:23:401:32 | source(...) | main.rs:404:18:404:18 | a | $@ | main.rs:401:23:401:32 | source(...) | source(...) |
|
||||
| main.rs:405:18:405:18 | b | main.rs:401:23:401:32 | source(...) | main.rs:405:18:405:18 | b | $@ | main.rs:401:23:401:32 | source(...) | source(...) |
|
||||
| main.rs:406:18:406:18 | c | main.rs:401:23:401:32 | source(...) | main.rs:406:18:406:18 | c | $@ | main.rs:401:23:401:32 | source(...) | source(...) |
|
||||
| main.rs:417:10:417:10 | d | main.rs:415:18:415:27 | source(...) | main.rs:417:10:417:10 | d | $@ | main.rs:415:18:415:27 | source(...) | source(...) |
|
||||
| main.rs:418:10:418:19 | mut_arr[0] | main.rs:415:18:415:27 | source(...) | main.rs:418:10:418:19 | mut_arr[0] | $@ | main.rs:415:18:415:27 | source(...) | source(...) |
|
||||
| main.rs:442:10:442:10 | s | main.rs:441:25:441:26 | source(...) | main.rs:442:10:442:10 | s | $@ | main.rs:441:25:441:26 | source(...) | source(...) |
|
||||
|
||||
@@ -172,11 +172,9 @@ fn struct_nested_field() {
|
||||
}
|
||||
|
||||
fn struct_nested_match() {
|
||||
let y = source(93);
|
||||
let p = Point3D {
|
||||
plane: Point {
|
||||
x: 2,
|
||||
y: source(93),
|
||||
},
|
||||
plane: Point { x: 2, y },
|
||||
z: 4,
|
||||
};
|
||||
match p {
|
||||
@@ -191,6 +189,21 @@ fn struct_nested_match() {
|
||||
}
|
||||
}
|
||||
|
||||
struct MyTupleStruct(i64, i64);
|
||||
|
||||
fn tuple_struct() {
|
||||
let s = MyTupleStruct(source(94), 2);
|
||||
sink(s.0); // $ MISSING: hasValueFlow=94
|
||||
sink(s.1);
|
||||
|
||||
match s {
|
||||
MyTupleStruct(x, y) => {
|
||||
sink(x); // $ hasValueFlow=94
|
||||
sink(y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Data flow through enums
|
||||
|
||||
@@ -442,6 +455,7 @@ fn main() {
|
||||
tuple_mutation();
|
||||
tuple_nested();
|
||||
struct_field();
|
||||
tuple_struct();
|
||||
struct_mutation();
|
||||
struct_pattern_match();
|
||||
struct_nested_field();
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
models
|
||||
| 1 | Summary: lang:core; <crate::option::Option>::unwrap; Argument[self].Variant[crate::option::Option::Some(0)]; ReturnValue; value |
|
||||
| 2 | Summary: lang:core; <crate::result::Result>::unwrap; Argument[self].Variant[crate::result::Result::Ok(0)]; ReturnValue; value |
|
||||
edges
|
||||
| main.rs:13:9:13:9 | a [Some] | main.rs:14:10:14:10 | a [Some] | provenance | |
|
||||
| main.rs:13:9:13:9 | a [Some] | main.rs:15:13:15:13 | a [Some] | provenance | |
|
||||
| main.rs:13:13:13:28 | Some(...) [Some] | main.rs:13:9:13:9 | a [Some] | provenance | |
|
||||
| main.rs:13:18:13:27 | source(...) | main.rs:13:13:13:28 | Some(...) [Some] | provenance | |
|
||||
| main.rs:14:10:14:10 | a [Some] | main.rs:14:10:14:19 | a.unwrap(...) | provenance | MaD:1 |
|
||||
| main.rs:15:9:15:9 | b [Some] | main.rs:16:10:16:10 | b [Some] | provenance | |
|
||||
| main.rs:15:13:15:13 | a [Some] | main.rs:15:13:15:21 | a.clone(...) [Some] | provenance | |
|
||||
| main.rs:15:13:15:21 | a.clone(...) [Some] | main.rs:15:9:15:9 | b [Some] | provenance | |
|
||||
| main.rs:16:10:16:10 | b [Some] | main.rs:16:10:16:19 | b.unwrap(...) | provenance | MaD:1 |
|
||||
| main.rs:20:9:20:9 | a [Ok] | main.rs:21:10:21:10 | a [Ok] | provenance | |
|
||||
| main.rs:20:9:20:9 | a [Ok] | main.rs:22:13:22:13 | a [Ok] | provenance | |
|
||||
| main.rs:20:31:20:44 | Ok(...) [Ok] | main.rs:20:9:20:9 | a [Ok] | provenance | |
|
||||
| main.rs:20:34:20:43 | source(...) | main.rs:20:31:20:44 | Ok(...) [Ok] | provenance | |
|
||||
| main.rs:21:10:21:10 | a [Ok] | main.rs:21:10:21:19 | a.unwrap(...) | provenance | MaD:2 |
|
||||
| main.rs:22:9:22:9 | b [Ok] | main.rs:23:10:23:10 | b [Ok] | provenance | |
|
||||
| main.rs:22:13:22:13 | a [Ok] | main.rs:22:13:22:21 | a.clone(...) [Ok] | provenance | |
|
||||
| main.rs:22:13:22:21 | a.clone(...) [Ok] | main.rs:22:9:22:9 | b [Ok] | provenance | |
|
||||
| main.rs:23:10:23:10 | b [Ok] | main.rs:23:10:23:19 | b.unwrap(...) | provenance | MaD:2 |
|
||||
| main.rs:27:9:27:9 | a | main.rs:28:10:28:10 | a | provenance | |
|
||||
| main.rs:27:9:27:9 | a | main.rs:29:13:29:13 | a | provenance | |
|
||||
| main.rs:27:13:27:22 | source(...) | main.rs:27:9:27:9 | a | provenance | |
|
||||
| main.rs:29:9:29:9 | b | main.rs:30:10:30:10 | b | provenance | |
|
||||
| main.rs:29:13:29:13 | a | main.rs:29:13:29:21 | a.clone(...) | provenance | |
|
||||
| main.rs:29:13:29:21 | a.clone(...) | main.rs:29:9:29:9 | b | provenance | |
|
||||
| main.rs:42:13:42:13 | w [Wrapper] | main.rs:43:15:43:15 | w [Wrapper] | provenance | |
|
||||
| main.rs:42:17:42:41 | Wrapper {...} [Wrapper] | main.rs:42:13:42:13 | w [Wrapper] | provenance | |
|
||||
| main.rs:42:30:42:39 | source(...) | main.rs:42:17:42:41 | Wrapper {...} [Wrapper] | provenance | |
|
||||
| main.rs:43:15:43:15 | w [Wrapper] | main.rs:44:13:44:28 | Wrapper {...} [Wrapper] | provenance | |
|
||||
| main.rs:43:15:43:15 | w [Wrapper] | main.rs:46:17:46:17 | w [Wrapper] | provenance | |
|
||||
| main.rs:44:13:44:28 | Wrapper {...} [Wrapper] | main.rs:44:26:44:26 | n | provenance | |
|
||||
| main.rs:44:26:44:26 | n | main.rs:44:38:44:38 | n | provenance | |
|
||||
| main.rs:46:13:46:13 | u [Wrapper] | main.rs:47:15:47:15 | u [Wrapper] | provenance | |
|
||||
| main.rs:46:17:46:17 | w [Wrapper] | main.rs:46:17:46:25 | w.clone(...) [Wrapper] | provenance | |
|
||||
| main.rs:46:17:46:25 | w.clone(...) [Wrapper] | main.rs:46:13:46:13 | u [Wrapper] | provenance | |
|
||||
| main.rs:47:15:47:15 | u [Wrapper] | main.rs:48:13:48:28 | Wrapper {...} [Wrapper] | provenance | |
|
||||
| main.rs:48:13:48:28 | Wrapper {...} [Wrapper] | main.rs:48:26:48:26 | n | provenance | |
|
||||
| main.rs:48:26:48:26 | n | main.rs:48:38:48:38 | n | provenance | |
|
||||
nodes
|
||||
| main.rs:13:9:13:9 | a [Some] | semmle.label | a [Some] |
|
||||
| main.rs:13:13:13:28 | Some(...) [Some] | semmle.label | Some(...) [Some] |
|
||||
| main.rs:13:18:13:27 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:14:10:14:10 | a [Some] | semmle.label | a [Some] |
|
||||
| main.rs:14:10:14:19 | a.unwrap(...) | semmle.label | a.unwrap(...) |
|
||||
| main.rs:15:9:15:9 | b [Some] | semmle.label | b [Some] |
|
||||
| main.rs:15:13:15:13 | a [Some] | semmle.label | a [Some] |
|
||||
| main.rs:15:13:15:21 | a.clone(...) [Some] | semmle.label | a.clone(...) [Some] |
|
||||
| main.rs:16:10:16:10 | b [Some] | semmle.label | b [Some] |
|
||||
| main.rs:16:10:16:19 | b.unwrap(...) | semmle.label | b.unwrap(...) |
|
||||
| main.rs:20:9:20:9 | a [Ok] | semmle.label | a [Ok] |
|
||||
| main.rs:20:31:20:44 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] |
|
||||
| main.rs:20:34:20:43 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:21:10:21:10 | a [Ok] | semmle.label | a [Ok] |
|
||||
| main.rs:21:10:21:19 | a.unwrap(...) | semmle.label | a.unwrap(...) |
|
||||
| main.rs:22:9:22:9 | b [Ok] | semmle.label | b [Ok] |
|
||||
| main.rs:22:13:22:13 | a [Ok] | semmle.label | a [Ok] |
|
||||
| main.rs:22:13:22:21 | a.clone(...) [Ok] | semmle.label | a.clone(...) [Ok] |
|
||||
| main.rs:23:10:23:10 | b [Ok] | semmle.label | b [Ok] |
|
||||
| main.rs:23:10:23:19 | b.unwrap(...) | semmle.label | b.unwrap(...) |
|
||||
| main.rs:27:9:27:9 | a | semmle.label | a |
|
||||
| main.rs:27:13:27:22 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:28:10:28:10 | a | semmle.label | a |
|
||||
| main.rs:29:9:29:9 | b | semmle.label | b |
|
||||
| main.rs:29:13:29:13 | a | semmle.label | a |
|
||||
| main.rs:29:13:29:21 | a.clone(...) | semmle.label | a.clone(...) |
|
||||
| main.rs:30:10:30:10 | b | semmle.label | b |
|
||||
| main.rs:42:13:42:13 | w [Wrapper] | semmle.label | w [Wrapper] |
|
||||
| main.rs:42:17:42:41 | Wrapper {...} [Wrapper] | semmle.label | Wrapper {...} [Wrapper] |
|
||||
| main.rs:42:30:42:39 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:43:15:43:15 | w [Wrapper] | semmle.label | w [Wrapper] |
|
||||
| main.rs:44:13:44:28 | Wrapper {...} [Wrapper] | semmle.label | Wrapper {...} [Wrapper] |
|
||||
| main.rs:44:26:44:26 | n | semmle.label | n |
|
||||
| main.rs:44:38:44:38 | n | semmle.label | n |
|
||||
| main.rs:46:13:46:13 | u [Wrapper] | semmle.label | u [Wrapper] |
|
||||
| main.rs:46:17:46:17 | w [Wrapper] | semmle.label | w [Wrapper] |
|
||||
| main.rs:46:17:46:25 | w.clone(...) [Wrapper] | semmle.label | w.clone(...) [Wrapper] |
|
||||
| main.rs:47:15:47:15 | u [Wrapper] | semmle.label | u [Wrapper] |
|
||||
| main.rs:48:13:48:28 | Wrapper {...} [Wrapper] | semmle.label | Wrapper {...} [Wrapper] |
|
||||
| main.rs:48:26:48:26 | n | semmle.label | n |
|
||||
| main.rs:48:38:48:38 | n | semmle.label | n |
|
||||
subpaths
|
||||
testFailures
|
||||
#select
|
||||
| main.rs:14:10:14:19 | a.unwrap(...) | main.rs:13:18:13:27 | source(...) | main.rs:14:10:14:19 | a.unwrap(...) | $@ | main.rs:13:18:13:27 | source(...) | source(...) |
|
||||
| main.rs:16:10:16:19 | b.unwrap(...) | main.rs:13:18:13:27 | source(...) | main.rs:16:10:16:19 | b.unwrap(...) | $@ | main.rs:13:18:13:27 | source(...) | source(...) |
|
||||
| main.rs:21:10:21:19 | a.unwrap(...) | main.rs:20:34:20:43 | source(...) | main.rs:21:10:21:19 | a.unwrap(...) | $@ | main.rs:20:34:20:43 | source(...) | source(...) |
|
||||
| main.rs:23:10:23:19 | b.unwrap(...) | main.rs:20:34:20:43 | source(...) | main.rs:23:10:23:19 | b.unwrap(...) | $@ | main.rs:20:34:20:43 | source(...) | source(...) |
|
||||
| main.rs:28:10:28:10 | a | main.rs:27:13:27:22 | source(...) | main.rs:28:10:28:10 | a | $@ | main.rs:27:13:27:22 | source(...) | source(...) |
|
||||
| main.rs:30:10:30:10 | b | main.rs:27:13:27:22 | source(...) | main.rs:30:10:30:10 | b | $@ | main.rs:27:13:27:22 | source(...) | source(...) |
|
||||
| main.rs:44:38:44:38 | n | main.rs:42:30:42:39 | source(...) | main.rs:44:38:44:38 | n | $@ | main.rs:42:30:42:39 | source(...) | source(...) |
|
||||
| main.rs:48:38:48:38 | n | main.rs:42:30:42:39 | source(...) | main.rs:48:38:48:38 | n | $@ | main.rs:42:30:42:39 | source(...) | source(...) |
|
||||
12
rust/ql/test/library-tests/dataflow/modeled/inline-flow.ql
Normal file
12
rust/ql/test/library-tests/dataflow/modeled/inline-flow.ql
Normal file
@@ -0,0 +1,12 @@
|
||||
/**
|
||||
* @kind path-problem
|
||||
*/
|
||||
|
||||
import rust
|
||||
import utils.test.InlineFlowTest
|
||||
import DefaultFlowTest
|
||||
import ValueFlow::PathGraph
|
||||
|
||||
from ValueFlow::PathNode source, ValueFlow::PathNode sink
|
||||
where ValueFlow::flowPath(source, sink)
|
||||
select sink, source, sink, "$@", source, source.toString()
|
||||
58
rust/ql/test/library-tests/dataflow/modeled/main.rs
Normal file
58
rust/ql/test/library-tests/dataflow/modeled/main.rs
Normal file
@@ -0,0 +1,58 @@
|
||||
|
||||
fn source(i: i64) -> i64 {
|
||||
1000 + i
|
||||
}
|
||||
|
||||
fn sink(s: i64) {
|
||||
println!("{}", s);
|
||||
}
|
||||
|
||||
// Flow through `clone` methods
|
||||
|
||||
fn option_clone() {
|
||||
let a = Some(source(88));
|
||||
sink(a.unwrap()); // $ hasValueFlow=88
|
||||
let b = a.clone();
|
||||
sink(b.unwrap()); // $ hasValueFlow=88
|
||||
}
|
||||
|
||||
fn result_clone() {
|
||||
let a: Result<i64, i64> = Ok(source(37));
|
||||
sink(a.unwrap()); // $ hasValueFlow=37
|
||||
let b = a.clone();
|
||||
sink(b.unwrap()); // $ hasValueFlow=37
|
||||
}
|
||||
|
||||
fn i64_clone() {
|
||||
let a = source(12);
|
||||
sink(a); // $ hasValueFlow=12
|
||||
let b = a.clone();
|
||||
sink(b); // $ hasValueFlow=12
|
||||
}
|
||||
|
||||
mod my_clone {
|
||||
use super::{source, sink};
|
||||
|
||||
#[derive(Clone)]
|
||||
struct Wrapper {
|
||||
n: i64
|
||||
}
|
||||
|
||||
pub fn wrapper_clone() {
|
||||
let w = Wrapper { n: source(73) };
|
||||
match w {
|
||||
Wrapper { n: n } => sink(n) // $ hasValueFlow=73
|
||||
}
|
||||
let u = w.clone();
|
||||
match u {
|
||||
Wrapper { n: n } => sink(n) // $ hasValueFlow=73
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
option_clone();
|
||||
result_clone();
|
||||
i64_clone();
|
||||
my_clone::wrapper_clone();
|
||||
}
|
||||
@@ -32,10 +32,10 @@ fn test_env_args() {
|
||||
let arg2 = std::env::args().nth(2).unwrap(); // $ Alert[rust/summary/taint-sources]
|
||||
let arg3 = std::env::args_os().nth(3).unwrap(); // $ Alert[rust/summary/taint-sources]
|
||||
|
||||
sink(my_path); // $ MISSING: hasTaintFlow
|
||||
sink(arg1); // $ MISSING: hasTaintFlow
|
||||
sink(arg2); // $ MISSING: hasTaintFlow
|
||||
sink(arg3); // $ MISSING: hasTaintFlow
|
||||
sink(my_path); // $ hasTaintFlow
|
||||
sink(arg1); // $ hasTaintFlow
|
||||
sink(arg2); // $ hasTaintFlow
|
||||
sink(arg3); // $ hasTaintFlow
|
||||
|
||||
for arg in std::env::args() { // $ Alert[rust/summary/taint-sources]
|
||||
sink(arg); // $ hasTaintFlow
|
||||
|
||||
@@ -2,6 +2,8 @@ additionalTaintStep
|
||||
| file://:0:0:0:0 | [summary param] 0 in lang:alloc::_::crate::fmt::format | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::crate::fmt::format | MaD:3 |
|
||||
| file://:0:0:0:0 | [summary param] self in lang:alloc::_::<crate::string::String>::as_bytes | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::<crate::string::String>::as_bytes | MaD:1 |
|
||||
| file://:0:0:0:0 | [summary param] self in lang:alloc::_::<crate::string::String>::as_str | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::<crate::string::String>::as_str | MaD:2 |
|
||||
| file://:0:0:0:0 | [summary param] self in lang:core::_::crate::iter::traits::iterator::Iterator::collect | file://:0:0:0:0 | [summary] read: Argument[self].Element in lang:core::_::crate::iter::traits::iterator::Iterator::collect | |
|
||||
| file://:0:0:0:0 | [summary param] self in lang:core::_::crate::iter::traits::iterator::Iterator::nth | file://:0:0:0:0 | [summary] read: Argument[self].Element in lang:core::_::crate::iter::traits::iterator::Iterator::nth | |
|
||||
| file://:0:0:0:0 | [summary param] self in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::blocking::response::Response>::bytes | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::blocking::response::Response>::bytes | MaD:4 |
|
||||
| file://:0:0:0:0 | [summary param] self in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::blocking::response::Response>::text | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::blocking::response::Response>::text | MaD:5 |
|
||||
| file://:0:0:0:0 | [summary param] self in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::blocking::response::Response>::text_with_charset | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::blocking::response::Response>::text_with_charset | MaD:6 |
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import rust
|
||||
import codeql.rust.Concepts
|
||||
import codeql.rust.security.SqlInjectionExtensions
|
||||
import utils.test.InlineExpectationsTest
|
||||
|
||||
module PostgresTest implements TestSig {
|
||||
string getARelevantTag() { result = "sql-sink" }
|
||||
string getARelevantTag() { result = ["sql-sink", "database-read"] }
|
||||
|
||||
predicate hasActualResult(Location location, string element, string tag, string value) {
|
||||
exists(SqlInjection::Sink sink |
|
||||
@@ -13,6 +14,14 @@ module PostgresTest implements TestSig {
|
||||
tag = "sql-sink" and
|
||||
value = ""
|
||||
)
|
||||
or
|
||||
exists(ModeledDatabaseSource source |
|
||||
location = source.getLocation() and
|
||||
location.getFile().getBaseName() != "" and
|
||||
element = source.toString() and
|
||||
tag = "database-read" and
|
||||
value = ""
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -33,9 +33,9 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
// conn.query_typed_raw(query.as_str(), &[])?;
|
||||
|
||||
for row in &conn.query("SELECT id, name, age FROM person", &[])? { // $ sql-sink
|
||||
let id: i32 = row.get("id");
|
||||
let name: &str = row.get("name");
|
||||
let age: i32 = row.get("age");
|
||||
let id: i32 = row.get("id"); // $ database-read
|
||||
let name: &str = row.try_get("name")?; // $ database-read
|
||||
let age: i32 = row.try_get("age").unwrap(); // $ database-read
|
||||
println!("found person: {} {} {}", id, name, age);
|
||||
}
|
||||
|
||||
|
||||
@@ -191,6 +191,27 @@ mod m9 {
|
||||
} // I57
|
||||
}
|
||||
|
||||
mod m10 {
|
||||
#[rustfmt::skip]
|
||||
pub struct MyStruct<
|
||||
T // I58
|
||||
>
|
||||
{
|
||||
x: T, // $ item=I58
|
||||
} // I59
|
||||
|
||||
#[rustfmt::skip]
|
||||
pub fn f<T>( // I60
|
||||
x: T // $ item=I60
|
||||
) ->
|
||||
MyStruct<
|
||||
T // $ item=I60
|
||||
> // $ item=I59
|
||||
{
|
||||
MyStruct { x } // $ item=I59
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
my::nested::nested1::nested2::f(); // $ item=I4
|
||||
my::f(); // $ item=I38
|
||||
|
||||
@@ -12,6 +12,7 @@ mod
|
||||
| main.rs:122:1:137:1 | mod m7 |
|
||||
| main.rs:139:1:182:1 | mod m8 |
|
||||
| main.rs:184:1:192:1 | mod m9 |
|
||||
| main.rs:194:1:213:1 | mod m10 |
|
||||
| my2/mod.rs:1:1:1:16 | mod nested2 |
|
||||
| my2/nested2.rs:1:1:11:1 | mod nested3 |
|
||||
| my2/nested2.rs:2:5:10:5 | mod nested4 |
|
||||
@@ -37,7 +38,7 @@ resolvePath
|
||||
| main.rs:30:17:30:21 | super | main.rs:18:5:36:5 | mod m2 |
|
||||
| main.rs:30:17:30:24 | ...::f | main.rs:19:9:21:9 | fn f |
|
||||
| main.rs:33:17:33:17 | f | main.rs:19:9:21:9 | fn f |
|
||||
| main.rs:40:9:40:13 | super | main.rs:1:1:212:2 | SourceFile |
|
||||
| main.rs:40:9:40:13 | super | main.rs:1:1:233:2 | SourceFile |
|
||||
| main.rs:40:9:40:17 | ...::m1 | main.rs:13:1:37:1 | mod m1 |
|
||||
| main.rs:40:9:40:21 | ...::m2 | main.rs:18:5:36:5 | mod m2 |
|
||||
| main.rs:40:9:40:24 | ...::g | main.rs:23:9:27:9 | fn g |
|
||||
@@ -49,7 +50,7 @@ resolvePath
|
||||
| main.rs:61:17:61:19 | Foo | main.rs:59:9:59:21 | struct Foo |
|
||||
| main.rs:64:13:64:15 | Foo | main.rs:53:5:53:17 | struct Foo |
|
||||
| main.rs:66:5:66:5 | f | main.rs:55:5:62:5 | fn f |
|
||||
| main.rs:68:5:68:8 | self | main.rs:1:1:212:2 | SourceFile |
|
||||
| main.rs:68:5:68:8 | self | main.rs:1:1:233:2 | SourceFile |
|
||||
| main.rs:68:5:68:11 | ...::i | main.rs:71:1:83:1 | fn i |
|
||||
| main.rs:74:13:74:15 | Foo | main.rs:48:1:48:13 | struct Foo |
|
||||
| main.rs:81:17:81:19 | Foo | main.rs:77:9:79:9 | struct Foo |
|
||||
@@ -63,7 +64,7 @@ resolvePath
|
||||
| main.rs:87:57:87:66 | ...::g | my2/nested2.rs:7:9:9:9 | fn g |
|
||||
| main.rs:87:80:87:86 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
|
||||
| main.rs:100:5:100:22 | f_defined_in_macro | main.rs:99:18:99:42 | fn f_defined_in_macro |
|
||||
| main.rs:117:13:117:17 | super | main.rs:1:1:212:2 | SourceFile |
|
||||
| main.rs:117:13:117:17 | super | main.rs:1:1:233:2 | SourceFile |
|
||||
| main.rs:117:13:117:21 | ...::m5 | main.rs:103:1:107:1 | mod m5 |
|
||||
| main.rs:118:9:118:9 | f | main.rs:104:5:106:5 | fn f |
|
||||
| main.rs:118:9:118:9 | f | main.rs:110:5:112:5 | fn f |
|
||||
@@ -93,42 +94,47 @@ resolvePath
|
||||
| main.rs:188:19:188:32 | ...::MyStruct | main.rs:185:5:185:26 | struct MyStruct |
|
||||
| main.rs:190:9:190:12 | self | main.rs:184:1:192:1 | mod m9 |
|
||||
| main.rs:190:9:190:22 | ...::MyStruct | main.rs:185:5:185:26 | struct MyStruct |
|
||||
| main.rs:195:5:195:6 | my | main.rs:1:1:1:7 | mod my |
|
||||
| main.rs:195:5:195:14 | ...::nested | my.rs:1:1:1:15 | mod nested |
|
||||
| main.rs:195:5:195:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
|
||||
| main.rs:195:5:195:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
|
||||
| main.rs:195:5:195:35 | ...::f | my/nested.rs:3:9:5:9 | fn f |
|
||||
| main.rs:196:5:196:6 | my | main.rs:1:1:1:7 | mod my |
|
||||
| main.rs:196:5:196:9 | ...::f | my.rs:5:1:7:1 | fn f |
|
||||
| main.rs:197:5:197:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
|
||||
| main.rs:197:5:197:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
|
||||
| main.rs:197:5:197:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
|
||||
| main.rs:197:5:197:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
|
||||
| main.rs:198:5:198:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
|
||||
| main.rs:199:5:199:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
|
||||
| main.rs:200:5:200:9 | crate | main.rs:1:1:212:2 | SourceFile |
|
||||
| main.rs:200:5:200:12 | ...::h | main.rs:50:1:69:1 | fn h |
|
||||
| main.rs:201:5:201:6 | m1 | main.rs:13:1:37:1 | mod m1 |
|
||||
| main.rs:201:5:201:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 |
|
||||
| main.rs:201:5:201:13 | ...::g | main.rs:23:9:27:9 | fn g |
|
||||
| main.rs:202:5:202:6 | m1 | main.rs:13:1:37:1 | mod m1 |
|
||||
| main.rs:202:5:202:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 |
|
||||
| main.rs:202:5:202:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 |
|
||||
| main.rs:202:5:202:17 | ...::h | main.rs:30:27:34:13 | fn h |
|
||||
| main.rs:203:5:203:6 | m4 | main.rs:39:1:46:1 | mod m4 |
|
||||
| main.rs:203:5:203:9 | ...::i | main.rs:42:5:45:5 | fn i |
|
||||
| main.rs:204:5:204:5 | h | main.rs:50:1:69:1 | fn h |
|
||||
| main.rs:205:5:205:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f |
|
||||
| main.rs:206:5:206:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g |
|
||||
| main.rs:207:5:207:5 | j | main.rs:97:1:101:1 | fn j |
|
||||
| main.rs:208:5:208:6 | m6 | main.rs:109:1:120:1 | mod m6 |
|
||||
| main.rs:208:5:208:9 | ...::g | main.rs:114:5:119:5 | fn g |
|
||||
| main.rs:209:5:209:6 | m7 | main.rs:122:1:137:1 | mod m7 |
|
||||
| main.rs:209:5:209:9 | ...::f | main.rs:129:5:136:5 | fn f |
|
||||
| main.rs:210:5:210:6 | m8 | main.rs:139:1:182:1 | mod m8 |
|
||||
| main.rs:210:5:210:9 | ...::g | main.rs:169:5:181:5 | fn g |
|
||||
| main.rs:211:5:211:6 | m9 | main.rs:184:1:192:1 | mod m9 |
|
||||
| main.rs:211:5:211:9 | ...::f | main.rs:187:5:191:5 | fn f |
|
||||
| main.rs:200:12:200:12 | T | main.rs:197:7:197:7 | TypeParam |
|
||||
| main.rs:205:12:205:12 | T | main.rs:204:14:204:14 | TypeParam |
|
||||
| main.rs:207:7:209:7 | MyStruct::<...> | main.rs:195:5:201:5 | struct MyStruct |
|
||||
| main.rs:208:9:208:9 | T | main.rs:204:14:204:14 | TypeParam |
|
||||
| main.rs:211:9:211:16 | MyStruct | main.rs:195:5:201:5 | struct MyStruct |
|
||||
| main.rs:216:5:216:6 | my | main.rs:1:1:1:7 | mod my |
|
||||
| main.rs:216:5:216:14 | ...::nested | my.rs:1:1:1:15 | mod nested |
|
||||
| main.rs:216:5:216:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
|
||||
| main.rs:216:5:216:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
|
||||
| main.rs:216:5:216:35 | ...::f | my/nested.rs:3:9:5:9 | fn f |
|
||||
| main.rs:217:5:217:6 | my | main.rs:1:1:1:7 | mod my |
|
||||
| main.rs:217:5:217:9 | ...::f | my.rs:5:1:7:1 | fn f |
|
||||
| main.rs:218:5:218:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
|
||||
| main.rs:218:5:218:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
|
||||
| main.rs:218:5:218:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
|
||||
| main.rs:218:5:218:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
|
||||
| main.rs:219:5:219:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
|
||||
| main.rs:220:5:220:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
|
||||
| main.rs:221:5:221:9 | crate | main.rs:1:1:233:2 | SourceFile |
|
||||
| main.rs:221:5:221:12 | ...::h | main.rs:50:1:69:1 | fn h |
|
||||
| main.rs:222:5:222:6 | m1 | main.rs:13:1:37:1 | mod m1 |
|
||||
| main.rs:222:5:222:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 |
|
||||
| main.rs:222:5:222:13 | ...::g | main.rs:23:9:27:9 | fn g |
|
||||
| main.rs:223:5:223:6 | m1 | main.rs:13:1:37:1 | mod m1 |
|
||||
| main.rs:223:5:223:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 |
|
||||
| main.rs:223:5:223:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 |
|
||||
| main.rs:223:5:223:17 | ...::h | main.rs:30:27:34:13 | fn h |
|
||||
| main.rs:224:5:224:6 | m4 | main.rs:39:1:46:1 | mod m4 |
|
||||
| main.rs:224:5:224:9 | ...::i | main.rs:42:5:45:5 | fn i |
|
||||
| main.rs:225:5:225:5 | h | main.rs:50:1:69:1 | fn h |
|
||||
| main.rs:226:5:226:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f |
|
||||
| main.rs:227:5:227:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g |
|
||||
| main.rs:228:5:228:5 | j | main.rs:97:1:101:1 | fn j |
|
||||
| main.rs:229:5:229:6 | m6 | main.rs:109:1:120:1 | mod m6 |
|
||||
| main.rs:229:5:229:9 | ...::g | main.rs:114:5:119:5 | fn g |
|
||||
| main.rs:230:5:230:6 | m7 | main.rs:122:1:137:1 | mod m7 |
|
||||
| main.rs:230:5:230:9 | ...::f | main.rs:129:5:136:5 | fn f |
|
||||
| main.rs:231:5:231:6 | m8 | main.rs:139:1:182:1 | mod m8 |
|
||||
| main.rs:231:5:231:9 | ...::g | main.rs:169:5:181:5 | fn g |
|
||||
| main.rs:232:5:232:6 | m9 | main.rs:184:1:192:1 | mod m9 |
|
||||
| main.rs:232:5:232:9 | ...::f | main.rs:187:5:191:5 | fn f |
|
||||
| my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
|
||||
| my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
|
||||
| my2/mod.rs:5:5:5:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
|
||||
|
||||
@@ -423,127 +423,6 @@ firstRead
|
||||
| main.rs:594:9:594:25 | var_in_macro | main.rs:594:9:594:25 | var_in_macro | main.rs:594:9:594:25 | var_in_macro |
|
||||
| main.rs:596:9:596:20 | var_in_macro | main.rs:596:9:596:20 | var_in_macro | main.rs:601:15:601:26 | var_in_macro |
|
||||
| main.rs:600:15:600:42 | var_in_macro | main.rs:600:15:600:42 | var_in_macro | main.rs:600:30:600:41 | var_in_macro |
|
||||
lastRead
|
||||
| main.rs:3:14:3:14 | s | main.rs:3:14:3:14 | s | main.rs:4:20:4:20 | s |
|
||||
| main.rs:7:14:7:14 | i | main.rs:7:14:7:14 | i | main.rs:8:20:8:20 | i |
|
||||
| main.rs:11:18:11:18 | i | main.rs:11:18:11:18 | i | main.rs:12:16:12:16 | i |
|
||||
| main.rs:16:9:16:10 | x1 | main.rs:16:9:16:10 | x1 | main.rs:17:15:17:16 | x1 |
|
||||
| main.rs:21:9:21:14 | x2 | main.rs:21:13:21:14 | x2 | main.rs:22:15:22:16 | x2 |
|
||||
| main.rs:23:5:23:6 | x2 | main.rs:21:13:21:14 | x2 | main.rs:24:15:24:16 | x2 |
|
||||
| main.rs:28:9:28:13 | x | main.rs:28:13:28:13 | x | main.rs:29:20:29:20 | x |
|
||||
| main.rs:30:5:30:5 | x | main.rs:28:13:28:13 | x | main.rs:31:20:31:20 | x |
|
||||
| main.rs:35:9:35:10 | x3 | main.rs:35:9:35:10 | x3 | main.rs:38:9:38:10 | x3 |
|
||||
| main.rs:37:9:37:10 | x3 | main.rs:37:9:37:10 | x3 | main.rs:39:15:39:16 | x3 |
|
||||
| main.rs:43:9:43:10 | x4 | main.rs:43:9:43:10 | x4 | main.rs:49:15:49:16 | x4 |
|
||||
| main.rs:46:13:46:14 | x4 | main.rs:46:13:46:14 | x4 | main.rs:47:19:47:20 | x4 |
|
||||
| main.rs:60:13:60:14 | a1 | main.rs:60:13:60:14 | a1 | main.rs:68:15:68:16 | a1 |
|
||||
| main.rs:61:13:61:14 | b1 | main.rs:61:13:61:14 | b1 | main.rs:69:15:69:16 | b1 |
|
||||
| main.rs:64:13:64:13 | x | main.rs:64:13:64:13 | x | main.rs:70:15:70:15 | x |
|
||||
| main.rs:65:13:65:13 | y | main.rs:65:13:65:13 | y | main.rs:71:15:71:15 | y |
|
||||
| main.rs:75:9:75:10 | p1 | main.rs:75:9:75:10 | p1 | main.rs:79:9:79:10 | p1 |
|
||||
| main.rs:77:12:77:13 | a2 | main.rs:77:12:77:13 | a2 | main.rs:80:15:80:16 | a2 |
|
||||
| main.rs:78:12:78:13 | b2 | main.rs:78:12:78:13 | b2 | main.rs:81:15:81:16 | b2 |
|
||||
| main.rs:85:9:85:10 | s1 | main.rs:85:9:85:10 | s1 | main.rs:88:11:88:12 | s1 |
|
||||
| main.rs:87:17:87:22 | s2 | main.rs:87:21:87:22 | s2 | main.rs:89:19:89:20 | s2 |
|
||||
| main.rs:94:14:94:15 | x5 | main.rs:94:14:94:15 | x5 | main.rs:98:15:98:16 | x5 |
|
||||
| main.rs:102:9:102:10 | s1 | main.rs:102:9:102:10 | s1 | main.rs:105:11:105:12 | s1 |
|
||||
| main.rs:104:20:104:25 | s2 | main.rs:104:24:104:25 | s2 | main.rs:106:19:106:20 | s2 |
|
||||
| main.rs:111:9:111:10 | x6 | main.rs:111:9:111:10 | x6 | main.rs:114:11:114:12 | x6 |
|
||||
| main.rs:112:9:112:10 | y1 | main.rs:112:9:112:10 | y1 | main.rs:124:15:124:16 | y1 |
|
||||
| main.rs:116:14:116:15 | y1 | main.rs:116:14:116:15 | y1 | main.rs:119:23:119:24 | y1 |
|
||||
| main.rs:128:9:128:15 | numbers | main.rs:128:9:128:15 | numbers | main.rs:142:11:142:17 | numbers |
|
||||
| main.rs:132:13:132:17 | first | main.rs:132:13:132:17 | first | main.rs:136:23:136:27 | first |
|
||||
| main.rs:133:13:133:17 | third | main.rs:133:13:133:17 | third | main.rs:137:23:137:27 | third |
|
||||
| main.rs:134:13:134:17 | fifth | main.rs:134:13:134:17 | fifth | main.rs:138:23:138:27 | fifth |
|
||||
| main.rs:144:13:144:17 | first | main.rs:144:13:144:17 | first | main.rs:148:23:148:27 | first |
|
||||
| main.rs:146:13:146:16 | last | main.rs:146:13:146:16 | last | main.rs:149:23:149:26 | last |
|
||||
| main.rs:155:9:155:10 | p2 | main.rs:155:9:155:10 | p2 | main.rs:157:11:157:12 | p2 |
|
||||
| main.rs:159:16:159:17 | x7 | main.rs:159:16:159:17 | x7 | main.rs:160:24:160:25 | x7 |
|
||||
| main.rs:169:9:169:11 | msg | main.rs:169:9:169:11 | msg | main.rs:171:11:171:13 | msg |
|
||||
| main.rs:173:17:173:35 | [match(true)] id_variable | main.rs:173:17:173:27 | id_variable | main.rs:174:24:174:34 | id_variable |
|
||||
| main.rs:178:26:178:27 | id | main.rs:178:26:178:27 | id | main.rs:179:23:179:24 | id |
|
||||
| main.rs:189:9:189:14 | either | main.rs:189:9:189:14 | either | main.rs:190:11:190:16 | either |
|
||||
| main.rs:191:9:191:44 | [match(true)] phi | main.rs:191:9:191:44 | a3 | main.rs:192:26:192:27 | a3 |
|
||||
| main.rs:203:9:203:10 | tv | main.rs:203:9:203:10 | tv | main.rs:212:11:212:12 | tv |
|
||||
| main.rs:205:9:205:81 | [match(true)] phi | main.rs:205:9:205:81 | a4 | main.rs:206:26:206:27 | a4 |
|
||||
| main.rs:209:9:209:83 | [match(true)] phi | main.rs:209:9:209:83 | a5 | main.rs:210:26:210:27 | a5 |
|
||||
| main.rs:213:9:213:83 | [match(true)] phi | main.rs:213:9:213:83 | a6 | main.rs:214:26:214:27 | a6 |
|
||||
| main.rs:219:9:219:14 | either | main.rs:219:9:219:14 | either | main.rs:220:11:220:16 | either |
|
||||
| main.rs:221:9:221:44 | [match(true)] phi | main.rs:221:9:221:44 | a7 | main.rs:222:16:222:17 | a7 |
|
||||
| main.rs:221:9:221:44 | [match(true)] phi | main.rs:221:9:221:44 | a7 | main.rs:223:26:223:27 | a7 |
|
||||
| main.rs:229:9:229:14 | either | main.rs:229:9:229:14 | either | main.rs:231:11:231:16 | either |
|
||||
| main.rs:232:9:233:52 | [match(true)] e | main.rs:232:13:232:13 | e | main.rs:237:15:237:15 | e |
|
||||
| main.rs:233:14:233:51 | [match(true)] phi | main.rs:233:14:233:51 | a11 | main.rs:235:23:235:25 | a11 |
|
||||
| main.rs:236:33:236:35 | a12 | main.rs:236:33:236:35 | a12 | main.rs:238:28:238:30 | a12 |
|
||||
| main.rs:253:9:253:10 | fv | main.rs:253:9:253:10 | fv | main.rs:254:11:254:12 | fv |
|
||||
| main.rs:255:9:255:109 | [match(true)] phi | main.rs:255:9:255:109 | a13 | main.rs:256:26:256:28 | a13 |
|
||||
| main.rs:261:5:261:6 | a8 | main.rs:261:5:261:6 | a8 | main.rs:266:15:266:16 | a8 |
|
||||
| main.rs:263:9:263:10 | b3 | main.rs:263:9:263:10 | b3 | main.rs:267:15:267:16 | b3 |
|
||||
| main.rs:264:9:264:10 | c1 | main.rs:264:9:264:10 | c1 | main.rs:268:15:268:16 | c1 |
|
||||
| main.rs:272:6:272:41 | [match(true)] phi | main.rs:272:6:272:41 | a9 | main.rs:274:15:274:16 | a9 |
|
||||
| main.rs:279:9:279:15 | a10 | main.rs:279:13:279:15 | a10 | main.rs:283:15:283:17 | a10 |
|
||||
| main.rs:280:9:280:14 | b4 | main.rs:280:13:280:14 | b4 | main.rs:284:15:284:16 | b4 |
|
||||
| main.rs:281:9:281:14 | c2 | main.rs:281:13:281:14 | c2 | main.rs:285:15:285:16 | c2 |
|
||||
| main.rs:288:9:288:10 | c2 | main.rs:281:13:281:14 | c2 | main.rs:298:15:298:16 | c2 |
|
||||
| main.rs:289:9:289:10 | b4 | main.rs:280:13:280:14 | b4 | main.rs:311:15:311:16 | b4 |
|
||||
| main.rs:290:9:290:11 | a10 | main.rs:279:13:279:15 | a10 | main.rs:310:15:310:17 | a10 |
|
||||
| main.rs:302:13:302:15 | a10 | main.rs:302:13:302:15 | a10 | main.rs:305:23:305:25 | a10 |
|
||||
| main.rs:303:13:303:14 | b4 | main.rs:303:13:303:14 | b4 | main.rs:306:23:306:24 | b4 |
|
||||
| main.rs:315:9:315:23 | example_closure | main.rs:315:9:315:23 | example_closure | main.rs:319:9:319:23 | example_closure |
|
||||
| main.rs:316:10:316:10 | x | main.rs:316:10:316:10 | x | main.rs:317:9:317:9 | x |
|
||||
| main.rs:318:9:318:10 | n1 | main.rs:318:9:318:10 | n1 | main.rs:320:15:320:16 | n1 |
|
||||
| main.rs:323:9:323:26 | immutable_variable | main.rs:323:9:323:26 | immutable_variable | main.rs:327:9:327:26 | immutable_variable |
|
||||
| main.rs:324:10:324:10 | x | main.rs:324:10:324:10 | x | main.rs:325:9:325:9 | x |
|
||||
| main.rs:326:9:326:10 | n2 | main.rs:326:9:326:10 | n2 | main.rs:328:15:328:16 | n2 |
|
||||
| main.rs:333:9:333:9 | f | main.rs:333:9:333:9 | f | main.rs:342:15:342:15 | f |
|
||||
| main.rs:334:10:334:10 | x | main.rs:334:10:334:10 | x | main.rs:335:9:335:9 | x |
|
||||
| main.rs:338:10:338:10 | x | main.rs:338:10:338:10 | x | main.rs:339:9:339:9 | x |
|
||||
| main.rs:346:14:346:14 | x | main.rs:346:14:346:14 | x | main.rs:347:17:347:17 | x |
|
||||
| main.rs:354:13:354:13 | f | main.rs:354:13:354:13 | f | main.rs:357:19:357:19 | f |
|
||||
| main.rs:355:14:355:14 | x | main.rs:355:14:355:14 | x | main.rs:356:13:356:13 | x |
|
||||
| main.rs:362:9:362:9 | v | main.rs:362:9:362:9 | v | main.rs:365:12:365:12 | v |
|
||||
| main.rs:364:9:364:12 | text | main.rs:364:9:364:12 | text | main.rs:366:19:366:22 | text |
|
||||
| main.rs:380:9:380:13 | ref_i | main.rs:380:9:380:13 | ref_i | main.rs:382:6:382:10 | ref_i |
|
||||
| main.rs:386:17:386:17 | x | main.rs:386:17:386:17 | x | main.rs:390:12:390:12 | x |
|
||||
| main.rs:393:22:393:22 | x | main.rs:393:22:393:22 | x | main.rs:398:9:398:9 | x |
|
||||
| main.rs:393:39:393:39 | y | main.rs:393:39:393:39 | y | main.rs:397:6:397:6 | y |
|
||||
| main.rs:403:9:403:9 | y | main.rs:403:9:403:9 | y | main.rs:405:6:405:6 | y |
|
||||
| main.rs:410:9:410:9 | w | main.rs:410:9:410:9 | w | main.rs:416:7:416:7 | w |
|
||||
| main.rs:423:9:423:9 | y | main.rs:423:9:423:9 | y | main.rs:425:6:425:6 | y |
|
||||
| main.rs:430:9:430:9 | x | main.rs:430:9:430:9 | x | main.rs:436:15:436:15 | x |
|
||||
| main.rs:432:9:432:11 | cap | main.rs:432:9:432:11 | cap | main.rs:435:5:435:7 | cap |
|
||||
| main.rs:432:15:434:5 | <captured entry> x | main.rs:430:9:430:9 | x | main.rs:433:19:433:19 | x |
|
||||
| main.rs:440:9:440:13 | x | main.rs:440:13:440:13 | x | main.rs:446:15:446:15 | x |
|
||||
| main.rs:442:9:442:16 | closure1 | main.rs:442:9:442:16 | closure1 | main.rs:445:5:445:12 | closure1 |
|
||||
| main.rs:442:20:444:5 | <captured entry> x | main.rs:440:13:440:13 | x | main.rs:443:19:443:19 | x |
|
||||
| main.rs:450:9:450:20 | closure2 | main.rs:450:13:450:20 | closure2 | main.rs:453:5:453:12 | closure2 |
|
||||
| main.rs:453:5:453:14 | <captured exit> y | main.rs:448:13:448:13 | y | main.rs:454:15:454:15 | y |
|
||||
| main.rs:458:9:458:20 | closure3 | main.rs:458:13:458:20 | closure3 | main.rs:461:5:461:12 | closure3 |
|
||||
| main.rs:467:9:467:13 | block | main.rs:467:9:467:13 | block | main.rs:471:5:471:9 | block |
|
||||
| main.rs:471:5:471:15 | <captured exit> i | main.rs:466:13:466:13 | i | main.rs:472:15:472:15 | i |
|
||||
| main.rs:475:8:475:8 | b | main.rs:475:8:475:8 | b | main.rs:479:8:479:8 | b |
|
||||
| main.rs:476:9:476:13 | x | main.rs:476:13:476:13 | x | main.rs:478:15:478:15 | x |
|
||||
| main.rs:479:5:487:5 | phi | main.rs:476:13:476:13 | x | main.rs:488:15:488:15 | x |
|
||||
| main.rs:480:9:480:9 | x | main.rs:476:13:476:13 | x | main.rs:482:19:482:19 | x |
|
||||
| main.rs:484:9:484:9 | x | main.rs:476:13:476:13 | x | main.rs:486:19:486:19 | x |
|
||||
| main.rs:491:13:491:14 | b1 | main.rs:491:13:491:14 | b1 | main.rs:493:8:493:9 | b1 |
|
||||
| main.rs:491:24:491:25 | b2 | main.rs:491:24:491:25 | b2 | main.rs:499:8:499:9 | b2 |
|
||||
| main.rs:492:9:492:9 | x | main.rs:492:9:492:9 | x | main.rs:500:19:500:19 | x |
|
||||
| main.rs:492:9:492:9 | x | main.rs:492:9:492:9 | x | main.rs:502:19:502:19 | x |
|
||||
| main.rs:512:15:512:23 | SelfParam | main.rs:512:20:512:23 | self | main.rs:513:16:513:19 | self |
|
||||
| main.rs:516:11:516:14 | SelfParam | main.rs:516:11:516:14 | self | main.rs:517:9:517:12 | self |
|
||||
| main.rs:521:13:521:17 | f | main.rs:521:17:521:17 | f | main.rs:526:9:526:9 | f |
|
||||
| main.rs:521:21:524:9 | <captured entry> self | main.rs:520:23:520:26 | self | main.rs:523:13:523:16 | self |
|
||||
| main.rs:521:22:521:22 | n | main.rs:521:22:521:22 | n | main.rs:523:25:523:25 | n |
|
||||
| main.rs:540:9:540:13 | a | main.rs:540:13:540:13 | a | main.rs:543:15:543:15 | a |
|
||||
| main.rs:544:5:544:5 | a | main.rs:540:13:540:13 | a | main.rs:545:15:545:15 | a |
|
||||
| main.rs:549:9:549:9 | x | main.rs:549:9:549:9 | x | main.rs:551:15:551:15 | x |
|
||||
| main.rs:553:9:553:9 | z | main.rs:553:9:553:9 | z | main.rs:554:20:554:20 | z |
|
||||
| main.rs:562:10:562:18 | SelfParam | main.rs:562:15:562:18 | self | main.rs:563:6:563:9 | self |
|
||||
| main.rs:593:9:593:22 | var_from_macro | main.rs:593:9:593:22 | var_from_macro | main.rs:595:15:595:28 | var_from_macro |
|
||||
| main.rs:594:9:594:25 | var_in_macro | main.rs:594:9:594:25 | var_in_macro | main.rs:594:9:594:25 | var_in_macro |
|
||||
| main.rs:596:9:596:20 | var_in_macro | main.rs:596:9:596:20 | var_in_macro | main.rs:601:15:601:26 | var_in_macro |
|
||||
| main.rs:600:15:600:42 | var_in_macro | main.rs:600:15:600:42 | var_in_macro | main.rs:600:30:600:41 | var_in_macro |
|
||||
adjacentReads
|
||||
| main.rs:35:9:35:10 | x3 | main.rs:35:9:35:10 | x3 | main.rs:36:15:36:16 | x3 | main.rs:38:9:38:10 | x3 |
|
||||
| main.rs:43:9:43:10 | x4 | main.rs:43:9:43:10 | x4 | main.rs:44:15:44:16 | x4 | main.rs:49:15:49:16 | x4 |
|
||||
|
||||
@@ -17,10 +17,6 @@ query predicate firstRead(Ssa::Definition def, Variable v, CfgNode read) {
|
||||
def.getSourceVariable() = v and read = def.getAFirstRead()
|
||||
}
|
||||
|
||||
query predicate lastRead(Ssa::Definition def, Variable v, CfgNode read) {
|
||||
def.getSourceVariable() = v and read = def.getALastRead()
|
||||
}
|
||||
|
||||
query predicate adjacentReads(Ssa::Definition def, Variable v, CfgNode read1, CfgNode read2) {
|
||||
def.getSourceVariable() = v and
|
||||
def.hasAdjacentReads(read1, read2)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
| Macro calls - resolved | 8 |
|
||||
| Macro calls - total | 9 |
|
||||
| Macro calls - unresolved | 1 |
|
||||
| Taint edges - number of edges | 3 |
|
||||
| Taint edges - number of edges | 4 |
|
||||
| Taint reach - nodes tainted | 0 |
|
||||
| Taint reach - per million nodes | 0 |
|
||||
| Taint sinks - cryptographic operations | 0 |
|
||||
|
||||
512
rust/ql/test/utils-tests/modelgenerator/option.rs
Normal file
512
rust/ql/test/utils-tests/modelgenerator/option.rs
Normal file
@@ -0,0 +1,512 @@
|
||||
// This code below is adapted from the `Option` implementation in the Rust core library which is
|
||||
// released under the MIT licenses with the following copyright notice:
|
||||
//
|
||||
// Copyright (c) The Rust Project Contributors
|
||||
|
||||
use core::ops::{Deref, DerefMut};
|
||||
use core::pin::Pin;
|
||||
use core::{hint, mem};
|
||||
|
||||
#[derive(Copy, Eq, Debug, Hash)]
|
||||
pub enum MyOption<T> {
|
||||
MyNone,
|
||||
MySome(T),
|
||||
}
|
||||
|
||||
use MyOption::*;
|
||||
|
||||
// Type implementation
|
||||
|
||||
impl<T> MyOption<T> {
|
||||
pub fn is_some(&self) -> bool {
|
||||
matches!(*self, MySome(_))
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::is_some_and;Argument[0].ReturnValue;ReturnValue;value;dfc-generated
|
||||
// summary=repo::test;<crate::option::MyOption>::is_some_and;Argument[self].Variant[crate::option::MyOption::MySome(0)];Argument[0].Parameter[0];value;dfc-generated
|
||||
pub fn is_some_and(self, f: impl FnOnce(T) -> bool) -> bool {
|
||||
match self {
|
||||
MyNone => false,
|
||||
MySome(x) => f(x),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn is_none(&self) -> bool {
|
||||
!self.is_some()
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::is_none_or;Argument[0].ReturnValue;ReturnValue;value;dfc-generated
|
||||
// summary=repo::test;<crate::option::MyOption>::is_none_or;Argument[self].Variant[crate::option::MyOption::MySome(0)];Argument[0].Parameter[0];value;dfc-generated
|
||||
pub fn is_none_or(self, f: impl FnOnce(T) -> bool) -> bool {
|
||||
match self {
|
||||
MyNone => true,
|
||||
MySome(x) => f(x),
|
||||
}
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::as_ref;Argument[self].Variant[crate::option::MyOption::MySome(0)];ReturnValue.Variant[crate::option::MyOption::MySome(0)];value;dfc-generated
|
||||
pub fn as_ref(&self) -> MyOption<&T> {
|
||||
match *self {
|
||||
MySome(ref x) => MySome(x),
|
||||
MyNone => MyNone,
|
||||
}
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::as_mut;Argument[self].Variant[crate::option::MyOption::MySome(0)];ReturnValue.Variant[crate::option::MyOption::MySome(0)];value;dfc-generated
|
||||
pub fn as_mut(&mut self) -> MyOption<&mut T> {
|
||||
match *self {
|
||||
MySome(ref mut x) => MySome(x),
|
||||
MyNone => MyNone,
|
||||
}
|
||||
}
|
||||
|
||||
// MISSING: Flow through `Pin`
|
||||
pub fn as_pin_ref(self: Pin<&Self>) -> MyOption<Pin<&T>> {
|
||||
// FIXME(const-hack): use `map` once that is possible
|
||||
match Pin::get_ref(self).as_ref() {
|
||||
// SAFETY: `x` is guaranteed to be pinned because it comes from `self`
|
||||
// which is pinned.
|
||||
MySome(x) => unsafe { MySome(Pin::new_unchecked(x)) },
|
||||
MyNone => MyNone,
|
||||
}
|
||||
}
|
||||
|
||||
// MISSING: Flow through `Pin`
|
||||
pub fn as_pin_mut(self: Pin<&mut Self>) -> MyOption<Pin<&mut T>> {
|
||||
// SAFETY: `get_unchecked_mut` is never used to move the `MyOption` inside `self`.
|
||||
// `x` is guaranteed to be pinned because it comes from `self` which is pinned.
|
||||
unsafe {
|
||||
// FIXME(const-hack): use `map` once that is possible
|
||||
match Pin::get_unchecked_mut(self).as_mut() {
|
||||
MySome(x) => MySome(Pin::new_unchecked(x)),
|
||||
MyNone => MyNone,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::unwrap;Argument[self].Variant[crate::option::MyOption::MySome(0)];ReturnValue;value;dfc-generated
|
||||
pub fn unwrap(self) -> T {
|
||||
match self {
|
||||
MySome(val) => val,
|
||||
MyNone => panic!("called `MyOption::unwrap()` on a `MyNone` value"),
|
||||
}
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::unwrap_or;Argument[0];ReturnValue;value;dfc-generated
|
||||
// summary=repo::test;<crate::option::MyOption>::unwrap_or;Argument[self].Variant[crate::option::MyOption::MySome(0)];ReturnValue;value;dfc-generated
|
||||
pub fn unwrap_or(self, default: T) -> T {
|
||||
match self {
|
||||
MySome(x) => x,
|
||||
MyNone => default,
|
||||
}
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::unwrap_or_else;Argument[self].Variant[crate::option::MyOption::MySome(0)];ReturnValue;value;dfc-generated
|
||||
// summary=repo::test;<crate::option::MyOption>::unwrap_or_else;Argument[0].ReturnValue;ReturnValue;value;dfc-generated
|
||||
pub fn unwrap_or_else<F>(self, f: F) -> T
|
||||
where
|
||||
F: FnOnce() -> T,
|
||||
{
|
||||
match self {
|
||||
MySome(x) => x,
|
||||
MyNone => f(),
|
||||
}
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::unwrap_or_default;Argument[self].Variant[crate::option::MyOption::MySome(0)];ReturnValue;value;dfc-generated
|
||||
pub fn unwrap_or_default(self) -> T
|
||||
where
|
||||
T: Default,
|
||||
{
|
||||
match self {
|
||||
MySome(x) => x,
|
||||
MyNone => T::default(),
|
||||
}
|
||||
}
|
||||
// summary=repo::test;<crate::option::MyOption>::unwrap_unchecked;Argument[self].Variant[crate::option::MyOption::MySome(0)];ReturnValue;value;dfc-generated
|
||||
#[track_caller]
|
||||
pub unsafe fn unwrap_unchecked(self) -> T {
|
||||
match self {
|
||||
MySome(val) => val,
|
||||
// SAFETY: the safety contract must be upheld by the caller.
|
||||
MyNone => unsafe { hint::unreachable_unchecked() },
|
||||
}
|
||||
}
|
||||
|
||||
// Transforming contained values
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::map;Argument[0].ReturnValue;ReturnValue.Variant[crate::option::MyOption::MySome(0)];value;dfc-generated
|
||||
// summary=repo::test;<crate::option::MyOption>::map;Argument[self].Variant[crate::option::MyOption::MySome(0)];Argument[0].Parameter[0];value;dfc-generated
|
||||
pub fn map<U, F>(self, f: F) -> MyOption<U>
|
||||
where
|
||||
F: FnOnce(T) -> U,
|
||||
{
|
||||
match self {
|
||||
MySome(x) => MySome(f(x)),
|
||||
MyNone => MyNone,
|
||||
}
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::inspect;Argument[self];ReturnValue;value;dfc-generated
|
||||
// MISSING: Due to `ref` pattern.
|
||||
pub fn inspect<F: FnOnce(&T)>(self, f: F) -> Self {
|
||||
if let MySome(ref x) = self {
|
||||
f(x);
|
||||
}
|
||||
|
||||
self
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::map_or;Argument[0];ReturnValue;value;dfc-generated
|
||||
// summary=repo::test;<crate::option::MyOption>::map_or;Argument[1].ReturnValue;ReturnValue;value;dfc-generated
|
||||
// summary=repo::test;<crate::option::MyOption>::map_or;Argument[self].Variant[crate::option::MyOption::MySome(0)];Argument[1].Parameter[0];value;dfc-generated
|
||||
pub fn map_or<U, F>(self, default: U, f: F) -> U
|
||||
where
|
||||
F: FnOnce(T) -> U,
|
||||
{
|
||||
match self {
|
||||
MySome(t) => f(t),
|
||||
MyNone => default,
|
||||
}
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::map_or_else;Argument[0].ReturnValue;ReturnValue;value;dfc-generated
|
||||
// summary=repo::test;<crate::option::MyOption>::map_or_else;Argument[1].ReturnValue;ReturnValue;value;dfc-generated
|
||||
// summary=repo::test;<crate::option::MyOption>::map_or_else;Argument[self].Variant[crate::option::MyOption::MySome(0)];Argument[1].Parameter[0];value;dfc-generated
|
||||
pub fn map_or_else<U, D, F>(self, default: D, f: F) -> U
|
||||
where
|
||||
D: FnOnce() -> U,
|
||||
F: FnOnce(T) -> U,
|
||||
{
|
||||
match self {
|
||||
MySome(t) => f(t),
|
||||
MyNone => default(),
|
||||
}
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::ok_or;Argument[self].Variant[crate::option::MyOption::MySome(0)];ReturnValue.Variant[crate::result::Result::Ok(0)];value;dfc-generated
|
||||
// summary=repo::test;<crate::option::MyOption>::ok_or;Argument[0];ReturnValue.Variant[crate::result::Result::Err(0)];value;dfc-generated
|
||||
pub fn ok_or<E>(self, err: E) -> Result<T, E> {
|
||||
match self {
|
||||
MySome(v) => Ok(v),
|
||||
MyNone => Err(err),
|
||||
}
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::ok_or_else;Argument[self].Variant[crate::option::MyOption::MySome(0)];ReturnValue.Variant[crate::result::Result::Ok(0)];value;dfc-generated
|
||||
// summary=repo::test;<crate::option::MyOption>::ok_or_else;Argument[0].ReturnValue;ReturnValue.Variant[crate::result::Result::Err(0)];value;dfc-generated
|
||||
pub fn ok_or_else<E, F>(self, err: F) -> Result<T, E>
|
||||
where
|
||||
F: FnOnce() -> E,
|
||||
{
|
||||
match self {
|
||||
MySome(v) => Ok(v),
|
||||
MyNone => Err(err()),
|
||||
}
|
||||
}
|
||||
|
||||
// MISSING: `Deref` trait
|
||||
pub fn as_deref(&self) -> MyOption<&T::Target>
|
||||
where
|
||||
T: Deref,
|
||||
{
|
||||
self.as_ref().map(|t| t.deref())
|
||||
}
|
||||
|
||||
// MISSING: `Deref` trait
|
||||
pub fn as_deref_mut(&mut self) -> MyOption<&mut T::Target>
|
||||
where
|
||||
T: DerefMut,
|
||||
{
|
||||
self.as_mut().map(|t| t.deref_mut())
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::and;Argument[0];ReturnValue;value;dfc-generated
|
||||
pub fn and<U>(self, optb: MyOption<U>) -> MyOption<U> {
|
||||
match self {
|
||||
MySome(_) => optb,
|
||||
MyNone => MyNone,
|
||||
}
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::and_then;Argument[0].ReturnValue;ReturnValue;value;dfc-generated
|
||||
// summary=repo::test;<crate::option::MyOption>::and_then;Argument[self].Variant[crate::option::MyOption::MySome(0)];Argument[0].Parameter[0];value;dfc-generated
|
||||
pub fn and_then<U, F>(self, f: F) -> MyOption<U>
|
||||
where
|
||||
F: FnOnce(T) -> MyOption<U>,
|
||||
{
|
||||
match self {
|
||||
MySome(x) => f(x),
|
||||
MyNone => MyNone,
|
||||
}
|
||||
}
|
||||
|
||||
// MISSING: Reference passed to predicate
|
||||
pub fn filter<P>(self, predicate: P) -> Self
|
||||
where
|
||||
P: FnOnce(&T) -> bool,
|
||||
{
|
||||
if let MySome(x) = self {
|
||||
if predicate(&x) {
|
||||
return MySome(x);
|
||||
}
|
||||
}
|
||||
MyNone
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::or;Argument[0];ReturnValue;value;dfc-generated
|
||||
// summary=repo::test;<crate::option::MyOption>::or;Argument[self];ReturnValue;value;dfc-generated
|
||||
pub fn or(self, optb: MyOption<T>) -> MyOption<T> {
|
||||
match self {
|
||||
x @ MySome(_) => x,
|
||||
MyNone => optb,
|
||||
}
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::or_else;Argument[self];ReturnValue;value;dfc-generated
|
||||
// summary=repo::test;<crate::option::MyOption>::or_else;Argument[0].ReturnValue;ReturnValue;value;dfc-generated
|
||||
pub fn or_else<F>(self, f: F) -> MyOption<T>
|
||||
where
|
||||
F: FnOnce() -> MyOption<T>,
|
||||
{
|
||||
match self {
|
||||
x @ MySome(_) => x,
|
||||
MyNone => f(),
|
||||
}
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::xor;Argument[0];ReturnValue;value;dfc-generated
|
||||
// summary=repo::test;<crate::option::MyOption>::xor;Argument[self];ReturnValue;value;dfc-generated
|
||||
pub fn xor(self, optb: MyOption<T>) -> MyOption<T> {
|
||||
match (self, optb) {
|
||||
(a @ MySome(_), MyNone) => a,
|
||||
(MyNone, b @ MySome(_)) => b,
|
||||
_ => MyNone,
|
||||
}
|
||||
}
|
||||
|
||||
// MISSING: summary=repo::test;<crate::option::MyOption>::insert;Argument[0];ReturnValue;value;dfc-generated
|
||||
// SPURIOUS-summary=repo::test;<crate::option::MyOption>::insert;Argument[self].Variant[crate::option::MyOption::MySome(0)];ReturnValue;value;dfc-generated
|
||||
pub fn insert(&mut self, value: T) -> &mut T {
|
||||
*self = MySome(value);
|
||||
|
||||
// SAFETY: the code above just filled the MyOption
|
||||
unsafe { self.as_mut().unwrap_unchecked() }
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::get_or_insert;Argument[self].Variant[crate::option::MyOption::MySome(0)];ReturnValue;value;dfc-generated
|
||||
// MISSING: repo::test;<crate::option::MyOption>::get_or_insert;Argument[0];ReturnValue;value;dfc-generated
|
||||
pub fn get_or_insert(&mut self, value: T) -> &mut T {
|
||||
self.get_or_insert_with(|| value)
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::get_or_insert_default;Argument[self].Variant[crate::option::MyOption::MySome(0)];ReturnValue;value;dfc-generated
|
||||
pub fn get_or_insert_default(&mut self) -> &mut T
|
||||
where
|
||||
T: Default,
|
||||
{
|
||||
self.get_or_insert_with(T::default)
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::get_or_insert_with;Argument[self].Variant[crate::option::MyOption::MySome(0)];ReturnValue;value;dfc-generated
|
||||
// MISSING: Mutating `self` parameter.
|
||||
pub fn get_or_insert_with<F>(&mut self, f: F) -> &mut T
|
||||
where
|
||||
F: FnOnce() -> T,
|
||||
{
|
||||
if let MyNone = self {
|
||||
*self = MySome(f());
|
||||
}
|
||||
|
||||
// SAFETY: a `MyNone` variant for `self` would have been replaced by a `MySome`
|
||||
// variant in the code above.
|
||||
unsafe { self.as_mut().unwrap_unchecked() }
|
||||
}
|
||||
|
||||
// MISSING: Uses `mem::replace`
|
||||
pub fn take(&mut self) -> MyOption<T> {
|
||||
// FIXME(const-hack) replace `mem::replace` by `mem::take` when the latter is const ready
|
||||
mem::replace(self, MyNone)
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::take_if;Argument[self].Variant[crate::option::MyOption::MySome(0)];Argument[0].Parameter[0];value;dfc-generated
|
||||
// MISSING: Uses `take` which doesn't have flow
|
||||
pub fn take_if<P>(&mut self, predicate: P) -> MyOption<T>
|
||||
where
|
||||
P: FnOnce(&mut T) -> bool,
|
||||
{
|
||||
if self.as_mut().map_or(false, predicate) { self.take() } else { MyNone }
|
||||
}
|
||||
|
||||
// MISSING: Uses `mem::replace`
|
||||
pub fn replace(&mut self, value: T) -> MyOption<T> {
|
||||
mem::replace(self, MySome(value))
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::zip;Argument[0].Variant[crate::option::MyOption::MySome(0)];ReturnValue.Variant[crate::option::MyOption::MySome(0)].Tuple[1];value;dfc-generated
|
||||
// summary=repo::test;<crate::option::MyOption>::zip;Argument[self].Variant[crate::option::MyOption::MySome(0)];ReturnValue.Variant[crate::option::MyOption::MySome(0)].Tuple[0];value;dfc-generated
|
||||
pub fn zip<U>(self, other: MyOption<U>) -> MyOption<(T, U)> {
|
||||
match (self, other) {
|
||||
(MySome(a), MySome(b)) => MySome((a, b)),
|
||||
_ => MyNone,
|
||||
}
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::zip_with;Argument[self].Variant[crate::option::MyOption::MySome(0)];Argument[1].Parameter[0];value;dfc-generated
|
||||
// summary=repo::test;<crate::option::MyOption>::zip_with;Argument[0].Variant[crate::option::MyOption::MySome(0)];Argument[1].Parameter[1];value;dfc-generated
|
||||
// summary=repo::test;<crate::option::MyOption>::zip_with;Argument[1].ReturnValue;ReturnValue.Variant[crate::option::MyOption::MySome(0)];value;dfc-generated
|
||||
pub fn zip_with<U, F, R>(self, other: MyOption<U>, f: F) -> MyOption<R>
|
||||
where
|
||||
F: FnOnce(T, U) -> R,
|
||||
{
|
||||
match (self, other) {
|
||||
(MySome(a), MySome(b)) => MySome(f(a, b)),
|
||||
_ => MyNone,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T, U> MyOption<(T, U)> {
|
||||
// summary=repo::test;<crate::option::MyOption>::unzip;Argument[self].Variant[crate::option::MyOption::MySome(0)].Tuple[0];ReturnValue.Tuple[0].Variant[crate::option::MyOption::MySome(0)];value;dfc-generated
|
||||
// summary=repo::test;<crate::option::MyOption>::unzip;Argument[self].Variant[crate::option::MyOption::MySome(0)].Tuple[1];ReturnValue.Tuple[1].Variant[crate::option::MyOption::MySome(0)];value;dfc-generated
|
||||
pub fn unzip(self) -> (MyOption<T>, MyOption<U>) {
|
||||
match self {
|
||||
MySome((a, b)) => (MySome(a), MySome(b)),
|
||||
MyNone => (MyNone, MyNone),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> MyOption<&T> {
|
||||
// summary=repo::test;<crate::option::MyOption>::copied;Argument[self].Variant[crate::option::MyOption::MySome(0)];ReturnValue.Variant[crate::option::MyOption::MySome(0)];value;dfc-generated
|
||||
pub fn copied(self) -> MyOption<T>
|
||||
where
|
||||
T: Copy,
|
||||
{
|
||||
// FIXME(const-hack): this implementation, which sidesteps using `MyOption::map` since it's not const
|
||||
// ready yet, should be reverted when possible to avoid code repetition
|
||||
match self {
|
||||
MySome(&v) => MySome(v),
|
||||
MyNone => MyNone,
|
||||
}
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::cloned;Argument[self].Variant[crate::option::MyOption::MySome(0)];ReturnValue.Variant[crate::option::MyOption::MySome(0)];value;dfc-generated
|
||||
pub fn cloned(self) -> MyOption<T>
|
||||
where
|
||||
T: Clone,
|
||||
{
|
||||
match self {
|
||||
MySome(t) => MySome(t.clone()),
|
||||
MyNone => MyNone,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> MyOption<&mut T> {
|
||||
// summary=repo::test;<crate::option::MyOption>::copied;Argument[self].Variant[crate::option::MyOption::MySome(0)];ReturnValue.Variant[crate::option::MyOption::MySome(0)];value;dfc-generated
|
||||
pub fn copied(self) -> MyOption<T>
|
||||
where
|
||||
T: Copy,
|
||||
{
|
||||
match self {
|
||||
MySome(&mut t) => MySome(t),
|
||||
MyNone => MyNone,
|
||||
}
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::option::MyOption>::cloned;Argument[self].Variant[crate::option::MyOption::MySome(0)];ReturnValue.Variant[crate::option::MyOption::MySome(0)];value;dfc-generated
|
||||
pub fn cloned(self) -> MyOption<T>
|
||||
where
|
||||
T: Clone,
|
||||
{
|
||||
match self {
|
||||
MySome(t) => MySome(t.clone()),
|
||||
MyNone => MyNone,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T, E> MyOption<Result<T, E>> {
|
||||
// summary=repo::test;<crate::option::MyOption>::transpose;Argument[self].Variant[crate::option::MyOption::MySome(0)].Variant[crate::result::Result::Err(0)];ReturnValue.Variant[crate::result::Result::Err(0)];value;dfc-generated
|
||||
// summary=repo::test;<crate::option::MyOption>::transpose;Argument[self].Variant[crate::option::MyOption::MySome(0)].Variant[crate::result::Result::Ok(0)];ReturnValue.Variant[crate::result::Result::Ok(0)].Variant[crate::option::MyOption::MySome(0)];value;dfc-generated
|
||||
pub fn transpose(self) -> Result<MyOption<T>, E> {
|
||||
match self {
|
||||
MySome(Ok(x)) => Ok(MySome(x)),
|
||||
MySome(Err(e)) => Err(e),
|
||||
MyNone => Ok(MyNone),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Clone for MyOption<T>
|
||||
where
|
||||
T: Clone,
|
||||
{
|
||||
// summary=repo::test;<crate::option::MyOption as crate::clone::Clone>::clone;Argument[self].Variant[crate::option::MyOption::MySome(0)];ReturnValue.Variant[crate::option::MyOption::MySome(0)];value;dfc-generated
|
||||
fn clone(&self) -> Self {
|
||||
match self {
|
||||
MySome(x) => MySome(x.clone()),
|
||||
MyNone => MyNone,
|
||||
}
|
||||
}
|
||||
|
||||
// MISSING: Flow through `clone_from` trait method which is not modeled.
|
||||
fn clone_from(&mut self, source: &Self) {
|
||||
match (self, source) {
|
||||
(MySome(to), MySome(from)) => to.clone_from(from),
|
||||
(to, from) => *to = from.clone(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Default for MyOption<T> {
|
||||
fn default() -> MyOption<T> {
|
||||
MyNone
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> From<T> for MyOption<T> {
|
||||
// summary=repo::test;<crate::option::MyOption as crate::convert::From>::from;Argument[0];ReturnValue.Variant[crate::option::MyOption::MySome(0)];value;dfc-generated
|
||||
fn from(val: T) -> MyOption<T> {
|
||||
MySome(val)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, T> From<&'a MyOption<T>> for MyOption<&'a T> {
|
||||
// summary=repo::test;<crate::option::MyOption as crate::convert::From>::from;Argument[0].Variant[crate::option::MyOption::MySome(0)];ReturnValue.Variant[crate::option::MyOption::MySome(0)];value;dfc-generated
|
||||
fn from(o: &'a MyOption<T>) -> MyOption<&'a T> {
|
||||
o.as_ref()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, T> From<&'a mut MyOption<T>> for MyOption<&'a mut T> {
|
||||
// summary=repo::test;<crate::option::MyOption as crate::convert::From>::from;Argument[0].Variant[crate::option::MyOption::MySome(0)];ReturnValue.Variant[crate::option::MyOption::MySome(0)];value;dfc-generated
|
||||
fn from(o: &'a mut MyOption<T>) -> MyOption<&'a mut T> {
|
||||
o.as_mut()
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: PartialEq> PartialEq for MyOption<T> {
|
||||
fn eq(&self, other: &Self) -> bool {
|
||||
// Spelling out the cases explicitly optimizes better than
|
||||
// `_ => false`
|
||||
match (self, other) {
|
||||
(MySome(l), MySome(r)) => *l == *r,
|
||||
(MySome(_), MyNone) => false,
|
||||
(MyNone, MySome(_)) => false,
|
||||
(MyNone, MyNone) => true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> MyOption<MyOption<T>> {
|
||||
// summary=repo::test;<crate::option::MyOption>::flatten;Argument[self].Variant[crate::option::MyOption::MySome(0)];ReturnValue;value;dfc-generated
|
||||
pub fn flatten(self) -> MyOption<T> {
|
||||
// FIXME(const-hack): could be written with `and_then`
|
||||
match self {
|
||||
MySome(inner) => inner,
|
||||
MyNone => MyNone,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -57,14 +57,14 @@ impl MyStruct {
|
||||
// summary=repo::test;<crate::summaries::MyStruct>::get_foo;Argument[self].Struct[crate::summaries::MyStruct::foo];ReturnValue;value;dfc-generated
|
||||
pub fn get_foo(self) -> i64 {
|
||||
match self {
|
||||
MyStruct { foo, bar: _ } => foo
|
||||
MyStruct { foo, bar: _ } => foo,
|
||||
}
|
||||
}
|
||||
|
||||
// summary=repo::test;<crate::summaries::MyStruct>::get_bar;Argument[self].Struct[crate::summaries::MyStruct::bar];ReturnValue;value;dfc-generated
|
||||
pub fn get_bar(self) -> f64 {
|
||||
match self {
|
||||
MyStruct { foo: _, bar } => bar
|
||||
MyStruct { foo: _, bar } => bar,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user