Merge branch 'main' into http

This commit is contained in:
Geoffrey White
2025-02-10 09:07:34 +00:00
220 changed files with 48555 additions and 47627 deletions

View File

@@ -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
@@ -582,7 +579,7 @@ lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 40ab5c592e7699c621
lib/codeql/rust/elements/internal/generated/ParentChild.qll a180b0d0c8c33503dc4c013c3f568eaa628d24204bfc36a7484c56a701a79f95 df002e5540bfe5de4e6849879f334b09c2ffb4893ff8364146c6c505f4b2d090
lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll c5fa328ea60d3a3333d7c7bb3480969c1873166c7ac8ebb9d0afad7a8099d1a8 2dbbb6200d96f7db7dea4a55bdeab8d67b14d39a43e0bd54ada019f7e466f163
lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4
lib/codeql/rust/elements/internal/generated/Path.qll bf6a86e7fcb7164624cc070dcce86d2bda50a2516b95115b87d0ebb5596e50a1 fd7a9ad4034cdebe8dfe495619c46f464630d38195313072e0bd904061b0fb00
lib/codeql/rust/elements/internal/generated/Path.qll 8e47e91aff3f8c60f1ee8cb3887b8e4936c38e4665d052f2c92a939a969aac29 2c28beb89cabd7c7c91a5bc65c874f414cb96bbefde37b25811b61089a8a0053
lib/codeql/rust/elements/internal/generated/PathAstNode.qll e6d4d5bffd3c623baaaee46bc183eb31ce88795535f164f6a9b9b4d98bbd6101 168db515404933479ba6b150c72e012d28592cbc32366aefcb1bf9599dbcd183
lib/codeql/rust/elements/internal/generated/PathExpr.qll 34ebad4d062ce8b7e517f2ab09d52745fb8455203f4a936df7284ad296638387 ba66781cdbdeb89c27a4bfb2be0f27f85fb34978d699b4e343446fb0d7ad2aa6
lib/codeql/rust/elements/internal/generated/PathExprBase.qll d8218e201b8557fa6d9ca2c30b764e5ad9a04a2e4fb695cc7219bbd7636a6ac2 4ef178426d7095a156f4f8c459b4d16f63abc64336cb50a6cf883a5f7ee09113

3
rust/ql/.gitattributes generated vendored
View File

@@ -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

View File

@@ -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 |

View File

@@ -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 |

View File

@@ -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 |

View File

@@ -4,3 +4,4 @@
private import codeql.rust.frameworks.rustcrypto.RustCrypto
private import codeql.rust.frameworks.Sqlx
private import codeql.rust.frameworks.stdlib.Clone

View File

@@ -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()
)
}
}

View File

@@ -25,8 +25,6 @@ module DataFlow {
final class Content = DataFlowImpl::Content;
final class VariantContent = DataFlowImpl::VariantContent;
final class ContentSet = DataFlowImpl::ContentSet;
/**

View File

@@ -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]

View File

@@ -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 = ""

View File

@@ -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)
)
}
}
}

View File

@@ -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 }
}
}

View File

@@ -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

View File

@@ -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()
}
}
}

View File

@@ -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)
)
}
}
}

View File

@@ -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) }
}
}

View File

@@ -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()
}
}
}

View File

@@ -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)
)
}
}
}

View File

@@ -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) }
}
}

View File

@@ -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) }
}
}

View File

@@ -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)
)
}
}
}

View File

@@ -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_
}

View File

@@ -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) }
}
}

View File

@@ -10,6 +10,8 @@ import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl
import codeql.rust.elements.Path
import codeql.rust.elements.PathSegment
private class PathAlias = Path;
/**
* INTERNAL: This module contains the fully generated definition of `Path` and should not
* be referenced directly.
@@ -30,7 +32,7 @@ module Generated {
/**
* Gets the qualifier of this path, if it exists.
*/
Path getQualifier() {
PathAlias getQualifier() {
result = Synth::convertPathFromRaw(Synth::convertPathToRaw(this).(Raw::Path).getQualifier())
}

View File

@@ -27,7 +27,7 @@ class StreamCipherInit extends Cryptography::CryptographicOperation::Range {
p.getResolvedCrateOrigin().matches("%/RustCrypto%") and
p.getPath().getText() = ["new", "new_from_slice", "new_from_slices", "new_with_eff_key_len"] and
(
rawAlgorithmName = p.getPath().getQualifier().(Path).getText() or // todo: remove infix cast when codegenerator has been fixed
rawAlgorithmName = p.getPath().getQualifier().getText() or
rawAlgorithmName =
p.getPath()
.getQualifier()

View 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
}
}

View File

@@ -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"]

View File

@@ -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"]

View File

@@ -186,7 +186,7 @@ class ModeledHashOperation extends Cryptography::CryptographicOperation::Range {
sinkNode(input, "hasher-input") and
call = input.(Node::FlowSummaryNode).getSinkElement().getCall() and
call = this.asExpr().getExpr() and
algorithmName = call.getFunction().(PathExpr).getPath().getQualifier().(Path).getText() // todo: remove infix cast when codegenerator has been fixed
algorithmName = call.getFunction().(PathExpr).getPath().getQualifier().getText()
)
}

View File

@@ -0,0 +1 @@
[]

View 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>;

View 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 */

View 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

View File

@@ -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) {

View File

@@ -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 |

View File

@@ -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 |

View File

@@ -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 |

View File

@@ -1,2 +1,2 @@
identityLocalStep
| main.rs:415:9:415:20 | phi(default_name) | Node steps to itself |
| main.rs:428:9:428:20 | phi(default_name) | Node steps to itself |

View File

@@ -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 |
@@ -178,344 +180,361 @@ localStep
| main.rs:172:10:172:10 | p | main.rs:173:10:173:10 | p | |
| main.rs:173:10:173:10 | [post] p | main.rs:174:10:174:10 | p | |
| main.rs:173:10:173:10 | p | main.rs:174:10:174:10 | p | |
| main.rs:178:9:178:9 | [SSA] p | main.rs:185:11:185:11 | p | |
| main.rs:178:9:178:9 | p | main.rs:178:9:178:9 | [SSA] p | |
| main.rs:178:13:184:5 | Point3D {...} | main.rs:178:9:178:9 | p | |
| main.rs:185:5:194:5 | match p { ... } | main.rs:177:26:195:1 | { ... } | |
| main.rs:185:11:185:11 | p | main.rs:186:9:189:9 | Point3D {...} | |
| main.rs:187:28:187:28 | [SSA] x | main.rs:190:18:190:18 | x | |
| main.rs:187:28:187:28 | x | main.rs:187:28:187:28 | [SSA] x | |
| main.rs:187:31:187:31 | [SSA] y | main.rs:191:18:191:18 | y | |
| main.rs:187:31:187:31 | y | main.rs:187:31:187:31 | [SSA] y | |
| main.rs:188:13:188:13 | [SSA] z | main.rs:192:18:192:18 | z | |
| main.rs:188:13:188:13 | z | main.rs:188:13:188:13 | [SSA] z | |
| main.rs:189:14:193:9 | { ... } | main.rs:185:5:194:5 | match p { ... } | |
| main.rs:201:9:201:10 | [SSA] s1 | main.rs:203:11:203:12 | s1 | |
| main.rs:201:9:201:10 | s1 | main.rs:201:9:201:10 | [SSA] s1 | |
| main.rs:201:14:201:37 | ...::Some(...) | main.rs:201:9:201:10 | s1 | |
| main.rs:202:9:202:10 | [SSA] s2 | main.rs:207:11:207:12 | s2 | |
| main.rs:202:9:202:10 | s2 | main.rs:202:9:202:10 | [SSA] s2 | |
| main.rs:202:14:202:28 | ...::Some(...) | main.rs:202:9:202:10 | s2 | |
| main.rs:203:11:203:12 | s1 | main.rs:204:9:204:23 | ...::Some(...) | |
| main.rs:203:11:203:12 | s1 | main.rs:205:9:205:20 | ...::None | |
| main.rs:204:22:204:22 | [SSA] n | main.rs:204:33:204:33 | n | |
| main.rs:204:22:204:22 | n | main.rs:204:22:204:22 | [SSA] n | |
| main.rs:204:28:204:34 | sink(...) | main.rs:203:5:206:5 | match s1 { ... } | |
| main.rs:205:25:205:31 | sink(...) | main.rs:203:5:206:5 | match s1 { ... } | |
| main.rs:207:5:210:5 | match s2 { ... } | main.rs:200:37:211:1 | { ... } | |
| main.rs:207:11:207:12 | s2 | main.rs:208:9:208:23 | ...::Some(...) | |
| main.rs:207:11:207:12 | s2 | main.rs:209:9:209:20 | ...::None | |
| main.rs:208:22:208:22 | [SSA] n | main.rs:208:33:208:33 | n | |
| main.rs:208:22:208:22 | n | main.rs:208:22:208:22 | [SSA] n | |
| main.rs:208:28:208:34 | sink(...) | main.rs:207:5:210:5 | match s2 { ... } | |
| main.rs:209:25:209:31 | sink(...) | main.rs:207:5:210:5 | match s2 { ... } | |
| main.rs:178:9:178:9 | [SSA] y | main.rs:180:30:180:30 | y | |
| main.rs:178:9:178:9 | y | main.rs:178:9:178:9 | [SSA] y | |
| main.rs:178:13:178:22 | source(...) | main.rs:178:9:178:9 | y | |
| main.rs:179:9:179:9 | [SSA] p | main.rs:183:11:183:11 | p | |
| main.rs:179:9:179:9 | p | main.rs:179:9:179:9 | [SSA] p | |
| main.rs:179:13:182:5 | Point3D {...} | main.rs:179:9:179:9 | p | |
| main.rs:183:5:192:5 | match p { ... } | main.rs:177:26:193:1 | { ... } | |
| main.rs:183:11:183:11 | p | main.rs:184:9:187:9 | Point3D {...} | |
| main.rs:185:28:185:28 | [SSA] x | main.rs:188:18:188:18 | x | |
| main.rs:185:28:185:28 | x | main.rs:185:28:185:28 | [SSA] x | |
| main.rs:185:31:185:31 | [SSA] y | main.rs:189:18:189:18 | y | |
| main.rs:185:31:185:31 | y | main.rs:185:31:185:31 | [SSA] y | |
| main.rs:186:13:186:13 | [SSA] z | main.rs:190:18:190:18 | z | |
| main.rs:186:13:186:13 | z | main.rs:186:13:186:13 | [SSA] z | |
| main.rs:187:14:191:9 | { ... } | main.rs:183:5:192:5 | match p { ... } | |
| main.rs:198:9:198:9 | [SSA] s | main.rs:199:10:199:10 | s | |
| main.rs:198:9:198:9 | s | main.rs:198:9:198:9 | [SSA] s | |
| main.rs:198:13:198:40 | MyTupleStruct(...) | main.rs:198:9:198:9 | s | |
| main.rs:199:10:199:10 | [post] s | main.rs:200:10:200:10 | s | |
| main.rs:199:10:199:10 | s | main.rs:200:10:200:10 | s | |
| main.rs:200:10:200:10 | [post] s | main.rs:202:11:202:11 | s | |
| main.rs:200:10:200:10 | s | main.rs:202:11:202:11 | s | |
| main.rs:202:5:207:5 | match s { ... } | main.rs:197:19:208:1 | { ... } | |
| main.rs:202:11:202:11 | s | main.rs:203:9:203:27 | MyTupleStruct(...) | |
| main.rs:203:23:203:23 | [SSA] x | main.rs:204:18:204:18 | x | |
| main.rs:203:23:203:23 | x | main.rs:203:23:203:23 | [SSA] x | |
| main.rs:203:26:203:26 | [SSA] y | main.rs:205:18:205:18 | y | |
| main.rs:203:26:203:26 | y | main.rs:203:26:203:26 | [SSA] y | |
| main.rs:203:32:206:9 | { ... } | main.rs:202:5:207:5 | match s { ... } | |
| main.rs:214:9:214:10 | [SSA] s1 | main.rs:216:11:216:12 | s1 | |
| main.rs:214:9:214:10 | s1 | main.rs:214:9:214:10 | [SSA] s1 | |
| main.rs:214:14:214:29 | Some(...) | main.rs:214:9:214:10 | s1 | |
| main.rs:214:14:214:37 | ...::Some(...) | main.rs:214:9:214:10 | s1 | |
| main.rs:215:9:215:10 | [SSA] s2 | main.rs:220:11:220:12 | s2 | |
| main.rs:215:9:215:10 | s2 | main.rs:215:9:215:10 | [SSA] s2 | |
| main.rs:215:14:215:20 | Some(...) | main.rs:215:9:215:10 | s2 | |
| main.rs:216:11:216:12 | s1 | main.rs:217:9:217:15 | Some(...) | |
| main.rs:216:11:216:12 | s1 | main.rs:218:9:218:12 | None | |
| main.rs:217:14:217:14 | [SSA] n | main.rs:217:25:217:25 | n | |
| main.rs:217:14:217:14 | n | main.rs:217:14:217:14 | [SSA] n | |
| main.rs:217:20:217:26 | sink(...) | main.rs:216:5:219:5 | match s1 { ... } | |
| main.rs:218:17:218:23 | sink(...) | main.rs:216:5:219:5 | match s1 { ... } | |
| main.rs:220:5:223:5 | match s2 { ... } | main.rs:213:39:224:1 | { ... } | |
| main.rs:220:11:220:12 | s2 | main.rs:221:9:221:15 | Some(...) | |
| main.rs:220:11:220:12 | s2 | main.rs:222:9:222:12 | None | |
| main.rs:221:14:221:14 | [SSA] n | main.rs:221:25:221:25 | n | |
| main.rs:221:14:221:14 | n | main.rs:221:14:221:14 | [SSA] n | |
| main.rs:221:20:221:26 | sink(...) | main.rs:220:5:223:5 | match s2 { ... } | |
| main.rs:222:17:222:23 | sink(...) | main.rs:220:5:223:5 | match s2 { ... } | |
| main.rs:227:9:227:10 | [SSA] s1 | main.rs:228:10:228:11 | s1 | |
| main.rs:215:14:215:28 | ...::Some(...) | main.rs:215:9:215:10 | s2 | |
| main.rs:216:11:216:12 | s1 | main.rs:217:9:217:23 | ...::Some(...) | |
| main.rs:216:11:216:12 | s1 | main.rs:218:9:218:20 | ...::None | |
| main.rs:217:22:217:22 | [SSA] n | main.rs:217:33:217:33 | n | |
| main.rs:217:22:217:22 | n | main.rs:217:22:217:22 | [SSA] n | |
| main.rs:217:28:217:34 | sink(...) | main.rs:216:5:219:5 | match s1 { ... } | |
| main.rs:218:25:218:31 | sink(...) | main.rs:216:5:219:5 | match s1 { ... } | |
| main.rs:220:5:223:5 | match s2 { ... } | main.rs:213:37:224:1 | { ... } | |
| main.rs:220:11:220:12 | s2 | main.rs:221:9:221:23 | ...::Some(...) | |
| main.rs:220:11:220:12 | s2 | main.rs:222:9:222:20 | ...::None | |
| main.rs:221:22:221:22 | [SSA] n | main.rs:221:33:221:33 | n | |
| main.rs:221:22:221:22 | n | main.rs:221:22:221:22 | [SSA] n | |
| main.rs:221:28:221:34 | sink(...) | main.rs:220:5:223:5 | match s2 { ... } | |
| main.rs:222:25:222:31 | sink(...) | main.rs:220:5:223:5 | match s2 { ... } | |
| main.rs:227:9:227:10 | [SSA] s1 | main.rs:229:11:229:12 | s1 | |
| main.rs:227:9:227:10 | s1 | main.rs:227:9:227:10 | [SSA] s1 | |
| main.rs:227:14:227:29 | Some(...) | main.rs:227:9:227:10 | s1 | |
| main.rs:232:9:232:10 | [SSA] s1 | main.rs:233:10:233:11 | s1 | |
| main.rs:232:9:232:10 | s1 | main.rs:232:9:232:10 | [SSA] s1 | |
| main.rs:232:14:232:29 | Some(...) | main.rs:232:9:232:10 | s1 | |
| main.rs:235:9:235:10 | [SSA] s2 | main.rs:236:10:236:11 | s2 | |
| main.rs:235:9:235:10 | s2 | main.rs:235:9:235:10 | [SSA] s2 | |
| main.rs:235:14:235:20 | Some(...) | main.rs:235:9:235:10 | s2 | |
| main.rs:228:9:228:10 | [SSA] s2 | main.rs:233:11:233:12 | s2 | |
| main.rs:228:9:228:10 | s2 | main.rs:228:9:228:10 | [SSA] s2 | |
| main.rs:228:14:228:20 | Some(...) | main.rs:228:9:228:10 | s2 | |
| main.rs:229:11:229:12 | s1 | main.rs:230:9:230:15 | Some(...) | |
| main.rs:229:11:229:12 | s1 | main.rs:231:9:231:12 | None | |
| main.rs:230:14:230:14 | [SSA] n | main.rs:230:25:230:25 | n | |
| main.rs:230:14:230:14 | n | main.rs:230:14:230:14 | [SSA] n | |
| main.rs:230:20:230:26 | sink(...) | main.rs:229:5:232:5 | match s1 { ... } | |
| main.rs:231:17:231:23 | sink(...) | main.rs:229:5:232:5 | match s1 { ... } | |
| main.rs:233:5:236:5 | match s2 { ... } | main.rs:226:39:237:1 | { ... } | |
| main.rs:233:11:233:12 | s2 | main.rs:234:9:234:15 | Some(...) | |
| main.rs:233:11:233:12 | s2 | main.rs:235:9:235:12 | None | |
| main.rs:234:14:234:14 | [SSA] n | main.rs:234:25:234:25 | n | |
| main.rs:234:14:234:14 | n | main.rs:234:14:234:14 | [SSA] n | |
| main.rs:234:20:234:26 | sink(...) | main.rs:233:5:236:5 | match s2 { ... } | |
| main.rs:235:17:235:23 | sink(...) | main.rs:233:5:236:5 | match s2 { ... } | |
| main.rs:240:9:240:10 | [SSA] s1 | main.rs:241:10:241:11 | s1 | |
| main.rs:240:9:240:10 | s1 | main.rs:240:9:240:10 | [SSA] s1 | |
| main.rs:240:14:240:29 | Some(...) | main.rs:240:9:240:10 | s1 | |
| main.rs:243:9:243:10 | [SSA] s2 | main.rs:244:10:244:11 | s2 | |
| main.rs:243:9:243:10 | s2 | main.rs:243:9:243:10 | [SSA] s2 | |
| main.rs:243:14:243:17 | None | main.rs:243:9:243:10 | s2 | |
| main.rs:248:9:248:10 | [SSA] s1 | main.rs:250:14:250:15 | s1 | |
| main.rs:248:9:248:10 | s1 | main.rs:248:9:248:10 | [SSA] s1 | |
| main.rs:248:14:248:29 | Some(...) | main.rs:248:9:248:10 | s1 | |
| main.rs:249:9:249:10 | [SSA] s2 | main.rs:252:10:252:11 | s2 | |
| main.rs:249:9:249:10 | s2 | main.rs:249:9:249:10 | [SSA] s2 | |
| main.rs:249:14:249:20 | Some(...) | main.rs:249:9:249:10 | s2 | |
| main.rs:250:9:250:10 | [SSA] i1 | main.rs:251:10:251:11 | i1 | |
| main.rs:250:9:250:10 | i1 | main.rs:250:9:250:10 | [SSA] i1 | |
| main.rs:250:14:250:16 | TryExpr | main.rs:250:9:250:10 | i1 | |
| main.rs:253:5:253:11 | Some(...) | main.rs:247:41:254:1 | { ... } | |
| main.rs:257:9:257:10 | [SSA] s1 | main.rs:260:14:260:15 | s1 | |
| main.rs:257:9:257:10 | s1 | main.rs:257:9:257:10 | [SSA] s1 | |
| main.rs:257:32:257:45 | Ok(...) | main.rs:257:9:257:10 | s1 | |
| main.rs:258:9:258:10 | [SSA] s2 | main.rs:261:14:261:15 | s2 | |
| main.rs:258:9:258:10 | s2 | main.rs:258:9:258:10 | [SSA] s2 | |
| main.rs:258:32:258:36 | Ok(...) | main.rs:258:9:258:10 | s2 | |
| main.rs:259:9:259:10 | [SSA] s3 | main.rs:264:14:264:15 | s3 | |
| main.rs:259:9:259:10 | s3 | main.rs:259:9:259:10 | [SSA] s3 | |
| main.rs:259:32:259:46 | Err(...) | main.rs:259:9:259:10 | s3 | |
| main.rs:260:9:260:10 | [SSA] i1 | main.rs:262:10:262: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:261:9:261:10 | [SSA] i2 | main.rs:263:10:263:11 | i2 | |
| main.rs:261:9:261:10 | i2 | main.rs:261:9:261:10 | [SSA] i2 | |
| main.rs:261:14:261:16 | TryExpr | main.rs:261:9:261:10 | i2 | |
| main.rs:264:9:264:10 | [SSA] i3 | main.rs:265:10:265:11 | i3 | |
| main.rs:264:9:264:10 | i3 | main.rs:264:9:264:10 | [SSA] i3 | |
| main.rs:264:14:264:16 | TryExpr | main.rs:264:9:264:10 | i3 | |
| main.rs:266:5:266:9 | Ok(...) | main.rs:256:46:267:1 | { ... } | |
| main.rs:270:9:270:10 | [SSA] s1 | main.rs:271:10:271:11 | s1 | |
| main.rs:245:9:245:10 | [SSA] s1 | main.rs:246:10:246:11 | 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:248:9:248:10 | [SSA] s2 | main.rs:249:10:249:11 | s2 | |
| main.rs:248:9:248:10 | s2 | main.rs:248:9:248:10 | [SSA] s2 | |
| main.rs:248:14:248:20 | Some(...) | main.rs:248:9:248:10 | s2 | |
| main.rs:253:9:253:10 | [SSA] s1 | main.rs:254:10:254:11 | s1 | |
| main.rs:253:9:253:10 | s1 | main.rs:253:9:253:10 | [SSA] s1 | |
| main.rs:253:14:253:29 | Some(...) | main.rs:253:9:253:10 | s1 | |
| main.rs:256:9:256:10 | [SSA] s2 | main.rs:257:10:257:11 | s2 | |
| main.rs:256:9:256:10 | s2 | main.rs:256:9:256:10 | [SSA] s2 | |
| main.rs:256:14:256:17 | None | main.rs:256:9:256:10 | s2 | |
| main.rs:261:9:261:10 | [SSA] s1 | main.rs:263:14:263:15 | s1 | |
| main.rs:261:9:261:10 | s1 | main.rs:261:9:261:10 | [SSA] s1 | |
| main.rs:261:14:261:29 | Some(...) | main.rs:261:9:261:10 | s1 | |
| main.rs:262:9:262:10 | [SSA] s2 | main.rs:265:10:265:11 | s2 | |
| main.rs:262:9:262:10 | s2 | main.rs:262:9:262:10 | [SSA] s2 | |
| main.rs:262:14:262:20 | Some(...) | main.rs:262:9:262:10 | s2 | |
| main.rs:263:9:263:10 | [SSA] i1 | main.rs:264:10:264:11 | i1 | |
| main.rs:263:9:263:10 | i1 | main.rs:263:9:263:10 | [SSA] i1 | |
| main.rs:263:14:263:16 | TryExpr | main.rs:263:9:263:10 | i1 | |
| main.rs:266:5:266:11 | Some(...) | main.rs:260:41:267:1 | { ... } | |
| main.rs:270:9:270:10 | [SSA] s1 | main.rs:273:14:273:15 | s1 | |
| main.rs:270:9:270:10 | s1 | main.rs:270:9:270:10 | [SSA] s1 | |
| main.rs:270:32:270:45 | Ok(...) | main.rs:270:9:270:10 | s1 | |
| main.rs:271:10:271:11 | [post] s1 | main.rs:272:10:272:11 | s1 | |
| main.rs:271:10:271:11 | s1 | main.rs:272:10:272:11 | s1 | |
| main.rs:274:9:274:10 | [SSA] s2 | main.rs:275:10:275:11 | s2 | |
| main.rs:274:9:274:10 | s2 | main.rs:274:9:274:10 | [SSA] s2 | |
| main.rs:274:32:274:46 | Err(...) | main.rs:274:9:274:10 | s2 | |
| main.rs:275:10:275:11 | [post] s2 | main.rs:276:10:276:11 | s2 | |
| main.rs:275:10:275:11 | s2 | main.rs:276:10:276:11 | s2 | |
| main.rs:285:9:285:10 | [SSA] s1 | main.rs:287:11:287:12 | s1 | |
| main.rs:285:9:285:10 | s1 | main.rs:285:9:285:10 | [SSA] s1 | |
| main.rs:285:14:285:39 | ...::A(...) | main.rs:285:9:285:10 | s1 | |
| main.rs:286:9:286:10 | [SSA] s2 | main.rs:294:11:294:12 | s2 | |
| main.rs:286:9:286:10 | s2 | main.rs:286:9:286:10 | [SSA] s2 | |
| main.rs:286:14:286:30 | ...::B(...) | main.rs:286:9:286:10 | s2 | |
| main.rs:287:11:287:12 | s1 | main.rs:288:9:288:25 | ...::A(...) | |
| main.rs:287:11:287:12 | s1 | main.rs:289:9:289:25 | ...::B(...) | |
| main.rs:287:11:287:12 | s1 | main.rs:291:11:291:12 | s1 | |
| main.rs:288:24:288:24 | [SSA] n | main.rs:288:35:288:35 | n | |
| main.rs:288:24:288:24 | n | main.rs:288:24:288:24 | [SSA] n | |
| main.rs:288:30:288:36 | sink(...) | main.rs:287:5:290:5 | match s1 { ... } | |
| main.rs:289:24:289:24 | [SSA] n | main.rs:289:35:289:35 | n | |
| main.rs:289:24:289:24 | n | main.rs:289:24:289:24 | [SSA] n | |
| main.rs:289:30:289:36 | sink(...) | main.rs:287:5:290:5 | match s1 { ... } | |
| main.rs:291:11:291:12 | s1 | main.rs:292:9:292:45 | ... \| ... | |
| main.rs:292:9:292:45 | ... \| ... | main.rs:292:9:292:25 | ...::A(...) | |
| main.rs:292:9:292:45 | ... \| ... | main.rs:292:29:292:45 | ...::B(...) | |
| main.rs:292:9:292:45 | [SSA] [match(true)] phi | main.rs:292:55:292:55 | n | |
| main.rs:292:24:292:24 | [SSA] [input] [match(true)] phi | main.rs:292:9:292:45 | [SSA] [match(true)] phi | |
| main.rs:292:24:292:24 | [SSA] n | main.rs:292:24:292:24 | [SSA] [input] [match(true)] phi | |
| main.rs:292:24:292:24 | n | main.rs:292:24:292:24 | [SSA] n | |
| main.rs:292:44:292:44 | [SSA] [input] [match(true)] phi | main.rs:292:9:292:45 | [SSA] [match(true)] phi | |
| main.rs:292:44:292:44 | [SSA] n | main.rs:292:44:292:44 | [SSA] [input] [match(true)] phi | |
| main.rs:292:44:292:44 | n | main.rs:292:44:292:44 | [SSA] n | |
| main.rs:292:50:292:56 | sink(...) | main.rs:291:5:293:5 | match s1 { ... } | |
| main.rs:294:5:297:5 | match s2 { ... } | main.rs:284:48:298:1 | { ... } | |
| main.rs:294:11:294:12 | s2 | main.rs:295:9:295:25 | ...::A(...) | |
| main.rs:294:11:294:12 | s2 | main.rs:296:9:296:25 | ...::B(...) | |
| main.rs:295:24:295:24 | [SSA] n | main.rs:295:35:295:35 | n | |
| main.rs:295:24:295:24 | n | main.rs:295:24:295:24 | [SSA] n | |
| main.rs:295:30:295:36 | sink(...) | main.rs:294:5:297:5 | match s2 { ... } | |
| main.rs:296:24:296:24 | [SSA] n | main.rs:296:35:296:35 | n | |
| main.rs:296:24:296:24 | n | main.rs:296:24:296:24 | [SSA] n | |
| main.rs:296:30:296:36 | sink(...) | main.rs:294:5:297:5 | match s2 { ... } | |
| main.rs:303:9:303:10 | [SSA] s1 | main.rs:305:11:305:12 | s1 | |
| main.rs:303:9:303:10 | s1 | main.rs:303:9:303:10 | [SSA] s1 | |
| main.rs:303:14:303:26 | A(...) | main.rs:303:9:303:10 | s1 | |
| main.rs:304:9:304:10 | [SSA] s2 | main.rs:312:11:312:12 | s2 | |
| main.rs:304:9:304:10 | s2 | main.rs:304:9:304:10 | [SSA] s2 | |
| main.rs:304:14:304:17 | B(...) | main.rs:304:9:304:10 | s2 | |
| main.rs:305:11:305:12 | s1 | main.rs:306:9:306:12 | A(...) | |
| main.rs:305:11:305:12 | s1 | main.rs:307:9:307:12 | B(...) | |
| main.rs:305:11:305:12 | s1 | main.rs:309:11:309:12 | s1 | |
| main.rs:306:11:306:11 | [SSA] n | main.rs:306:22:306:22 | n | |
| main.rs:306:11:306:11 | n | main.rs:306:11:306:11 | [SSA] n | |
| main.rs:306:17:306:23 | sink(...) | main.rs:305:5:308:5 | match s1 { ... } | |
| main.rs:307:11:307:11 | [SSA] n | main.rs:307:22:307:22 | n | |
| main.rs:307:11:307:11 | n | main.rs:307:11:307:11 | [SSA] n | |
| main.rs:307:17:307:23 | sink(...) | main.rs:305:5:308:5 | match s1 { ... } | |
| main.rs:309:11:309:12 | s1 | main.rs:310:9:310:19 | ... \| ... | |
| main.rs:310:9:310:19 | ... \| ... | main.rs:310:9:310:12 | A(...) | |
| main.rs:310:9:310:19 | ... \| ... | main.rs:310:16:310:19 | B(...) | |
| main.rs:310:9:310:19 | [SSA] [match(true)] phi | main.rs:310:29:310:29 | n | |
| main.rs:310:11:310:11 | [SSA] [input] [match(true)] phi | main.rs:310:9:310:19 | [SSA] [match(true)] phi | |
| main.rs:310:11:310:11 | [SSA] n | main.rs:310:11:310:11 | [SSA] [input] [match(true)] phi | |
| main.rs:310:11:310:11 | n | main.rs:310:11:310:11 | [SSA] n | |
| main.rs:310:18:310:18 | [SSA] [input] [match(true)] phi | main.rs:310:9:310:19 | [SSA] [match(true)] phi | |
| main.rs:310:18:310:18 | [SSA] n | main.rs:310:18:310:18 | [SSA] [input] [match(true)] phi | |
| main.rs:310:18:310:18 | n | main.rs:310:18:310:18 | [SSA] n | |
| main.rs:310:24:310:30 | sink(...) | main.rs:309:5:311:5 | match s1 { ... } | |
| main.rs:312:5:315:5 | match s2 { ... } | main.rs:302:50:316:1 | { ... } | |
| main.rs:312:11:312:12 | s2 | main.rs:313:9:313:12 | A(...) | |
| main.rs:312:11:312:12 | s2 | main.rs:314:9:314:12 | B(...) | |
| main.rs:313:11:313:11 | [SSA] n | main.rs:313:22:313:22 | n | |
| main.rs:313:11:313:11 | n | main.rs:313:11:313:11 | [SSA] n | |
| main.rs:313:17:313:23 | sink(...) | main.rs:312:5:315:5 | match s2 { ... } | |
| main.rs:314:11:314:11 | [SSA] n | main.rs:314:22:314:22 | n | |
| main.rs:314:11:314:11 | n | main.rs:314:11:314:11 | [SSA] n | |
| main.rs:314:17:314:23 | sink(...) | main.rs:312:5:315:5 | match s2 { ... } | |
| main.rs:324:9:324:10 | [SSA] s1 | main.rs:328:11:328:12 | s1 | |
| main.rs:324:9:324:10 | s1 | main.rs:324:9:324:10 | [SSA] s1 | |
| main.rs:324:14:326:5 | ...::C {...} | main.rs:324:9:324:10 | s1 | |
| main.rs:327:9:327:10 | [SSA] s2 | main.rs:335:11:335:12 | s2 | |
| main.rs:327:9:327:10 | s2 | main.rs:327:9:327:10 | [SSA] s2 | |
| main.rs:327:14:327:43 | ...::D {...} | main.rs:327:9:327:10 | s2 | |
| main.rs:328:11:328:12 | s1 | main.rs:329:9:329:38 | ...::C {...} | |
| main.rs:328:11:328:12 | s1 | main.rs:330:9:330:38 | ...::D {...} | |
| main.rs:328:11:328:12 | s1 | main.rs:332:11:332:12 | s1 | |
| main.rs:329:36:329:36 | [SSA] n | main.rs:329:48:329:48 | n | |
| main.rs:329:36:329:36 | n | main.rs:329:36:329:36 | [SSA] n | |
| main.rs:329:43:329:49 | sink(...) | main.rs:328:5:331:5 | match s1 { ... } | |
| main.rs:330:36:330:36 | [SSA] n | main.rs:330:48:330:48 | n | |
| main.rs:330:36:330:36 | n | main.rs:330:36:330:36 | [SSA] n | |
| main.rs:330:43:330:49 | sink(...) | main.rs:328:5:331:5 | match s1 { ... } | |
| main.rs:332:11:332:12 | s1 | main.rs:333:9:333:71 | ... \| ... | |
| main.rs:333:9:333:71 | ... \| ... | main.rs:333:9:333:38 | ...::C {...} | |
| main.rs:333:9:333:71 | ... \| ... | main.rs:333:42:333:71 | ...::D {...} | |
| main.rs:333:9:333:71 | [SSA] [match(true)] phi | main.rs:333:81:333:81 | n | |
| main.rs:333:36:333:36 | [SSA] [input] [match(true)] phi | main.rs:333:9:333:71 | [SSA] [match(true)] phi | |
| main.rs:333:36:333:36 | [SSA] n | main.rs:333:36:333:36 | [SSA] [input] [match(true)] phi | |
| main.rs:333:36:333:36 | n | main.rs:333:36:333:36 | [SSA] n | |
| main.rs:333:69:333:69 | [SSA] [input] [match(true)] phi | main.rs:333:9:333:71 | [SSA] [match(true)] phi | |
| main.rs:333:69:333:69 | [SSA] n | main.rs:333:69:333:69 | [SSA] [input] [match(true)] phi | |
| main.rs:333:69:333:69 | n | main.rs:333:69:333:69 | [SSA] n | |
| main.rs:333:76:333:82 | sink(...) | main.rs:332:5:334:5 | match s1 { ... } | |
| main.rs:335:5:338:5 | match s2 { ... } | main.rs:323:49:339:1 | { ... } | |
| main.rs:335:11:335:12 | s2 | main.rs:336:9:336:38 | ...::C {...} | |
| main.rs:335:11:335:12 | s2 | main.rs:337:9:337:38 | ...::D {...} | |
| main.rs:336:36:336:36 | [SSA] n | main.rs:336:48:336:48 | n | |
| main.rs:336:36:336:36 | n | main.rs:336:36:336:36 | [SSA] n | |
| main.rs:336:43:336:49 | sink(...) | main.rs:335:5:338:5 | match s2 { ... } | |
| main.rs:337:36:337:36 | [SSA] n | main.rs:337:48:337:48 | n | |
| main.rs:337:36:337:36 | n | main.rs:337:36:337:36 | [SSA] n | |
| main.rs:337:43:337:49 | sink(...) | main.rs:335:5:338:5 | match s2 { ... } | |
| main.rs:344:9:344:10 | [SSA] s1 | main.rs:348:11:348:12 | s1 | |
| main.rs:344:9:344:10 | s1 | main.rs:344:9:344:10 | [SSA] s1 | |
| main.rs:344:14:346:5 | C {...} | main.rs:344:9:344:10 | s1 | |
| main.rs:347:9:347:10 | [SSA] s2 | main.rs:355:11:355:12 | s2 | |
| main.rs:347:9:347:10 | s2 | main.rs:347:9:347:10 | [SSA] s2 | |
| main.rs:347:14:347:29 | D {...} | main.rs:347:9:347:10 | s2 | |
| main.rs:348:11:348:12 | s1 | main.rs:349:9:349:24 | C {...} | |
| main.rs:348:11:348:12 | s1 | main.rs:350:9:350:24 | D {...} | |
| main.rs:348:11:348:12 | s1 | main.rs:352:11:352:12 | s1 | |
| main.rs:349:22:349:22 | [SSA] n | main.rs:349:34:349:34 | n | |
| main.rs:349:22:349:22 | n | main.rs:349:22:349:22 | [SSA] n | |
| main.rs:349:29:349:35 | sink(...) | main.rs:348:5:351:5 | match s1 { ... } | |
| main.rs:350:22:350:22 | [SSA] n | main.rs:350:34:350:34 | n | |
| main.rs:350:22:350:22 | n | main.rs:350:22:350:22 | [SSA] n | |
| main.rs:350:29:350:35 | sink(...) | main.rs:348:5:351:5 | match s1 { ... } | |
| main.rs:352:11:352:12 | s1 | main.rs:353:9:353:43 | ... \| ... | |
| main.rs:353:9:353:43 | ... \| ... | main.rs:353:9:353:24 | C {...} | |
| main.rs:353:9:353:43 | ... \| ... | main.rs:353:28:353:43 | D {...} | |
| main.rs:353:9:353:43 | [SSA] [match(true)] phi | main.rs:353:53:353:53 | n | |
| main.rs:353:22:353:22 | [SSA] [input] [match(true)] phi | main.rs:353:9:353:43 | [SSA] [match(true)] phi | |
| main.rs:353:22:353:22 | [SSA] n | main.rs:353:22:353:22 | [SSA] [input] [match(true)] phi | |
| main.rs:353:22:353:22 | n | main.rs:353:22:353:22 | [SSA] n | |
| main.rs:353:41:353:41 | [SSA] [input] [match(true)] phi | main.rs:353:9:353:43 | [SSA] [match(true)] phi | |
| main.rs:353:41:353:41 | [SSA] n | main.rs:353:41:353:41 | [SSA] [input] [match(true)] phi | |
| main.rs:353:41:353:41 | n | main.rs:353:41:353:41 | [SSA] n | |
| main.rs:353:48:353:54 | sink(...) | main.rs:352:5:354:5 | match s1 { ... } | |
| main.rs:355:5:358:5 | match s2 { ... } | main.rs:343:51:359:1 | { ... } | |
| main.rs:355:11:355:12 | s2 | main.rs:356:9:356:24 | C {...} | |
| main.rs:355:11:355:12 | s2 | main.rs:357:9:357:24 | D {...} | |
| main.rs:356:22:356:22 | [SSA] n | main.rs:356:34:356:34 | n | |
| main.rs:356:22:356:22 | n | main.rs:356:22:356:22 | [SSA] n | |
| main.rs:356:29:356:35 | sink(...) | main.rs:355:5:358:5 | match s2 { ... } | |
| main.rs:357:22:357:22 | [SSA] n | main.rs:357:34:357:34 | n | |
| main.rs:357:22:357:22 | n | main.rs:357:22:357:22 | [SSA] n | |
| main.rs:357:29:357:35 | sink(...) | main.rs:355:5:358:5 | match s2 { ... } | |
| main.rs:365:9:365:12 | [SSA] arr1 | main.rs:366:14:366:17 | arr1 | |
| main.rs:365:9:365:12 | arr1 | main.rs:365:9:365:12 | [SSA] arr1 | |
| main.rs:365:16:365:33 | [...] | main.rs:365:9:365:12 | arr1 | |
| main.rs:366:9:366:10 | [SSA] n1 | main.rs:367:10:367:11 | n1 | |
| main.rs:366:9:366:10 | n1 | main.rs:366:9:366:10 | [SSA] n1 | |
| main.rs:366:14:366:20 | arr1[2] | main.rs:366:9:366:10 | n1 | |
| main.rs:369:9:369:12 | [SSA] arr2 | main.rs:370:14:370:17 | arr2 | |
| main.rs:369:9:369:12 | arr2 | main.rs:369:9:369:12 | [SSA] arr2 | |
| main.rs:369:16:369:31 | [...; 10] | main.rs:369:9:369:12 | arr2 | |
| main.rs:370:9:370:10 | [SSA] n2 | main.rs:371:10:371:11 | n2 | |
| main.rs:370:9:370:10 | n2 | main.rs:370:9:370:10 | [SSA] n2 | |
| main.rs:370:14:370:20 | arr2[4] | main.rs:370:9:370:10 | n2 | |
| main.rs:373:9:373:12 | [SSA] arr3 | main.rs:374:14:374:17 | arr3 | |
| main.rs:373:9:373:12 | arr3 | main.rs:373:9:373:12 | [SSA] arr3 | |
| main.rs:373:16:373:24 | [...] | main.rs:373:9:373:12 | arr3 | |
| main.rs:374:9:374:10 | [SSA] n3 | main.rs:375:10:375:11 | n3 | |
| main.rs:374:9:374:10 | n3 | main.rs:374:9:374:10 | [SSA] n3 | |
| main.rs:374:14:374:20 | arr3[2] | main.rs:374:9:374:10 | n3 | |
| main.rs:379:9:379:12 | [SSA] arr1 | main.rs:380:15:380:18 | arr1 | |
| main.rs:379:9:379:12 | arr1 | main.rs:379:9:379:12 | [SSA] arr1 | |
| main.rs:379:16:379:33 | [...] | main.rs:379:9:379:12 | arr1 | |
| main.rs:380:9:380:10 | [SSA] n1 | main.rs:381:14:381:15 | n1 | |
| main.rs:380:9:380:10 | n1 | main.rs:380:9:380:10 | [SSA] n1 | |
| main.rs:384:9:384:12 | [SSA] arr2 | main.rs:385:15:385:18 | arr2 | |
| main.rs:384:9:384:12 | arr2 | main.rs:384:9:384:12 | [SSA] arr2 | |
| main.rs:384:16:384:24 | [...] | main.rs:384:9:384:12 | arr2 | |
| main.rs:385:5:387:5 | for ... in ... { ... } | main.rs:378:21:388:1 | { ... } | |
| main.rs:385:9:385:10 | [SSA] n2 | main.rs:386:14:386:15 | n2 | |
| main.rs:385:9:385:10 | n2 | main.rs:385:9:385:10 | [SSA] n2 | |
| main.rs:391:9:391:12 | [SSA] arr1 | main.rs:392:11:392:14 | arr1 | |
| main.rs:391:9:391:12 | arr1 | main.rs:391:9:391:12 | [SSA] arr1 | |
| main.rs:391:16:391:33 | [...] | main.rs:391:9:391:12 | arr1 | |
| main.rs:392:5:398:5 | match arr1 { ... } | main.rs:390:26:399:1 | { ... } | |
| main.rs:392:11:392:14 | arr1 | main.rs:393:9:393:17 | SlicePat | |
| main.rs:393:10:393:10 | [SSA] a | main.rs:394:18:394:18 | a | |
| main.rs:393:10:393:10 | a | main.rs:393:10:393:10 | [SSA] a | |
| main.rs:393:13:393:13 | [SSA] b | main.rs:395:18:395:18 | b | |
| main.rs:393:13:393:13 | b | main.rs:393:13:393:13 | [SSA] b | |
| main.rs:393:16:393:16 | [SSA] c | main.rs:396:18:396:18 | c | |
| main.rs:393:16:393:16 | c | main.rs:393:16:393:16 | [SSA] c | |
| main.rs:393:22:397:9 | { ... } | main.rs:392:5:398:5 | match arr1 { ... } | |
| main.rs:402:9:402:19 | [SSA] mut_arr | main.rs:403:10:403:16 | mut_arr | |
| main.rs:402:9:402:19 | mut_arr | main.rs:402:9:402:19 | [SSA] mut_arr | |
| main.rs:402:23:402:31 | [...] | main.rs:402:9:402:19 | mut_arr | |
| main.rs:403:10:403:16 | [post] mut_arr | main.rs:405:5:405:11 | mut_arr | |
| main.rs:403:10:403:16 | mut_arr | main.rs:405:5:405:11 | mut_arr | |
| main.rs:405:5:405:11 | [post] mut_arr | main.rs:406:13:406:19 | mut_arr | |
| main.rs:405:5:405:11 | mut_arr | main.rs:406:13:406:19 | mut_arr | |
| main.rs:405:18:405:27 | source(...) | main.rs:405:5:405:14 | mut_arr[1] | |
| main.rs:406:9:406:9 | [SSA] d | main.rs:407:10:407:10 | d | |
| main.rs:406:9:406:9 | d | main.rs:406:9:406:9 | [SSA] d | |
| main.rs:406:13:406:19 | [post] mut_arr | main.rs:408:10:408:16 | mut_arr | |
| main.rs:406:13:406:19 | mut_arr | main.rs:408:10:408:16 | mut_arr | |
| main.rs:406:13:406:22 | mut_arr[1] | main.rs:406:9:406:9 | d | |
| main.rs:413:39:413:43 | [SSA] names | main.rs:415:25:415:29 | names | |
| main.rs:413:39:413:43 | names | main.rs:413:39:413:43 | [SSA] names | |
| main.rs:413:39:413:72 | ...: Vec::<...> | main.rs:413:39:413:43 | names | |
| main.rs:414:9:414:20 | default_name | main.rs:414:9:414:20 | [SSA] default_name | |
| main.rs:414:24:414:45 | ... .to_string(...) | main.rs:414:9:414:20 | default_name | |
| main.rs:414:24:414:45 | ... .to_string(...) | main.rs:415:9:415:20 | phi(default_name) | |
| main.rs:415:5:421:5 | for ... in ... { ... } | main.rs:413:75:422:1 | { ... } | |
| main.rs:415:9:415:20 | phi(default_name) | main.rs:415:9:415:20 | phi(default_name) | |
| main.rs:415:9:415:20 | phi(default_name) | main.rs:417:41:417:67 | default_name | |
| main.rs:415:10:415:13 | [SSA] cond | main.rs:416:12:416:15 | cond | |
| main.rs:415:10:415:13 | cond | main.rs:415:10:415:13 | [SSA] cond | |
| main.rs:415:16:415:19 | [SSA] name | main.rs:417:21:417:24 | name | |
| main.rs:415:16:415:19 | name | main.rs:415:16:415:19 | [SSA] name | |
| main.rs:416:9:420:9 | if cond {...} | main.rs:415:31:421:5 | { ... } | |
| main.rs:417:17:417:17 | [SSA] n | main.rs:418:18:418:18 | n | |
| main.rs:417:17:417:17 | n | main.rs:417:17:417:17 | [SSA] n | |
| main.rs:417:21:417:68 | name.unwrap_or_else(...) | main.rs:417:17:417:17 | n | |
| main.rs:417:41:417:67 | [post] default_name | main.rs:415:9:415:20 | phi(default_name) | |
| main.rs:417:41:417:67 | closure self in \|...\| ... | main.rs:417:44:417:55 | this | |
| main.rs:417:41:417:67 | default_name | main.rs:415:9:415:20 | phi(default_name) | |
| main.rs:431:9:431:9 | [SSA] s | main.rs:432:10:432:10 | s | |
| main.rs:431:9:431:9 | s | main.rs:431:9:431:9 | [SSA] s | |
| main.rs:431:13:431:27 | MacroExpr | main.rs:431:9:431:9 | s | |
| main.rs:431:25:431:26 | source(...) | main.rs:431:13:431:27 | MacroExpr | |
| main.rs:436:9:436:9 | [SSA] a | main.rs:441:10:441:10 | a | |
| main.rs:436:9:436:9 | a | main.rs:436:9:436:9 | [SSA] a | |
| main.rs:436:13:436:22 | source(...) | main.rs:436:9:436:9 | a | |
| main.rs:437:9:437:9 | [SSA] b | main.rs:442:15:442:15 | b | |
| main.rs:437:9:437:9 | b | main.rs:437:9:437:9 | [SSA] b | |
| main.rs:437:13:437:22 | source(...) | main.rs:437:9:437:9 | b | |
| main.rs:438:9:438:9 | [SSA] c | main.rs:439:18:439:18 | c | |
| main.rs:438:9:438:9 | c | main.rs:438:9:438:9 | [SSA] c | |
| main.rs:438:13:438:22 | source(...) | main.rs:438:9:438:9 | c | |
| main.rs:439:9:439:13 | [SSA] c_ref | main.rs:443:14:443:18 | c_ref | |
| main.rs:439:9:439:13 | c_ref | main.rs:439:9:439:13 | [SSA] c_ref | |
| main.rs:439:17:439:18 | &c | main.rs:439:9:439:13 | c_ref | |
| main.rs:443:14:443:18 | [post] c_ref | main.rs:444:11:444:15 | c_ref | |
| main.rs:443:14:443:18 | c_ref | main.rs:444:11:444:15 | c_ref | |
| main.rs:469:13:469:33 | result_questionmark(...) | main.rs:469:9:469:9 | _ | |
| main.rs:481:36:481:41 | ...::new(...) | main.rs:481:36:481:41 | MacroExpr | |
| main.rs:271:9:271:10 | [SSA] s2 | main.rs:274:14:274:15 | s2 | |
| main.rs:271:9:271:10 | s2 | main.rs:271:9:271:10 | [SSA] s2 | |
| main.rs:271:32:271:36 | Ok(...) | main.rs:271:9:271:10 | s2 | |
| main.rs:272:9:272:10 | [SSA] s3 | main.rs:277:14:277:15 | s3 | |
| main.rs:272:9:272:10 | s3 | main.rs:272:9:272:10 | [SSA] s3 | |
| main.rs:272:32:272:46 | Err(...) | main.rs:272:9:272:10 | s3 | |
| main.rs:273:9:273:10 | [SSA] i1 | main.rs:275:10:275:11 | i1 | |
| main.rs:273:9:273:10 | i1 | main.rs:273:9:273:10 | [SSA] i1 | |
| main.rs:273:14:273:16 | TryExpr | main.rs:273:9:273:10 | i1 | |
| main.rs:274:9:274:10 | [SSA] i2 | main.rs:276:10:276:11 | i2 | |
| main.rs:274:9:274:10 | i2 | main.rs:274:9:274:10 | [SSA] i2 | |
| main.rs:274:14:274:16 | TryExpr | main.rs:274:9:274:10 | i2 | |
| main.rs:277:9:277:10 | [SSA] i3 | main.rs:278:10:278:11 | i3 | |
| main.rs:277:9:277:10 | i3 | main.rs:277:9:277:10 | [SSA] i3 | |
| main.rs:277:14:277:16 | TryExpr | main.rs:277:9:277:10 | i3 | |
| main.rs:279:5:279:9 | Ok(...) | main.rs:269:46:280:1 | { ... } | |
| main.rs:283:9:283:10 | [SSA] s1 | main.rs:284:10:284:11 | s1 | |
| main.rs:283:9:283:10 | s1 | main.rs:283:9:283:10 | [SSA] s1 | |
| main.rs:283:32:283:45 | Ok(...) | main.rs:283:9:283:10 | s1 | |
| main.rs:284:10:284:11 | [post] s1 | main.rs:285:10:285:11 | s1 | |
| main.rs:284:10:284:11 | s1 | main.rs:285:10:285:11 | s1 | |
| main.rs:287:9:287:10 | [SSA] s2 | main.rs:288:10:288:11 | s2 | |
| main.rs:287:9:287:10 | s2 | main.rs:287:9:287:10 | [SSA] s2 | |
| main.rs:287:32:287:46 | Err(...) | main.rs:287:9:287:10 | s2 | |
| main.rs:288:10:288:11 | [post] s2 | main.rs:289:10:289:11 | s2 | |
| main.rs:288:10:288:11 | s2 | main.rs:289:10:289:11 | s2 | |
| main.rs:298:9:298:10 | [SSA] s1 | main.rs:300:11:300:12 | s1 | |
| main.rs:298:9:298:10 | s1 | main.rs:298:9:298:10 | [SSA] s1 | |
| main.rs:298:14:298:39 | ...::A(...) | main.rs:298:9:298:10 | s1 | |
| main.rs:299:9:299:10 | [SSA] s2 | main.rs:307:11:307:12 | s2 | |
| main.rs:299:9:299:10 | s2 | main.rs:299:9:299:10 | [SSA] s2 | |
| main.rs:299:14:299:30 | ...::B(...) | main.rs:299:9:299:10 | s2 | |
| main.rs:300:11:300:12 | s1 | main.rs:301:9:301:25 | ...::A(...) | |
| main.rs:300:11:300:12 | s1 | main.rs:302:9:302:25 | ...::B(...) | |
| main.rs:300:11:300:12 | s1 | main.rs:304:11:304:12 | s1 | |
| main.rs:301:24:301:24 | [SSA] n | main.rs:301:35:301:35 | n | |
| main.rs:301:24:301:24 | n | main.rs:301:24:301:24 | [SSA] n | |
| main.rs:301:30:301:36 | sink(...) | main.rs:300:5:303:5 | match s1 { ... } | |
| main.rs:302:24:302:24 | [SSA] n | main.rs:302:35:302:35 | n | |
| main.rs:302:24:302:24 | n | main.rs:302:24:302:24 | [SSA] n | |
| main.rs:302:30:302:36 | sink(...) | main.rs:300:5:303:5 | match s1 { ... } | |
| main.rs:304:11:304:12 | s1 | main.rs:305:9:305:45 | ... \| ... | |
| main.rs:305:9:305:45 | ... \| ... | main.rs:305:9:305:25 | ...::A(...) | |
| main.rs:305:9:305:45 | ... \| ... | main.rs:305:29:305:45 | ...::B(...) | |
| main.rs:305:9:305:45 | [SSA] [match(true)] phi | main.rs:305:55:305:55 | n | |
| main.rs:305:24:305:24 | [SSA] [input] [match(true)] phi | main.rs:305:9:305:45 | [SSA] [match(true)] phi | |
| main.rs:305:24:305:24 | [SSA] n | main.rs:305:24:305:24 | [SSA] [input] [match(true)] phi | |
| main.rs:305:24:305:24 | n | main.rs:305:24:305:24 | [SSA] n | |
| main.rs:305:44:305:44 | [SSA] [input] [match(true)] phi | main.rs:305:9:305:45 | [SSA] [match(true)] phi | |
| main.rs:305:44:305:44 | [SSA] n | main.rs:305:44:305:44 | [SSA] [input] [match(true)] phi | |
| main.rs:305:44:305:44 | n | main.rs:305:44:305:44 | [SSA] n | |
| main.rs:305:50:305:56 | sink(...) | main.rs:304:5:306:5 | match s1 { ... } | |
| main.rs:307:5:310:5 | match s2 { ... } | main.rs:297:48:311:1 | { ... } | |
| main.rs:307:11:307:12 | s2 | main.rs:308:9:308:25 | ...::A(...) | |
| main.rs:307:11:307:12 | s2 | main.rs:309:9:309:25 | ...::B(...) | |
| main.rs:308:24:308:24 | [SSA] n | main.rs:308:35:308:35 | n | |
| main.rs:308:24:308:24 | n | main.rs:308:24:308:24 | [SSA] n | |
| main.rs:308:30:308:36 | sink(...) | main.rs:307:5:310:5 | match s2 { ... } | |
| main.rs:309:24:309:24 | [SSA] n | main.rs:309:35:309:35 | n | |
| main.rs:309:24:309:24 | n | main.rs:309:24:309:24 | [SSA] n | |
| main.rs:309:30:309:36 | sink(...) | main.rs:307:5:310:5 | match s2 { ... } | |
| main.rs:316:9:316:10 | [SSA] s1 | main.rs:318:11:318:12 | s1 | |
| main.rs:316:9:316:10 | s1 | main.rs:316:9:316:10 | [SSA] s1 | |
| main.rs:316:14:316:26 | A(...) | main.rs:316:9:316:10 | s1 | |
| main.rs:317:9:317:10 | [SSA] s2 | main.rs:325:11:325:12 | s2 | |
| main.rs:317:9:317:10 | s2 | main.rs:317:9:317:10 | [SSA] s2 | |
| main.rs:317:14:317:17 | B(...) | main.rs:317:9:317:10 | s2 | |
| main.rs:318:11:318:12 | s1 | main.rs:319:9:319:12 | A(...) | |
| main.rs:318:11:318:12 | s1 | main.rs:320:9:320:12 | B(...) | |
| main.rs:318:11:318:12 | s1 | main.rs:322:11:322:12 | s1 | |
| main.rs:319:11:319:11 | [SSA] n | main.rs:319:22:319:22 | n | |
| main.rs:319:11:319:11 | n | main.rs:319:11:319:11 | [SSA] n | |
| main.rs:319:17:319:23 | sink(...) | main.rs:318:5:321:5 | match s1 { ... } | |
| main.rs:320:11:320:11 | [SSA] n | main.rs:320:22:320:22 | n | |
| main.rs:320:11:320:11 | n | main.rs:320:11:320:11 | [SSA] n | |
| main.rs:320:17:320:23 | sink(...) | main.rs:318:5:321:5 | match s1 { ... } | |
| main.rs:322:11:322:12 | s1 | main.rs:323:9:323:19 | ... \| ... | |
| main.rs:323:9:323:19 | ... \| ... | main.rs:323:9:323:12 | A(...) | |
| main.rs:323:9:323:19 | ... \| ... | main.rs:323:16:323:19 | B(...) | |
| main.rs:323:9:323:19 | [SSA] [match(true)] phi | main.rs:323:29:323:29 | n | |
| main.rs:323:11:323:11 | [SSA] [input] [match(true)] phi | main.rs:323:9:323:19 | [SSA] [match(true)] phi | |
| main.rs:323:11:323:11 | [SSA] n | main.rs:323:11:323:11 | [SSA] [input] [match(true)] phi | |
| main.rs:323:11:323:11 | n | main.rs:323:11:323:11 | [SSA] n | |
| main.rs:323:18:323:18 | [SSA] [input] [match(true)] phi | main.rs:323:9:323:19 | [SSA] [match(true)] phi | |
| main.rs:323:18:323:18 | [SSA] n | main.rs:323:18:323:18 | [SSA] [input] [match(true)] phi | |
| main.rs:323:18:323:18 | n | main.rs:323:18:323:18 | [SSA] n | |
| main.rs:323:24:323:30 | sink(...) | main.rs:322:5:324:5 | match s1 { ... } | |
| main.rs:325:5:328:5 | match s2 { ... } | main.rs:315:50:329:1 | { ... } | |
| main.rs:325:11:325:12 | s2 | main.rs:326:9:326:12 | A(...) | |
| main.rs:325:11:325:12 | s2 | main.rs:327:9:327:12 | B(...) | |
| main.rs:326:11:326:11 | [SSA] n | main.rs:326:22:326:22 | n | |
| main.rs:326:11:326:11 | n | main.rs:326:11:326:11 | [SSA] n | |
| main.rs:326:17:326:23 | sink(...) | main.rs:325:5:328:5 | match s2 { ... } | |
| main.rs:327:11:327:11 | [SSA] n | main.rs:327:22:327:22 | n | |
| main.rs:327:11:327:11 | n | main.rs:327:11:327:11 | [SSA] n | |
| main.rs:327:17:327:23 | sink(...) | main.rs:325:5:328:5 | match s2 { ... } | |
| main.rs:337:9:337:10 | [SSA] s1 | main.rs:341:11:341:12 | s1 | |
| main.rs:337:9:337:10 | s1 | main.rs:337:9:337:10 | [SSA] s1 | |
| main.rs:337:14:339:5 | ...::C {...} | main.rs:337:9:337:10 | s1 | |
| main.rs:340:9:340:10 | [SSA] s2 | main.rs:348:11:348:12 | s2 | |
| main.rs:340:9:340:10 | s2 | main.rs:340:9:340:10 | [SSA] s2 | |
| main.rs:340:14:340:43 | ...::D {...} | main.rs:340:9:340:10 | s2 | |
| main.rs:341:11:341:12 | s1 | main.rs:342:9:342:38 | ...::C {...} | |
| main.rs:341:11:341:12 | s1 | main.rs:343:9:343:38 | ...::D {...} | |
| main.rs:341:11:341:12 | s1 | main.rs:345:11:345:12 | s1 | |
| main.rs:342:36:342:36 | [SSA] n | main.rs:342:48:342:48 | n | |
| main.rs:342:36:342:36 | n | main.rs:342:36:342:36 | [SSA] n | |
| main.rs:342:43:342:49 | sink(...) | main.rs:341:5:344:5 | match s1 { ... } | |
| main.rs:343:36:343:36 | [SSA] n | main.rs:343:48:343:48 | n | |
| main.rs:343:36:343:36 | n | main.rs:343:36:343:36 | [SSA] n | |
| main.rs:343:43:343:49 | sink(...) | main.rs:341:5:344:5 | match s1 { ... } | |
| main.rs:345:11:345:12 | s1 | main.rs:346:9:346:71 | ... \| ... | |
| main.rs:346:9:346:71 | ... \| ... | main.rs:346:9:346:38 | ...::C {...} | |
| main.rs:346:9:346:71 | ... \| ... | main.rs:346:42:346:71 | ...::D {...} | |
| main.rs:346:9:346:71 | [SSA] [match(true)] phi | main.rs:346:81:346:81 | n | |
| main.rs:346:36:346:36 | [SSA] [input] [match(true)] phi | main.rs:346:9:346:71 | [SSA] [match(true)] phi | |
| main.rs:346:36:346:36 | [SSA] n | main.rs:346:36:346:36 | [SSA] [input] [match(true)] phi | |
| main.rs:346:36:346:36 | n | main.rs:346:36:346:36 | [SSA] n | |
| main.rs:346:69:346:69 | [SSA] [input] [match(true)] phi | main.rs:346:9:346:71 | [SSA] [match(true)] phi | |
| main.rs:346:69:346:69 | [SSA] n | main.rs:346:69:346:69 | [SSA] [input] [match(true)] phi | |
| main.rs:346:69:346:69 | n | main.rs:346:69:346:69 | [SSA] n | |
| main.rs:346:76:346:82 | sink(...) | main.rs:345:5:347:5 | match s1 { ... } | |
| main.rs:348:5:351:5 | match s2 { ... } | main.rs:336:49:352:1 | { ... } | |
| main.rs:348:11:348:12 | s2 | main.rs:349:9:349:38 | ...::C {...} | |
| main.rs:348:11:348:12 | s2 | main.rs:350:9:350:38 | ...::D {...} | |
| main.rs:349:36:349:36 | [SSA] n | main.rs:349:48:349:48 | n | |
| main.rs:349:36:349:36 | n | main.rs:349:36:349:36 | [SSA] n | |
| main.rs:349:43:349:49 | sink(...) | main.rs:348:5:351:5 | match s2 { ... } | |
| main.rs:350:36:350:36 | [SSA] n | main.rs:350:48:350:48 | n | |
| main.rs:350:36:350:36 | n | main.rs:350:36:350:36 | [SSA] n | |
| main.rs:350:43:350:49 | sink(...) | main.rs:348:5:351:5 | match s2 { ... } | |
| main.rs:357:9:357:10 | [SSA] s1 | main.rs:361:11:361:12 | s1 | |
| main.rs:357:9:357:10 | s1 | main.rs:357:9:357:10 | [SSA] s1 | |
| main.rs:357:14:359:5 | C {...} | main.rs:357:9:357:10 | s1 | |
| main.rs:360:9:360:10 | [SSA] s2 | main.rs:368:11:368:12 | s2 | |
| main.rs:360:9:360:10 | s2 | main.rs:360:9:360:10 | [SSA] s2 | |
| main.rs:360:14:360:29 | D {...} | main.rs:360:9:360:10 | s2 | |
| main.rs:361:11:361:12 | s1 | main.rs:362:9:362:24 | C {...} | |
| main.rs:361:11:361:12 | s1 | main.rs:363:9:363:24 | D {...} | |
| main.rs:361:11:361:12 | s1 | main.rs:365:11:365:12 | s1 | |
| main.rs:362:22:362:22 | [SSA] n | main.rs:362:34:362:34 | n | |
| main.rs:362:22:362:22 | n | main.rs:362:22:362:22 | [SSA] n | |
| main.rs:362:29:362:35 | sink(...) | main.rs:361:5:364:5 | match s1 { ... } | |
| main.rs:363:22:363:22 | [SSA] n | main.rs:363:34:363:34 | n | |
| main.rs:363:22:363:22 | n | main.rs:363:22:363:22 | [SSA] n | |
| main.rs:363:29:363:35 | sink(...) | main.rs:361:5:364:5 | match s1 { ... } | |
| main.rs:365:11:365:12 | s1 | main.rs:366:9:366:43 | ... \| ... | |
| main.rs:366:9:366:43 | ... \| ... | main.rs:366:9:366:24 | C {...} | |
| main.rs:366:9:366:43 | ... \| ... | main.rs:366:28:366:43 | D {...} | |
| main.rs:366:9:366:43 | [SSA] [match(true)] phi | main.rs:366:53:366:53 | n | |
| main.rs:366:22:366:22 | [SSA] [input] [match(true)] phi | main.rs:366:9:366:43 | [SSA] [match(true)] phi | |
| main.rs:366:22:366:22 | [SSA] n | main.rs:366:22:366:22 | [SSA] [input] [match(true)] phi | |
| main.rs:366:22:366:22 | n | main.rs:366:22:366:22 | [SSA] n | |
| main.rs:366:41:366:41 | [SSA] [input] [match(true)] phi | main.rs:366:9:366:43 | [SSA] [match(true)] phi | |
| main.rs:366:41:366:41 | [SSA] n | main.rs:366:41:366:41 | [SSA] [input] [match(true)] phi | |
| main.rs:366:41:366:41 | n | main.rs:366:41:366:41 | [SSA] n | |
| main.rs:366:48:366:54 | sink(...) | main.rs:365:5:367:5 | match s1 { ... } | |
| main.rs:368:5:371:5 | match s2 { ... } | main.rs:356:51:372:1 | { ... } | |
| main.rs:368:11:368:12 | s2 | main.rs:369:9:369:24 | C {...} | |
| main.rs:368:11:368:12 | s2 | main.rs:370:9:370:24 | D {...} | |
| main.rs:369:22:369:22 | [SSA] n | main.rs:369:34:369:34 | n | |
| main.rs:369:22:369:22 | n | main.rs:369:22:369:22 | [SSA] n | |
| main.rs:369:29:369:35 | sink(...) | main.rs:368:5:371:5 | match s2 { ... } | |
| main.rs:370:22:370:22 | [SSA] n | main.rs:370:34:370:34 | n | |
| main.rs:370:22:370:22 | n | main.rs:370:22:370:22 | [SSA] n | |
| main.rs:370:29:370:35 | sink(...) | main.rs:368:5:371:5 | match s2 { ... } | |
| main.rs:378:9:378:12 | [SSA] arr1 | main.rs:379:14:379:17 | arr1 | |
| main.rs:378:9:378:12 | arr1 | main.rs:378:9:378:12 | [SSA] arr1 | |
| main.rs:378:16:378:33 | [...] | main.rs:378:9:378:12 | arr1 | |
| main.rs:379:9:379:10 | [SSA] n1 | main.rs:380:10:380:11 | n1 | |
| main.rs:379:9:379:10 | n1 | main.rs:379:9:379:10 | [SSA] n1 | |
| main.rs:379:14:379:20 | arr1[2] | main.rs:379:9:379:10 | n1 | |
| main.rs:382:9:382:12 | [SSA] arr2 | main.rs:383:14:383:17 | arr2 | |
| main.rs:382:9:382:12 | arr2 | main.rs:382:9:382:12 | [SSA] arr2 | |
| main.rs:382:16:382:31 | [...; 10] | main.rs:382:9:382:12 | arr2 | |
| main.rs:383:9:383:10 | [SSA] n2 | main.rs:384:10:384:11 | n2 | |
| main.rs:383:9:383:10 | n2 | main.rs:383:9:383:10 | [SSA] n2 | |
| main.rs:383:14:383:20 | arr2[4] | main.rs:383:9:383:10 | n2 | |
| main.rs:386:9:386:12 | [SSA] arr3 | main.rs:387:14:387:17 | arr3 | |
| main.rs:386:9:386:12 | arr3 | main.rs:386:9:386:12 | [SSA] arr3 | |
| main.rs:386:16:386:24 | [...] | main.rs:386:9:386:12 | arr3 | |
| main.rs:387:9:387:10 | [SSA] n3 | main.rs:388:10:388:11 | n3 | |
| main.rs:387:9:387:10 | n3 | main.rs:387:9:387:10 | [SSA] n3 | |
| main.rs:387:14:387:20 | arr3[2] | main.rs:387:9:387:10 | n3 | |
| main.rs:392:9:392:12 | [SSA] arr1 | main.rs:393:15:393:18 | arr1 | |
| main.rs:392:9:392:12 | arr1 | main.rs:392:9:392:12 | [SSA] arr1 | |
| main.rs:392:16:392:33 | [...] | main.rs:392:9:392:12 | arr1 | |
| main.rs:393:9:393:10 | [SSA] n1 | main.rs:394:14:394:15 | n1 | |
| main.rs:393:9:393:10 | n1 | main.rs:393:9:393:10 | [SSA] n1 | |
| main.rs:397:9:397:12 | [SSA] arr2 | main.rs:398:15:398:18 | arr2 | |
| main.rs:397:9:397:12 | arr2 | main.rs:397:9:397:12 | [SSA] arr2 | |
| main.rs:397:16:397:24 | [...] | main.rs:397:9:397:12 | arr2 | |
| main.rs:398:5:400:5 | for ... in ... { ... } | main.rs:391:21:401:1 | { ... } | |
| main.rs:398:9:398:10 | [SSA] n2 | main.rs:399:14:399:15 | n2 | |
| main.rs:398:9:398:10 | n2 | main.rs:398:9:398:10 | [SSA] n2 | |
| main.rs:404:9:404:12 | [SSA] arr1 | main.rs:405:11:405:14 | arr1 | |
| main.rs:404:9:404:12 | arr1 | main.rs:404:9:404:12 | [SSA] arr1 | |
| main.rs:404:16:404:33 | [...] | main.rs:404:9:404:12 | arr1 | |
| main.rs:405:5:411:5 | match arr1 { ... } | main.rs:403:26:412:1 | { ... } | |
| main.rs:405:11:405:14 | arr1 | main.rs:406:9:406:17 | SlicePat | |
| main.rs:406:10:406:10 | [SSA] a | main.rs:407:18:407:18 | a | |
| main.rs:406:10:406:10 | a | main.rs:406:10:406:10 | [SSA] a | |
| main.rs:406:13:406:13 | [SSA] b | main.rs:408:18:408:18 | b | |
| main.rs:406:13:406:13 | b | main.rs:406:13:406:13 | [SSA] b | |
| main.rs:406:16:406:16 | [SSA] c | main.rs:409:18:409:18 | c | |
| main.rs:406:16:406:16 | c | main.rs:406:16:406:16 | [SSA] c | |
| main.rs:406:22:410:9 | { ... } | main.rs:405:5:411:5 | match arr1 { ... } | |
| main.rs:415:9:415:19 | [SSA] mut_arr | main.rs:416:10:416:16 | mut_arr | |
| main.rs:415:9:415:19 | mut_arr | main.rs:415:9:415:19 | [SSA] mut_arr | |
| main.rs:415:23:415:31 | [...] | main.rs:415:9:415:19 | mut_arr | |
| main.rs:416:10:416:16 | [post] mut_arr | main.rs:418:5:418:11 | mut_arr | |
| main.rs:416:10:416:16 | mut_arr | main.rs:418:5:418:11 | mut_arr | |
| main.rs:418:5:418:11 | [post] mut_arr | main.rs:419:13:419:19 | mut_arr | |
| main.rs:418:5:418:11 | mut_arr | main.rs:419:13:419:19 | mut_arr | |
| main.rs:418:18:418:27 | source(...) | main.rs:418:5:418:14 | mut_arr[1] | |
| main.rs:419:9:419:9 | [SSA] d | main.rs:420:10:420:10 | d | |
| main.rs:419:9:419:9 | d | main.rs:419:9:419:9 | [SSA] d | |
| main.rs:419:13:419:19 | [post] mut_arr | main.rs:421:10:421:16 | mut_arr | |
| main.rs:419:13:419:19 | mut_arr | main.rs:421:10:421:16 | mut_arr | |
| main.rs:419:13:419:22 | mut_arr[1] | main.rs:419:9:419:9 | d | |
| main.rs:426:39:426:43 | [SSA] names | main.rs:428:25:428:29 | names | |
| main.rs:426:39:426:43 | names | main.rs:426:39:426:43 | [SSA] names | |
| main.rs:426:39:426:72 | ...: Vec::<...> | main.rs:426:39:426:43 | names | |
| main.rs:427:9:427:20 | default_name | main.rs:427:9:427:20 | [SSA] default_name | |
| main.rs:427:24:427:45 | ... .to_string(...) | main.rs:427:9:427:20 | default_name | |
| main.rs:427:24:427:45 | ... .to_string(...) | main.rs:428:9:428:20 | phi(default_name) | |
| main.rs:428:5:434:5 | for ... in ... { ... } | main.rs:426:75:435:1 | { ... } | |
| main.rs:428:9:428:20 | phi(default_name) | main.rs:428:9:428:20 | phi(default_name) | |
| main.rs:428:9:428:20 | phi(default_name) | main.rs:430:41:430:67 | default_name | |
| main.rs:428:10:428:13 | [SSA] cond | main.rs:429:12:429:15 | cond | |
| main.rs:428:10:428:13 | cond | main.rs:428:10:428:13 | [SSA] cond | |
| main.rs:428:16:428:19 | [SSA] name | main.rs:430:21:430:24 | name | |
| main.rs:428:16:428:19 | name | main.rs:428:16:428:19 | [SSA] name | |
| main.rs:429:9:433:9 | if cond {...} | main.rs:428:31:434:5 | { ... } | |
| main.rs:430:17:430:17 | [SSA] n | main.rs:431:18:431:18 | n | |
| main.rs:430:17:430:17 | n | main.rs:430:17:430:17 | [SSA] n | |
| main.rs:430:21:430:68 | name.unwrap_or_else(...) | main.rs:430:17:430:17 | n | |
| main.rs:430:41:430:67 | [post] default_name | main.rs:428:9:428:20 | phi(default_name) | |
| main.rs:430:41:430:67 | closure self in \|...\| ... | main.rs:430:44:430:55 | this | |
| main.rs:430:41:430:67 | default_name | main.rs:428:9:428:20 | phi(default_name) | |
| main.rs:444:9:444:9 | [SSA] s | main.rs:445:10:445:10 | s | |
| main.rs:444:9:444:9 | s | main.rs:444:9:444:9 | [SSA] s | |
| main.rs:444:13:444:27 | MacroExpr | main.rs:444:9:444:9 | s | |
| main.rs:444:25:444:26 | source(...) | main.rs:444:13:444:27 | MacroExpr | |
| main.rs:449:9:449:9 | [SSA] a | main.rs:454:10:454:10 | a | |
| main.rs:449:9:449:9 | a | main.rs:449:9:449:9 | [SSA] a | |
| main.rs:449:13:449:22 | source(...) | main.rs:449:9:449:9 | a | |
| main.rs:450:9:450:9 | [SSA] b | main.rs:455:15:455:15 | b | |
| main.rs:450:9:450:9 | b | main.rs:450:9:450:9 | [SSA] b | |
| main.rs:450:13:450:22 | source(...) | main.rs:450:9:450:9 | b | |
| main.rs:451:9:451:9 | [SSA] c | main.rs:452:18:452:18 | c | |
| main.rs:451:9:451:9 | c | main.rs:451:9:451:9 | [SSA] c | |
| main.rs:451:13:451:22 | source(...) | main.rs:451:9:451:9 | c | |
| main.rs:452:9:452:13 | [SSA] c_ref | main.rs:456:14:456:18 | c_ref | |
| main.rs:452:9:452:13 | c_ref | main.rs:452:9:452:13 | [SSA] c_ref | |
| main.rs:452:17:452:18 | &c | main.rs:452:9:452:13 | c_ref | |
| main.rs:456:14:456:18 | [post] c_ref | main.rs:457:11:457:15 | c_ref | |
| main.rs:456:14:456:18 | c_ref | main.rs:457:11:457:15 | c_ref | |
| main.rs:483:13:483:33 | result_questionmark(...) | main.rs:483:9:483:9 | _ | |
| main.rs:495:36:495:41 | ...::new(...) | main.rs:495:36:495: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 |
@@ -538,7 +557,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 |
@@ -570,59 +593,61 @@ storeStep
| main.rs:167:16:167:16 | 2 | Point.x | main.rs:166:16:169:9 | Point {...} |
| main.rs:168:16:168:25 | source(...) | Point.y | main.rs:166:16:169:9 | Point {...} |
| main.rs:170:12:170:12 | 4 | Point3D.z | main.rs:165:13:171:5 | Point3D {...} |
| main.rs:179:16:182:9 | Point {...} | Point3D.plane | main.rs:178:13:184:5 | Point3D {...} |
| main.rs:180:16:180:16 | 2 | Point.x | main.rs:179:16:182:9 | Point {...} |
| main.rs:181:16:181:25 | source(...) | Point.y | main.rs:179:16:182:9 | Point {...} |
| main.rs:183:12:183:12 | 4 | Point3D.z | main.rs:178:13:184:5 | Point3D {...} |
| main.rs:201:27:201:36 | source(...) | Some | main.rs:201:14:201:37 | ...::Some(...) |
| main.rs:202:27:202:27 | 2 | Some | main.rs:202:14:202:28 | ...::Some(...) |
| main.rs:214:19:214:28 | source(...) | Some | main.rs:214:14:214:29 | Some(...) |
| main.rs:215:19:215:19 | 2 | Some | main.rs:215:14:215:20 | Some(...) |
| main.rs:180:16:180:32 | Point {...} | Point3D.plane | main.rs:179:13:182:5 | Point3D {...} |
| main.rs:180:27:180:27 | 2 | Point.x | main.rs:180:16:180:32 | Point {...} |
| main.rs:180:30:180:30 | y | Point.y | main.rs:180:16:180:32 | Point {...} |
| main.rs:181:12:181:12 | 4 | Point3D.z | main.rs:179:13:182:5 | Point3D {...} |
| main.rs:198:27:198:36 | source(...) | MyTupleStruct(0) | main.rs:198:13:198:40 | MyTupleStruct(...) |
| main.rs:198:39:198:39 | 2 | MyTupleStruct(1) | main.rs:198:13:198:40 | MyTupleStruct(...) |
| main.rs:214:27:214:36 | source(...) | Some | main.rs:214:14:214:37 | ...::Some(...) |
| main.rs:215:27:215:27 | 2 | Some | main.rs:215:14:215:28 | ...::Some(...) |
| main.rs:227:19:227:28 | source(...) | Some | main.rs:227:14:227:29 | Some(...) |
| main.rs:232:19:232:28 | source(...) | Some | main.rs:232:14:232:29 | Some(...) |
| main.rs:235:19:235:19 | 0 | Some | main.rs:235:14:235:20 | Some(...) |
| main.rs:228:19:228:19 | 2 | Some | main.rs:228:14:228:20 | Some(...) |
| main.rs:240:19:240:28 | source(...) | Some | main.rs:240:14:240:29 | Some(...) |
| main.rs:248:19:248:28 | source(...) | Some | main.rs:248:14:248:29 | Some(...) |
| main.rs:249:19:249:19 | 2 | Some | main.rs:249:14:249:20 | Some(...) |
| main.rs:253:10:253:10 | 0 | Some | main.rs:253:5:253:11 | Some(...) |
| main.rs:257:35:257:44 | source(...) | Ok | main.rs:257:32:257:45 | Ok(...) |
| main.rs:258:35:258:35 | 2 | Ok | main.rs:258:32:258:36 | Ok(...) |
| main.rs:259:36:259:45 | source(...) | Err | main.rs:259:32:259:46 | Err(...) |
| main.rs:266:8:266:8 | 0 | Ok | main.rs:266:5:266:9 | Ok(...) |
| main.rs:245:19:245:28 | source(...) | Some | main.rs:245:14:245:29 | Some(...) |
| main.rs:248:19:248:19 | 0 | Some | main.rs:248:14:248:20 | Some(...) |
| main.rs:253:19:253:28 | source(...) | Some | main.rs:253:14:253:29 | Some(...) |
| main.rs:261:19:261:28 | source(...) | Some | main.rs:261:14:261:29 | Some(...) |
| main.rs:262:19:262:19 | 2 | Some | main.rs:262:14:262:20 | Some(...) |
| main.rs:266:10:266:10 | 0 | Some | main.rs:266:5:266:11 | Some(...) |
| main.rs:270:35:270:44 | source(...) | Ok | main.rs:270:32:270:45 | Ok(...) |
| main.rs:274:36:274:45 | source(...) | Err | main.rs:274:32:274:46 | Err(...) |
| main.rs:285:29:285:38 | source(...) | A | main.rs:285:14:285:39 | ...::A(...) |
| main.rs:286:29:286:29 | 2 | B | main.rs:286:14:286:30 | ...::B(...) |
| main.rs:303:16:303:25 | source(...) | A | main.rs:303:14:303:26 | A(...) |
| main.rs:304:16:304:16 | 2 | B | main.rs:304:14:304:17 | B(...) |
| main.rs:325:18:325:27 | source(...) | C | main.rs:324:14:326:5 | ...::C {...} |
| main.rs:327:41:327:41 | 2 | D | main.rs:327:14:327:43 | ...::D {...} |
| main.rs:345:18:345:27 | source(...) | C | main.rs:344:14:346:5 | C {...} |
| main.rs:347:27:347:27 | 2 | D | main.rs:347:14:347:29 | D {...} |
| main.rs:365:17:365:17 | 1 | element | main.rs:365:16:365:33 | [...] |
| main.rs:365:20:365:20 | 2 | element | main.rs:365:16:365:33 | [...] |
| main.rs:365:23:365:32 | source(...) | element | main.rs:365:16:365:33 | [...] |
| main.rs:369:17:369:26 | source(...) | element | main.rs:369:16:369:31 | [...; 10] |
| main.rs:373:17:373:17 | 1 | element | main.rs:373:16:373:24 | [...] |
| main.rs:373:20:373:20 | 2 | element | main.rs:373:16:373:24 | [...] |
| main.rs:373:23:373:23 | 3 | element | main.rs:373:16:373:24 | [...] |
| main.rs:379:17:379:17 | 1 | element | main.rs:379:16:379:33 | [...] |
| main.rs:379:20:379:20 | 2 | element | main.rs:379:16:379:33 | [...] |
| main.rs:379:23:379:32 | source(...) | element | main.rs:379:16:379:33 | [...] |
| main.rs:384:17:384:17 | 1 | element | main.rs:384:16:384:24 | [...] |
| main.rs:384:20:384:20 | 2 | element | main.rs:384:16:384:24 | [...] |
| main.rs:384:23:384:23 | 3 | element | main.rs:384:16:384:24 | [...] |
| main.rs:391:17:391:17 | 1 | element | main.rs:391:16:391:33 | [...] |
| main.rs:391:20:391:20 | 2 | element | main.rs:391:16:391:33 | [...] |
| main.rs:391:23:391:32 | source(...) | element | main.rs:391:16:391:33 | [...] |
| main.rs:402:24:402:24 | 1 | element | main.rs:402:23:402:31 | [...] |
| main.rs:402:27:402:27 | 2 | element | main.rs:402:23:402:31 | [...] |
| main.rs:402:30:402:30 | 3 | element | main.rs:402:23:402:31 | [...] |
| main.rs:405:18:405:27 | source(...) | element | main.rs:405:5:405:11 | [post] mut_arr |
| main.rs:417:41:417:67 | default_name | captured default_name | main.rs:417:41:417:67 | \|...\| ... |
| main.rs:439:18:439:18 | c | &ref | main.rs:439:17:439:18 | &c |
| main.rs:442:15:442:15 | b | &ref | main.rs:442:14:442:15 | &b |
| main.rs:451:27:451:27 | 0 | Some | main.rs:451:22:451:28 | Some(...) |
| main.rs:271:35:271:35 | 2 | Ok | main.rs:271:32:271:36 | Ok(...) |
| main.rs:272:36:272:45 | source(...) | Err | main.rs:272:32:272:46 | Err(...) |
| main.rs:279:8:279:8 | 0 | Ok | main.rs:279:5:279:9 | Ok(...) |
| main.rs:283:35:283:44 | source(...) | Ok | main.rs:283:32:283:45 | Ok(...) |
| main.rs:287:36:287:45 | source(...) | Err | main.rs:287:32:287:46 | Err(...) |
| main.rs:298:29:298:38 | source(...) | A | main.rs:298:14:298:39 | ...::A(...) |
| main.rs:299:29:299:29 | 2 | B | main.rs:299:14:299:30 | ...::B(...) |
| main.rs:316:16:316:25 | source(...) | A | main.rs:316:14:316:26 | A(...) |
| main.rs:317:16:317:16 | 2 | B | main.rs:317:14:317:17 | B(...) |
| main.rs:338:18:338:27 | source(...) | C | main.rs:337:14:339:5 | ...::C {...} |
| main.rs:340:41:340:41 | 2 | D | main.rs:340:14:340:43 | ...::D {...} |
| main.rs:358:18:358:27 | source(...) | C | main.rs:357:14:359:5 | C {...} |
| main.rs:360:27:360:27 | 2 | D | main.rs:360:14:360:29 | D {...} |
| main.rs:378:17:378:17 | 1 | element | main.rs:378:16:378:33 | [...] |
| main.rs:378:20:378:20 | 2 | element | main.rs:378:16:378:33 | [...] |
| main.rs:378:23:378:32 | source(...) | element | main.rs:378:16:378:33 | [...] |
| main.rs:382:17:382:26 | source(...) | element | main.rs:382:16:382:31 | [...; 10] |
| main.rs:386:17:386:17 | 1 | element | main.rs:386:16:386:24 | [...] |
| main.rs:386:20:386:20 | 2 | element | main.rs:386:16:386:24 | [...] |
| main.rs:386:23:386:23 | 3 | element | main.rs:386:16:386:24 | [...] |
| main.rs:392:17:392:17 | 1 | element | main.rs:392:16:392:33 | [...] |
| main.rs:392:20:392:20 | 2 | element | main.rs:392:16:392:33 | [...] |
| main.rs:392:23:392:32 | source(...) | element | main.rs:392:16:392:33 | [...] |
| main.rs:397:17:397:17 | 1 | element | main.rs:397:16:397:24 | [...] |
| main.rs:397:20:397:20 | 2 | element | main.rs:397:16:397:24 | [...] |
| main.rs:397:23:397:23 | 3 | element | main.rs:397:16:397:24 | [...] |
| main.rs:404:17:404:17 | 1 | element | main.rs:404:16:404:33 | [...] |
| main.rs:404:20:404:20 | 2 | element | main.rs:404:16:404:33 | [...] |
| main.rs:404:23:404:32 | source(...) | element | main.rs:404:16:404:33 | [...] |
| main.rs:415:24:415:24 | 1 | element | main.rs:415:23:415:31 | [...] |
| main.rs:415:27:415:27 | 2 | element | main.rs:415:23:415:31 | [...] |
| main.rs:415:30:415:30 | 3 | element | main.rs:415:23:415:31 | [...] |
| main.rs:418:18:418:27 | source(...) | element | main.rs:418:5:418:11 | [post] mut_arr |
| main.rs:430:41:430:67 | default_name | captured default_name | main.rs:430:41:430:67 | \|...\| ... |
| main.rs:452:18:452:18 | c | &ref | main.rs:452:17:452:18 | &c |
| main.rs:455:15:455:15 | b | &ref | main.rs:455:14:455:15 | &b |
| main.rs:464:27:464:27 | 0 | Some | main.rs:464:22:464: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 |
@@ -641,6 +666,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:36:9:36:15 | Some(...) | Some | main.rs:36:14:36:14 | _ |
| main.rs:90:11:90:11 | i | &ref | main.rs:90:10:90:11 | * ... |
| main.rs:98:10:98:10 | a | tuple.0 | main.rs:98:10:98:12 | a.0 |
@@ -661,63 +688,67 @@ readStep
| main.rs:125:10:125:10 | b | tuple.1 | main.rs:125:10:125:12 | b.1 |
| main.rs:154:9:154:28 | Point {...} | Point.x | main.rs:154:20:154:20 | a |
| main.rs:154:9:154:28 | Point {...} | Point.y | main.rs:154:26:154:26 | b |
| main.rs:186:9:189:9 | Point3D {...} | Point3D.plane | main.rs:187:20:187:33 | Point {...} |
| main.rs:186:9:189:9 | Point3D {...} | Point3D.z | main.rs:188:13:188:13 | z |
| main.rs:187:20:187:33 | Point {...} | Point.x | main.rs:187:28:187:28 | x |
| main.rs:187:20:187:33 | Point {...} | Point.y | main.rs:187:31:187:31 | y |
| main.rs:204:9:204:23 | ...::Some(...) | Some | main.rs:204:22:204:22 | n |
| main.rs:208:9:208:23 | ...::Some(...) | Some | main.rs:208:22:208:22 | n |
| main.rs:217:9:217:15 | Some(...) | Some | main.rs:217:14:217:14 | n |
| main.rs:221:9:221:15 | Some(...) | Some | main.rs:221:14:221:14 | n |
| main.rs:250:14:250:15 | s1 | Ok | main.rs:250:14:250:16 | TryExpr |
| main.rs:250:14:250:15 | s1 | Some | main.rs:250:14:250:16 | TryExpr |
| main.rs:252:10:252:11 | s2 | Ok | main.rs:252:10:252:12 | TryExpr |
| main.rs:252:10:252:11 | s2 | Some | main.rs:252:10:252:12 | TryExpr |
| 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:261:14:261:15 | s2 | Ok | main.rs:261:14:261:16 | TryExpr |
| main.rs:261:14:261:15 | s2 | Some | main.rs:261:14:261:16 | TryExpr |
| main.rs:264:14:264:15 | s3 | Ok | main.rs:264:14:264:16 | TryExpr |
| main.rs:264:14:264:15 | s3 | Some | main.rs:264:14:264:16 | TryExpr |
| main.rs:288:9:288:25 | ...::A(...) | A | main.rs:288:24:288:24 | n |
| main.rs:289:9:289:25 | ...::B(...) | B | main.rs:289:24:289:24 | n |
| main.rs:292:9:292:25 | ...::A(...) | A | main.rs:292:24:292:24 | n |
| main.rs:292:29:292:45 | ...::B(...) | B | main.rs:292:44:292:44 | n |
| main.rs:295:9:295:25 | ...::A(...) | A | main.rs:295:24:295:24 | n |
| main.rs:296:9:296:25 | ...::B(...) | B | main.rs:296:24:296:24 | n |
| main.rs:306:9:306:12 | A(...) | A | main.rs:306:11:306:11 | n |
| main.rs:307:9:307:12 | B(...) | B | main.rs:307:11:307:11 | n |
| main.rs:310:9:310:12 | A(...) | A | main.rs:310:11:310:11 | n |
| main.rs:310:16:310:19 | B(...) | B | main.rs:310:18:310:18 | n |
| main.rs:313:9:313:12 | A(...) | A | main.rs:313:11:313:11 | n |
| main.rs:314:9:314:12 | B(...) | B | main.rs:314:11:314:11 | n |
| main.rs:329:9:329:38 | ...::C {...} | C | main.rs:329:36:329:36 | n |
| main.rs:330:9:330:38 | ...::D {...} | D | main.rs:330:36:330:36 | n |
| main.rs:333:9:333:38 | ...::C {...} | C | main.rs:333:36:333:36 | n |
| main.rs:333:42:333:71 | ...::D {...} | D | main.rs:333:69:333:69 | n |
| main.rs:336:9:336:38 | ...::C {...} | C | main.rs:336:36:336:36 | n |
| main.rs:337:9:337:38 | ...::D {...} | D | main.rs:337:36:337:36 | n |
| main.rs:349:9:349:24 | C {...} | C | main.rs:349:22:349:22 | n |
| main.rs:350:9:350:24 | D {...} | D | main.rs:350:22:350:22 | n |
| main.rs:353:9:353:24 | C {...} | C | main.rs:353:22:353:22 | n |
| main.rs:353:28:353:43 | D {...} | D | main.rs:353:41:353:41 | n |
| main.rs:356:9:356:24 | C {...} | C | main.rs:356:22:356:22 | n |
| main.rs:357:9:357:24 | D {...} | D | main.rs:357:22:357:22 | n |
| main.rs:366:14:366:17 | arr1 | element | main.rs:366:14:366:20 | arr1[2] |
| main.rs:370:14:370:17 | arr2 | element | main.rs:370:14:370:20 | arr2[4] |
| main.rs:374:14:374:17 | arr3 | element | main.rs:374:14:374:20 | arr3[2] |
| main.rs:380:15:380:18 | arr1 | element | main.rs:380:9:380:10 | n1 |
| main.rs:385:15:385:18 | arr2 | element | main.rs:385:9:385:10 | n2 |
| main.rs:393:9:393:17 | SlicePat | element | main.rs:393:10:393:10 | a |
| main.rs:393:9:393:17 | SlicePat | element | main.rs:393:13:393:13 | b |
| main.rs:393:9:393:17 | SlicePat | element | main.rs:393:16:393:16 | c |
| main.rs:403:10:403:16 | mut_arr | element | main.rs:403:10:403:19 | mut_arr[1] |
| main.rs:405:5:405:11 | mut_arr | element | main.rs:405:5:405:14 | mut_arr[1] |
| main.rs:406:13:406:19 | mut_arr | element | main.rs:406:13:406:22 | mut_arr[1] |
| main.rs:408:10:408:16 | mut_arr | element | main.rs:408:10:408:19 | mut_arr[0] |
| main.rs:415:9:415:20 | TuplePat | tuple.0 | main.rs:415:10:415:13 | cond |
| main.rs:415:9:415:20 | TuplePat | tuple.1 | main.rs:415:16:415:19 | name |
| main.rs:415:25:415:29 | names | element | main.rs:415:9:415:20 | TuplePat |
| main.rs:417:41:417:67 | [post] \|...\| ... | captured default_name | main.rs:417:41:417:67 | [post] default_name |
| main.rs:417:44:417:55 | this | captured default_name | main.rs:417:44:417:55 | default_name |
| main.rs:444:11:444:15 | c_ref | &ref | main.rs:444:10:444:15 | * ... |
| main.rs:184:9:187:9 | Point3D {...} | Point3D.plane | main.rs:185:20:185:33 | Point {...} |
| main.rs:184:9:187:9 | Point3D {...} | Point3D.z | main.rs:186:13:186:13 | z |
| main.rs:185:20:185:33 | Point {...} | Point.x | main.rs:185:28:185:28 | x |
| main.rs:185:20:185:33 | Point {...} | Point.y | main.rs:185:31:185:31 | y |
| main.rs:199:10:199:10 | s | tuple.0 | main.rs:199:10:199:12 | s.0 |
| main.rs:200:10:200:10 | s | tuple.1 | main.rs:200:10:200:12 | s.1 |
| main.rs:203:9:203:27 | MyTupleStruct(...) | MyTupleStruct(0) | main.rs:203:23:203:23 | x |
| main.rs:203:9:203:27 | MyTupleStruct(...) | MyTupleStruct(1) | main.rs:203:26:203:26 | y |
| main.rs:217:9:217:23 | ...::Some(...) | Some | main.rs:217:22:217:22 | n |
| main.rs:221:9:221:23 | ...::Some(...) | Some | main.rs:221:22:221:22 | n |
| main.rs:230:9:230:15 | Some(...) | Some | main.rs:230:14:230:14 | n |
| main.rs:234:9:234:15 | Some(...) | Some | main.rs:234:14:234:14 | n |
| main.rs:263:14:263:15 | s1 | Ok | main.rs:263:14:263:16 | TryExpr |
| main.rs:263:14:263:15 | s1 | Some | main.rs:263:14:263:16 | TryExpr |
| main.rs:265:10:265:11 | s2 | Ok | main.rs:265:10:265:12 | TryExpr |
| main.rs:265:10:265:11 | s2 | Some | main.rs:265:10:265:12 | TryExpr |
| main.rs:273:14:273:15 | s1 | Ok | main.rs:273:14:273:16 | TryExpr |
| main.rs:273:14:273:15 | s1 | Some | main.rs:273:14:273:16 | TryExpr |
| main.rs:274:14:274:15 | s2 | Ok | main.rs:274:14:274:16 | TryExpr |
| main.rs:274:14:274:15 | s2 | Some | main.rs:274:14:274:16 | TryExpr |
| main.rs:277:14:277:15 | s3 | Ok | main.rs:277:14:277:16 | TryExpr |
| main.rs:277:14:277:15 | s3 | Some | main.rs:277:14:277:16 | TryExpr |
| main.rs:301:9:301:25 | ...::A(...) | A | main.rs:301:24:301:24 | n |
| main.rs:302:9:302:25 | ...::B(...) | B | main.rs:302:24:302:24 | n |
| main.rs:305:9:305:25 | ...::A(...) | A | main.rs:305:24:305:24 | n |
| main.rs:305:29:305:45 | ...::B(...) | B | main.rs:305:44:305:44 | n |
| main.rs:308:9:308:25 | ...::A(...) | A | main.rs:308:24:308:24 | n |
| main.rs:309:9:309:25 | ...::B(...) | B | main.rs:309:24:309:24 | n |
| main.rs:319:9:319:12 | A(...) | A | main.rs:319:11:319:11 | n |
| main.rs:320:9:320:12 | B(...) | B | main.rs:320:11:320:11 | n |
| main.rs:323:9:323:12 | A(...) | A | main.rs:323:11:323:11 | n |
| main.rs:323:16:323:19 | B(...) | B | main.rs:323:18:323:18 | n |
| main.rs:326:9:326:12 | A(...) | A | main.rs:326:11:326:11 | n |
| main.rs:327:9:327:12 | B(...) | B | main.rs:327:11:327:11 | n |
| main.rs:342:9:342:38 | ...::C {...} | C | main.rs:342:36:342:36 | n |
| main.rs:343:9:343:38 | ...::D {...} | D | main.rs:343:36:343:36 | n |
| main.rs:346:9:346:38 | ...::C {...} | C | main.rs:346:36:346:36 | n |
| main.rs:346:42:346:71 | ...::D {...} | D | main.rs:346:69:346:69 | n |
| main.rs:349:9:349:38 | ...::C {...} | C | main.rs:349:36:349:36 | n |
| main.rs:350:9:350:38 | ...::D {...} | D | main.rs:350:36:350:36 | n |
| main.rs:362:9:362:24 | C {...} | C | main.rs:362:22:362:22 | n |
| main.rs:363:9:363:24 | D {...} | D | main.rs:363:22:363:22 | n |
| main.rs:366:9:366:24 | C {...} | C | main.rs:366:22:366:22 | n |
| main.rs:366:28:366:43 | D {...} | D | main.rs:366:41:366:41 | n |
| main.rs:369:9:369:24 | C {...} | C | main.rs:369:22:369:22 | n |
| main.rs:370:9:370:24 | D {...} | D | main.rs:370:22:370:22 | n |
| main.rs:379:14:379:17 | arr1 | element | main.rs:379:14:379:20 | arr1[2] |
| main.rs:383:14:383:17 | arr2 | element | main.rs:383:14:383:20 | arr2[4] |
| main.rs:387:14:387:17 | arr3 | element | main.rs:387:14:387:20 | arr3[2] |
| main.rs:393:15:393:18 | arr1 | element | main.rs:393:9:393:10 | n1 |
| main.rs:398:15:398:18 | arr2 | element | main.rs:398:9:398:10 | n2 |
| main.rs:406:9:406:17 | SlicePat | element | main.rs:406:10:406:10 | a |
| main.rs:406:9:406:17 | SlicePat | element | main.rs:406:13:406:13 | b |
| main.rs:406:9:406:17 | SlicePat | element | main.rs:406:16:406:16 | c |
| main.rs:416:10:416:16 | mut_arr | element | main.rs:416:10:416:19 | mut_arr[1] |
| main.rs:418:5:418:11 | mut_arr | element | main.rs:418:5:418:14 | mut_arr[1] |
| main.rs:419:13:419:19 | mut_arr | element | main.rs:419:13:419:22 | mut_arr[1] |
| main.rs:421:10:421:16 | mut_arr | element | main.rs:421:10:421:19 | mut_arr[0] |
| main.rs:428:9:428:20 | TuplePat | tuple.0 | main.rs:428:10:428:13 | cond |
| main.rs:428:9:428:20 | TuplePat | tuple.1 | main.rs:428:16:428:19 | name |
| main.rs:428:25:428:29 | names | element | main.rs:428:9:428:20 | TuplePat |
| main.rs:430:41:430:67 | [post] \|...\| ... | captured default_name | main.rs:430:41:430:67 | [post] default_name |
| main.rs:430:44:430:55 | this | captured default_name | main.rs:430:44:430:55 | default_name |
| main.rs:457:11:457:15 | c_ref | &ref | main.rs:457:10:457:15 | * ... |

View File

@@ -49,144 +49,152 @@ edges
| main.rs:151:12:151:21 | source(...) | main.rs:150:13:153:5 | Point {...} [Point.x] | provenance | |
| main.rs:154:9:154:28 | Point {...} [Point.x] | main.rs:154:20:154:20 | a | provenance | |
| main.rs:154:20:154:20 | a | main.rs:155:10:155:10 | a | provenance | |
| main.rs:178:9:178:9 | p [Point3D.plane, Point.y] | main.rs:185:11:185:11 | p [Point3D.plane, Point.y] | provenance | |
| main.rs:178:13:184:5 | Point3D {...} [Point3D.plane, Point.y] | main.rs:178:9:178:9 | p [Point3D.plane, Point.y] | provenance | |
| main.rs:179:16:182:9 | Point {...} [Point.y] | main.rs:178:13:184:5 | Point3D {...} [Point3D.plane, Point.y] | provenance | |
| main.rs:181:16:181:25 | source(...) | main.rs:179:16:182:9 | Point {...} [Point.y] | provenance | |
| main.rs:185:11:185:11 | p [Point3D.plane, Point.y] | main.rs:186:9:189:9 | Point3D {...} [Point3D.plane, Point.y] | provenance | |
| main.rs:186:9:189:9 | Point3D {...} [Point3D.plane, Point.y] | main.rs:187:20:187:33 | Point {...} [Point.y] | provenance | |
| main.rs:187:20:187:33 | Point {...} [Point.y] | main.rs:187:31:187:31 | y | provenance | |
| main.rs:187:31:187:31 | y | main.rs:191:18:191:18 | y | provenance | |
| main.rs:201:9:201:10 | s1 [Some] | main.rs:203:11:203:12 | s1 [Some] | provenance | |
| main.rs:201:14:201:37 | ...::Some(...) [Some] | main.rs:201:9:201:10 | s1 [Some] | provenance | |
| main.rs:201:27:201:36 | source(...) | main.rs:201:14:201:37 | ...::Some(...) [Some] | provenance | |
| main.rs:203:11:203:12 | s1 [Some] | main.rs:204:9:204:23 | ...::Some(...) [Some] | provenance | |
| main.rs:204:9:204:23 | ...::Some(...) [Some] | main.rs:204:22:204:22 | n | provenance | |
| main.rs:204:22:204:22 | n | main.rs:204:33:204:33 | n | provenance | |
| main.rs:178:9:178:9 | y | main.rs:180:30:180:30 | y | provenance | |
| main.rs:178:13:178:22 | source(...) | main.rs:178:9:178:9 | y | provenance | |
| main.rs:179:9:179:9 | p [Point3D.plane, Point.y] | main.rs:183:11:183:11 | p [Point3D.plane, Point.y] | provenance | |
| main.rs:179:13:182:5 | Point3D {...} [Point3D.plane, Point.y] | main.rs:179:9:179:9 | p [Point3D.plane, Point.y] | provenance | |
| main.rs:180:16:180:32 | Point {...} [Point.y] | main.rs:179:13:182:5 | Point3D {...} [Point3D.plane, Point.y] | provenance | |
| main.rs:180:30:180:30 | y | main.rs:180:16:180:32 | Point {...} [Point.y] | provenance | |
| main.rs:183:11:183:11 | p [Point3D.plane, Point.y] | main.rs:184:9:187:9 | Point3D {...} [Point3D.plane, Point.y] | provenance | |
| main.rs:184:9:187:9 | Point3D {...} [Point3D.plane, Point.y] | main.rs:185:20:185:33 | Point {...} [Point.y] | provenance | |
| main.rs:185:20:185:33 | Point {...} [Point.y] | main.rs:185:31:185:31 | y | provenance | |
| main.rs:185:31:185:31 | y | main.rs:189:18:189:18 | y | provenance | |
| main.rs:198:9:198:9 | s [MyTupleStruct(0)] | main.rs:202:11:202:11 | s [MyTupleStruct(0)] | provenance | |
| main.rs:198:13:198:40 | MyTupleStruct(...) [MyTupleStruct(0)] | main.rs:198:9:198:9 | s [MyTupleStruct(0)] | provenance | |
| main.rs:198:27:198:36 | source(...) | main.rs:198:13:198:40 | MyTupleStruct(...) [MyTupleStruct(0)] | provenance | |
| main.rs:202:11:202:11 | s [MyTupleStruct(0)] | main.rs:203:9:203:27 | MyTupleStruct(...) [MyTupleStruct(0)] | provenance | |
| main.rs:203:9:203:27 | MyTupleStruct(...) [MyTupleStruct(0)] | main.rs:203:23:203:23 | x | provenance | |
| main.rs:203:23:203:23 | x | main.rs:204:18:204:18 | x | provenance | |
| main.rs:214:9:214:10 | s1 [Some] | main.rs:216:11:216:12 | s1 [Some] | provenance | |
| main.rs:214:14:214:29 | Some(...) [Some] | main.rs:214:9:214:10 | s1 [Some] | provenance | |
| main.rs:214:19:214:28 | source(...) | main.rs:214:14:214:29 | Some(...) [Some] | provenance | |
| main.rs:216:11:216:12 | s1 [Some] | main.rs:217:9:217:15 | Some(...) [Some] | provenance | |
| main.rs:217:9:217:15 | Some(...) [Some] | main.rs:217:14:217:14 | n | provenance | |
| main.rs:217:14:217:14 | n | main.rs:217:25:217:25 | n | provenance | |
| main.rs:227:9:227:10 | s1 [Some] | main.rs:228:10:228:11 | s1 [Some] | provenance | |
| main.rs:214:14:214:37 | ...::Some(...) [Some] | main.rs:214:9:214:10 | s1 [Some] | provenance | |
| main.rs:214:27:214:36 | source(...) | main.rs:214:14:214:37 | ...::Some(...) [Some] | provenance | |
| main.rs:216:11:216:12 | s1 [Some] | main.rs:217:9:217:23 | ...::Some(...) [Some] | provenance | |
| main.rs:217:9:217:23 | ...::Some(...) [Some] | main.rs:217:22:217:22 | n | provenance | |
| main.rs:217:22:217:22 | n | main.rs:217:33:217:33 | n | provenance | |
| main.rs:227:9:227:10 | s1 [Some] | main.rs:229:11:229:12 | s1 [Some] | provenance | |
| main.rs:227:14:227:29 | Some(...) [Some] | main.rs:227:9:227:10 | s1 [Some] | provenance | |
| main.rs:227:19:227:28 | source(...) | main.rs:227:14:227:29 | Some(...) [Some] | provenance | |
| main.rs:228:10:228:11 | s1 [Some] | main.rs:228:10:228:20 | s1.unwrap(...) | provenance | MaD:1 |
| main.rs:232:9:232:10 | s1 [Some] | main.rs:233:10:233:11 | s1 [Some] | provenance | |
| main.rs:232:14:232:29 | Some(...) [Some] | main.rs:232:9:232:10 | s1 [Some] | provenance | |
| main.rs:232:19:232:28 | source(...) | main.rs:232:14:232:29 | Some(...) [Some] | provenance | |
| main.rs:233:10:233:11 | s1 [Some] | main.rs:233:10:233:24 | s1.unwrap_or(...) | provenance | MaD:3 |
| main.rs:236:23:236:32 | source(...) | main.rs:236:10:236:33 | s2.unwrap_or(...) | provenance | MaD:2 |
| main.rs:229:11:229:12 | s1 [Some] | main.rs:230:9:230:15 | Some(...) [Some] | provenance | |
| main.rs:230:9:230:15 | Some(...) [Some] | main.rs:230:14:230:14 | n | provenance | |
| main.rs:230:14:230:14 | n | main.rs:230:25:230:25 | n | provenance | |
| main.rs:240:9:240:10 | s1 [Some] | main.rs:241:10:241:11 | s1 [Some] | provenance | |
| main.rs:240:14:240:29 | Some(...) [Some] | main.rs:240:9:240:10 | s1 [Some] | provenance | |
| main.rs:240:19:240:28 | source(...) | main.rs:240:14:240:29 | Some(...) [Some] | provenance | |
| main.rs:241:10:241:11 | s1 [Some] | main.rs:241:10:241:32 | s1.unwrap_or_else(...) | provenance | MaD:5 |
| main.rs:244:31:244:40 | source(...) | main.rs:244:10:244:41 | s2.unwrap_or_else(...) | provenance | MaD:4 |
| main.rs:248:9:248:10 | s1 [Some] | main.rs:250:14:250:15 | s1 [Some] | provenance | |
| main.rs:248:14:248:29 | Some(...) [Some] | main.rs:248:9:248:10 | s1 [Some] | provenance | |
| main.rs:248:19:248:28 | source(...) | main.rs:248:14:248:29 | Some(...) [Some] | provenance | |
| main.rs:250:9:250:10 | i1 | main.rs:251:10:251:11 | i1 | provenance | |
| main.rs:250:14:250:15 | s1 [Some] | main.rs:250:14:250:16 | TryExpr | provenance | |
| main.rs:250:14:250:16 | TryExpr | main.rs:250:9:250:10 | i1 | provenance | |
| main.rs:257:9:257:10 | s1 [Ok] | main.rs:260:14:260:15 | s1 [Ok] | provenance | |
| main.rs:257:32:257:45 | Ok(...) [Ok] | main.rs:257:9:257:10 | s1 [Ok] | provenance | |
| main.rs:257:35:257:44 | source(...) | main.rs:257:32:257:45 | Ok(...) [Ok] | provenance | |
| main.rs:260:9:260:10 | i1 | main.rs:262:10:262:11 | i1 | provenance | |
| main.rs:260:14:260:15 | s1 [Ok] | 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:270:9:270:10 | s1 [Ok] | main.rs:271:10:271:11 | s1 [Ok] | provenance | |
| main.rs:241:10:241:11 | s1 [Some] | main.rs:241:10:241:20 | s1.unwrap(...) | provenance | MaD:1 |
| main.rs:245:9:245:10 | s1 [Some] | main.rs:246:10:246:11 | 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:246:10:246:11 | s1 [Some] | main.rs:246:10:246:24 | s1.unwrap_or(...) | provenance | MaD:3 |
| main.rs:249:23:249:32 | source(...) | main.rs:249:10:249:33 | s2.unwrap_or(...) | provenance | MaD:2 |
| main.rs:253:9:253:10 | s1 [Some] | main.rs:254:10:254:11 | s1 [Some] | provenance | |
| main.rs:253:14:253:29 | Some(...) [Some] | main.rs:253:9:253:10 | s1 [Some] | provenance | |
| main.rs:253:19:253:28 | source(...) | main.rs:253:14:253:29 | Some(...) [Some] | provenance | |
| main.rs:254:10:254:11 | s1 [Some] | main.rs:254:10:254:32 | s1.unwrap_or_else(...) | provenance | MaD:5 |
| main.rs:257:31:257:40 | source(...) | main.rs:257:10:257:41 | s2.unwrap_or_else(...) | provenance | MaD:4 |
| main.rs:261:9:261:10 | s1 [Some] | main.rs:263:14:263:15 | s1 [Some] | provenance | |
| main.rs:261:14:261:29 | Some(...) [Some] | main.rs:261:9:261:10 | s1 [Some] | provenance | |
| main.rs:261:19:261:28 | source(...) | main.rs:261:14:261:29 | Some(...) [Some] | provenance | |
| main.rs:263:9:263:10 | i1 | main.rs:264:10:264:11 | i1 | provenance | |
| main.rs:263:14:263:15 | s1 [Some] | main.rs:263:14:263:16 | TryExpr | provenance | |
| main.rs:263:14:263:16 | TryExpr | main.rs:263:9:263:10 | i1 | provenance | |
| main.rs:270:9:270:10 | s1 [Ok] | main.rs:273:14:273:15 | s1 [Ok] | provenance | |
| main.rs:270:32:270:45 | Ok(...) [Ok] | main.rs:270:9:270:10 | s1 [Ok] | provenance | |
| main.rs:270:35:270:44 | source(...) | main.rs:270:32:270:45 | Ok(...) [Ok] | provenance | |
| main.rs:271:10:271:11 | s1 [Ok] | main.rs:271:10:271:22 | s1.expect(...) | provenance | MaD:6 |
| main.rs:274:9:274:10 | s2 [Err] | main.rs:276:10:276:11 | s2 [Err] | provenance | |
| main.rs:274:32:274:46 | Err(...) [Err] | main.rs:274:9:274:10 | s2 [Err] | provenance | |
| main.rs:274:36:274:45 | source(...) | main.rs:274:32:274:46 | Err(...) [Err] | provenance | |
| main.rs:276:10:276:11 | s2 [Err] | main.rs:276:10:276:26 | s2.expect_err(...) | provenance | MaD:7 |
| main.rs:285:9:285:10 | s1 [A] | main.rs:287:11:287:12 | s1 [A] | provenance | |
| main.rs:285:14:285:39 | ...::A(...) [A] | main.rs:285:9:285:10 | s1 [A] | provenance | |
| main.rs:285:29:285:38 | source(...) | main.rs:285:14:285:39 | ...::A(...) [A] | provenance | |
| main.rs:287:11:287:12 | s1 [A] | main.rs:288:9:288:25 | ...::A(...) [A] | provenance | |
| main.rs:287:11:287:12 | s1 [A] | main.rs:291:11:291:12 | s1 [A] | provenance | |
| main.rs:288:9:288:25 | ...::A(...) [A] | main.rs:288:24:288:24 | n | provenance | |
| main.rs:288:24:288:24 | n | main.rs:288:35:288:35 | n | provenance | |
| main.rs:291:11:291:12 | s1 [A] | main.rs:292:9:292:25 | ...::A(...) [A] | provenance | |
| main.rs:292:9:292:25 | ...::A(...) [A] | main.rs:292:24:292:24 | n | provenance | |
| main.rs:292:24:292:24 | n | main.rs:292:55:292:55 | n | provenance | |
| main.rs:303:9:303:10 | s1 [A] | main.rs:305:11:305:12 | s1 [A] | provenance | |
| main.rs:303:14:303:26 | A(...) [A] | main.rs:303:9:303:10 | s1 [A] | provenance | |
| main.rs:303:16:303:25 | source(...) | main.rs:303:14:303:26 | A(...) [A] | provenance | |
| main.rs:305:11:305:12 | s1 [A] | main.rs:306:9:306:12 | A(...) [A] | provenance | |
| main.rs:305:11:305:12 | s1 [A] | main.rs:309:11:309:12 | s1 [A] | provenance | |
| main.rs:306:9:306:12 | A(...) [A] | main.rs:306:11:306:11 | n | provenance | |
| main.rs:306:11:306:11 | n | main.rs:306:22:306:22 | n | provenance | |
| main.rs:309:11:309:12 | s1 [A] | main.rs:310:9:310:12 | A(...) [A] | provenance | |
| main.rs:310:9:310:12 | A(...) [A] | main.rs:310:11:310:11 | n | provenance | |
| main.rs:310:11:310:11 | n | main.rs:310:29:310:29 | n | provenance | |
| main.rs:324:9:324:10 | s1 [C] | main.rs:328:11:328:12 | s1 [C] | provenance | |
| main.rs:324:14:326:5 | ...::C {...} [C] | main.rs:324:9:324:10 | s1 [C] | provenance | |
| main.rs:325:18:325:27 | source(...) | main.rs:324:14:326:5 | ...::C {...} [C] | provenance | |
| main.rs:328:11:328:12 | s1 [C] | main.rs:329:9:329:38 | ...::C {...} [C] | provenance | |
| main.rs:328:11:328:12 | s1 [C] | main.rs:332:11:332:12 | s1 [C] | provenance | |
| main.rs:329:9:329:38 | ...::C {...} [C] | main.rs:329:36:329:36 | n | provenance | |
| main.rs:329:36:329:36 | n | main.rs:329:48:329:48 | n | provenance | |
| main.rs:332:11:332:12 | s1 [C] | main.rs:333:9:333:38 | ...::C {...} [C] | provenance | |
| main.rs:333:9:333:38 | ...::C {...} [C] | main.rs:333:36:333:36 | n | provenance | |
| main.rs:333:36:333:36 | n | main.rs:333:81:333:81 | n | provenance | |
| main.rs:344:9:344:10 | s1 [C] | main.rs:348:11:348:12 | s1 [C] | provenance | |
| main.rs:344:14:346:5 | C {...} [C] | main.rs:344:9:344:10 | s1 [C] | provenance | |
| main.rs:345:18:345:27 | source(...) | main.rs:344:14:346:5 | C {...} [C] | provenance | |
| main.rs:348:11:348:12 | s1 [C] | main.rs:349:9:349:24 | C {...} [C] | provenance | |
| main.rs:348:11:348:12 | s1 [C] | main.rs:352:11:352:12 | s1 [C] | provenance | |
| main.rs:349:9:349:24 | C {...} [C] | main.rs:349:22:349:22 | n | provenance | |
| main.rs:349:22:349:22 | n | main.rs:349:34:349:34 | n | provenance | |
| main.rs:352:11:352:12 | s1 [C] | main.rs:353:9:353:24 | C {...} [C] | provenance | |
| main.rs:353:9:353:24 | C {...} [C] | main.rs:353:22:353:22 | n | provenance | |
| main.rs:353:22:353:22 | n | main.rs:353:53:353:53 | n | provenance | |
| main.rs:365:9:365:12 | arr1 [element] | main.rs:366:14:366:17 | arr1 [element] | provenance | |
| main.rs:365:16:365:33 | [...] [element] | main.rs:365:9:365:12 | arr1 [element] | provenance | |
| main.rs:365:23:365:32 | source(...) | main.rs:365:16:365:33 | [...] [element] | provenance | |
| main.rs:366:9:366:10 | n1 | main.rs:367:10:367:11 | n1 | provenance | |
| main.rs:366:14:366:17 | arr1 [element] | main.rs:366:14:366:20 | arr1[2] | provenance | |
| main.rs:366:14:366:20 | arr1[2] | main.rs:366:9:366:10 | n1 | provenance | |
| main.rs:369:9:369:12 | arr2 [element] | main.rs:370:14:370:17 | arr2 [element] | provenance | |
| main.rs:369:16:369:31 | [...; 10] [element] | main.rs:369:9:369:12 | arr2 [element] | provenance | |
| main.rs:369:17:369:26 | source(...) | main.rs:369:16:369:31 | [...; 10] [element] | provenance | |
| main.rs:370:9:370:10 | n2 | main.rs:371:10:371:11 | n2 | provenance | |
| main.rs:370:14:370:17 | arr2 [element] | main.rs:370:14:370:20 | arr2[4] | provenance | |
| main.rs:370:14:370:20 | arr2[4] | main.rs:370:9:370:10 | n2 | provenance | |
| main.rs:379:9:379:12 | arr1 [element] | main.rs:380:15:380:18 | arr1 [element] | provenance | |
| main.rs:379:16:379:33 | [...] [element] | main.rs:379:9:379:12 | arr1 [element] | provenance | |
| main.rs:379:23:379:32 | source(...) | main.rs:379:16:379:33 | [...] [element] | provenance | |
| main.rs:380:9:380:10 | n1 | main.rs:381:14:381:15 | n1 | provenance | |
| main.rs:380:15:380:18 | arr1 [element] | main.rs:380:9:380:10 | n1 | provenance | |
| main.rs:391:9:391:12 | arr1 [element] | main.rs:392:11:392:14 | arr1 [element] | provenance | |
| main.rs:391:16:391:33 | [...] [element] | main.rs:391:9:391:12 | arr1 [element] | provenance | |
| main.rs:391:23:391:32 | source(...) | main.rs:391:16:391:33 | [...] [element] | provenance | |
| main.rs:392:11:392:14 | arr1 [element] | main.rs:393:9:393:17 | SlicePat [element] | provenance | |
| main.rs:393:9:393:17 | SlicePat [element] | main.rs:393:10:393:10 | a | provenance | |
| main.rs:393:9:393:17 | SlicePat [element] | main.rs:393:13:393:13 | b | provenance | |
| main.rs:393:9:393:17 | SlicePat [element] | main.rs:393:16:393:16 | c | provenance | |
| main.rs:393:10:393:10 | a | main.rs:394:18:394:18 | a | provenance | |
| main.rs:393:13:393:13 | b | main.rs:395:18:395:18 | b | provenance | |
| main.rs:393:16:393:16 | c | main.rs:396:18:396:18 | c | provenance | |
| main.rs:405:5:405:11 | [post] mut_arr [element] | main.rs:406:13:406:19 | mut_arr [element] | provenance | |
| main.rs:405:5:405:11 | [post] mut_arr [element] | main.rs:408:10:408:16 | mut_arr [element] | provenance | |
| main.rs:405:18:405:27 | source(...) | main.rs:405:5:405:11 | [post] mut_arr [element] | provenance | |
| main.rs:406:9:406:9 | d | main.rs:407:10:407:10 | d | provenance | |
| main.rs:406:13:406:19 | mut_arr [element] | main.rs:406:13:406:22 | mut_arr[1] | provenance | |
| main.rs:406:13:406:22 | mut_arr[1] | main.rs:406:9:406:9 | d | provenance | |
| main.rs:408:10:408:16 | mut_arr [element] | main.rs:408:10:408:19 | mut_arr[0] | provenance | |
| main.rs:431:9:431:9 | s | main.rs:432:10:432:10 | s | provenance | |
| main.rs:431:25:431:26 | source(...) | main.rs:431:9:431:9 | s | provenance | |
| main.rs:436:9:436:9 | a | main.rs:441:10:441:10 | a | provenance | |
| main.rs:436:13:436:22 | source(...) | main.rs:436:9:436:9 | a | provenance | |
| main.rs:438:9:438:9 | c | main.rs:439:18:439:18 | c | provenance | |
| main.rs:438:13:438:22 | source(...) | main.rs:438:9:438:9 | c | provenance | |
| main.rs:439:9:439:13 | c_ref [&ref] | main.rs:444:11:444:15 | c_ref [&ref] | provenance | |
| main.rs:439:17:439:18 | &c [&ref] | main.rs:439:9:439:13 | c_ref [&ref] | provenance | |
| main.rs:439:18:439:18 | c | main.rs:439:17:439:18 | &c [&ref] | provenance | |
| main.rs:444:11:444:15 | c_ref [&ref] | main.rs:444:10:444:15 | * ... | provenance | |
| main.rs:273:9:273:10 | i1 | main.rs:275:10:275:11 | i1 | provenance | |
| main.rs:273:14:273:15 | s1 [Ok] | main.rs:273:14:273:16 | TryExpr | provenance | |
| main.rs:273:14:273:16 | TryExpr | main.rs:273:9:273:10 | i1 | provenance | |
| main.rs:283:9:283:10 | s1 [Ok] | main.rs:284:10:284:11 | s1 [Ok] | provenance | |
| main.rs:283:32:283:45 | Ok(...) [Ok] | main.rs:283:9:283:10 | s1 [Ok] | provenance | |
| main.rs:283:35:283:44 | source(...) | main.rs:283:32:283:45 | Ok(...) [Ok] | provenance | |
| main.rs:284:10:284:11 | s1 [Ok] | main.rs:284:10:284:22 | s1.expect(...) | provenance | MaD:6 |
| main.rs:287:9:287:10 | s2 [Err] | main.rs:289:10:289:11 | s2 [Err] | provenance | |
| main.rs:287:32:287:46 | Err(...) [Err] | main.rs:287:9:287:10 | s2 [Err] | provenance | |
| main.rs:287:36:287:45 | source(...) | main.rs:287:32:287:46 | Err(...) [Err] | provenance | |
| main.rs:289:10:289:11 | s2 [Err] | main.rs:289:10:289:26 | s2.expect_err(...) | provenance | MaD:7 |
| main.rs:298:9:298:10 | s1 [A] | main.rs:300:11:300:12 | s1 [A] | provenance | |
| main.rs:298:14:298:39 | ...::A(...) [A] | main.rs:298:9:298:10 | s1 [A] | provenance | |
| main.rs:298:29:298:38 | source(...) | main.rs:298:14:298:39 | ...::A(...) [A] | provenance | |
| main.rs:300:11:300:12 | s1 [A] | main.rs:301:9:301:25 | ...::A(...) [A] | provenance | |
| main.rs:300:11:300:12 | s1 [A] | main.rs:304:11:304:12 | s1 [A] | provenance | |
| main.rs:301:9:301:25 | ...::A(...) [A] | main.rs:301:24:301:24 | n | provenance | |
| main.rs:301:24:301:24 | n | main.rs:301:35:301:35 | n | provenance | |
| main.rs:304:11:304:12 | s1 [A] | main.rs:305:9:305:25 | ...::A(...) [A] | provenance | |
| main.rs:305:9:305:25 | ...::A(...) [A] | main.rs:305:24:305:24 | n | provenance | |
| main.rs:305:24:305:24 | n | main.rs:305:55:305:55 | n | provenance | |
| main.rs:316:9:316:10 | s1 [A] | main.rs:318:11:318:12 | s1 [A] | provenance | |
| main.rs:316:14:316:26 | A(...) [A] | main.rs:316:9:316:10 | s1 [A] | provenance | |
| main.rs:316:16:316:25 | source(...) | main.rs:316:14:316:26 | A(...) [A] | provenance | |
| main.rs:318:11:318:12 | s1 [A] | main.rs:319:9:319:12 | A(...) [A] | provenance | |
| main.rs:318:11:318:12 | s1 [A] | main.rs:322:11:322:12 | s1 [A] | provenance | |
| main.rs:319:9:319:12 | A(...) [A] | main.rs:319:11:319:11 | n | provenance | |
| main.rs:319:11:319:11 | n | main.rs:319:22:319:22 | n | provenance | |
| main.rs:322:11:322:12 | s1 [A] | main.rs:323:9:323:12 | A(...) [A] | provenance | |
| main.rs:323:9:323:12 | A(...) [A] | main.rs:323:11:323:11 | n | provenance | |
| main.rs:323:11:323:11 | n | main.rs:323:29:323:29 | n | provenance | |
| main.rs:337:9:337:10 | s1 [C] | main.rs:341:11:341:12 | s1 [C] | provenance | |
| main.rs:337:14:339:5 | ...::C {...} [C] | main.rs:337:9:337:10 | s1 [C] | provenance | |
| main.rs:338:18:338:27 | source(...) | main.rs:337:14:339:5 | ...::C {...} [C] | provenance | |
| main.rs:341:11:341:12 | s1 [C] | main.rs:342:9:342:38 | ...::C {...} [C] | provenance | |
| main.rs:341:11:341:12 | s1 [C] | main.rs:345:11:345:12 | s1 [C] | provenance | |
| main.rs:342:9:342:38 | ...::C {...} [C] | main.rs:342:36:342:36 | n | provenance | |
| main.rs:342:36:342:36 | n | main.rs:342:48:342:48 | n | provenance | |
| main.rs:345:11:345:12 | s1 [C] | main.rs:346:9:346:38 | ...::C {...} [C] | provenance | |
| main.rs:346:9:346:38 | ...::C {...} [C] | main.rs:346:36:346:36 | n | provenance | |
| main.rs:346:36:346:36 | n | main.rs:346:81:346:81 | n | provenance | |
| main.rs:357:9:357:10 | s1 [C] | main.rs:361:11:361:12 | s1 [C] | provenance | |
| main.rs:357:14:359:5 | C {...} [C] | main.rs:357:9:357:10 | s1 [C] | provenance | |
| main.rs:358:18:358:27 | source(...) | main.rs:357:14:359:5 | C {...} [C] | provenance | |
| main.rs:361:11:361:12 | s1 [C] | main.rs:362:9:362:24 | C {...} [C] | provenance | |
| main.rs:361:11:361:12 | s1 [C] | main.rs:365:11:365:12 | s1 [C] | provenance | |
| main.rs:362:9:362:24 | C {...} [C] | main.rs:362:22:362:22 | n | provenance | |
| main.rs:362:22:362:22 | n | main.rs:362:34:362:34 | n | provenance | |
| main.rs:365:11:365:12 | s1 [C] | main.rs:366:9:366:24 | C {...} [C] | provenance | |
| main.rs:366:9:366:24 | C {...} [C] | main.rs:366:22:366:22 | n | provenance | |
| main.rs:366:22:366:22 | n | main.rs:366:53:366:53 | n | provenance | |
| main.rs:378:9:378:12 | arr1 [element] | main.rs:379:14:379:17 | arr1 [element] | provenance | |
| main.rs:378:16:378:33 | [...] [element] | main.rs:378:9:378:12 | arr1 [element] | provenance | |
| main.rs:378:23:378:32 | source(...) | main.rs:378:16:378:33 | [...] [element] | provenance | |
| main.rs:379:9:379:10 | n1 | main.rs:380:10:380:11 | n1 | provenance | |
| main.rs:379:14:379:17 | arr1 [element] | main.rs:379:14:379:20 | arr1[2] | provenance | |
| main.rs:379:14:379:20 | arr1[2] | main.rs:379:9:379:10 | n1 | provenance | |
| main.rs:382:9:382:12 | arr2 [element] | main.rs:383:14:383:17 | arr2 [element] | provenance | |
| main.rs:382:16:382:31 | [...; 10] [element] | main.rs:382:9:382:12 | arr2 [element] | provenance | |
| main.rs:382:17:382:26 | source(...) | main.rs:382:16:382:31 | [...; 10] [element] | provenance | |
| main.rs:383:9:383:10 | n2 | main.rs:384:10:384:11 | n2 | provenance | |
| main.rs:383:14:383:17 | arr2 [element] | main.rs:383:14:383:20 | arr2[4] | provenance | |
| main.rs:383:14:383:20 | arr2[4] | main.rs:383:9:383:10 | n2 | provenance | |
| main.rs:392:9:392:12 | arr1 [element] | main.rs:393:15:393:18 | arr1 [element] | provenance | |
| main.rs:392:16:392:33 | [...] [element] | main.rs:392:9:392:12 | arr1 [element] | provenance | |
| main.rs:392:23:392:32 | source(...) | main.rs:392:16:392:33 | [...] [element] | provenance | |
| main.rs:393:9:393:10 | n1 | main.rs:394:14:394:15 | n1 | provenance | |
| main.rs:393:15:393:18 | arr1 [element] | main.rs:393:9:393:10 | n1 | provenance | |
| main.rs:404:9:404:12 | arr1 [element] | main.rs:405:11:405:14 | arr1 [element] | provenance | |
| main.rs:404:16:404:33 | [...] [element] | main.rs:404:9:404:12 | arr1 [element] | provenance | |
| main.rs:404:23:404:32 | source(...) | main.rs:404:16:404:33 | [...] [element] | provenance | |
| main.rs:405:11:405:14 | arr1 [element] | main.rs:406:9:406:17 | SlicePat [element] | provenance | |
| main.rs:406:9:406:17 | SlicePat [element] | main.rs:406:10:406:10 | a | provenance | |
| main.rs:406:9:406:17 | SlicePat [element] | main.rs:406:13:406:13 | b | provenance | |
| main.rs:406:9:406:17 | SlicePat [element] | main.rs:406:16:406:16 | c | provenance | |
| main.rs:406:10:406:10 | a | main.rs:407:18:407:18 | a | provenance | |
| main.rs:406:13:406:13 | b | main.rs:408:18:408:18 | b | provenance | |
| main.rs:406:16:406:16 | c | main.rs:409:18:409:18 | c | provenance | |
| main.rs:418:5:418:11 | [post] mut_arr [element] | main.rs:419:13:419:19 | mut_arr [element] | provenance | |
| main.rs:418:5:418:11 | [post] mut_arr [element] | main.rs:421:10:421:16 | mut_arr [element] | provenance | |
| main.rs:418:18:418:27 | source(...) | main.rs:418:5:418:11 | [post] mut_arr [element] | provenance | |
| main.rs:419:9:419:9 | d | main.rs:420:10:420:10 | d | provenance | |
| main.rs:419:13:419:19 | mut_arr [element] | main.rs:419:13:419:22 | mut_arr[1] | provenance | |
| main.rs:419:13:419:22 | mut_arr[1] | main.rs:419:9:419:9 | d | provenance | |
| main.rs:421:10:421:16 | mut_arr [element] | main.rs:421:10:421:19 | mut_arr[0] | provenance | |
| main.rs:444:9:444:9 | s | main.rs:445:10:445:10 | s | provenance | |
| main.rs:444:25:444:26 | source(...) | main.rs:444:9:444:9 | s | provenance | |
| main.rs:449:9:449:9 | a | main.rs:454:10:454:10 | a | provenance | |
| main.rs:449:13:449:22 | source(...) | main.rs:449:9:449:9 | a | provenance | |
| main.rs:451:9:451:9 | c | main.rs:452:18:452:18 | c | provenance | |
| main.rs:451:13:451:22 | source(...) | main.rs:451:9:451:9 | c | provenance | |
| main.rs:452:9:452:13 | c_ref [&ref] | main.rs:457:11:457:15 | c_ref [&ref] | provenance | |
| main.rs:452:17:452:18 | &c [&ref] | main.rs:452:9:452:13 | c_ref [&ref] | provenance | |
| main.rs:452:18:452:18 | c | main.rs:452:17:452:18 | &c [&ref] | provenance | |
| main.rs:457:11:457:15 | c_ref [&ref] | main.rs:457:10:457:15 | * ... | provenance | |
nodes
| main.rs:18:10:18:18 | source(...) | semmle.label | source(...) |
| main.rs:22:9:22:9 | s | semmle.label | s |
@@ -242,168 +250,177 @@ nodes
| main.rs:154:9:154:28 | Point {...} [Point.x] | semmle.label | Point {...} [Point.x] |
| main.rs:154:20:154:20 | a | semmle.label | a |
| main.rs:155:10:155:10 | a | semmle.label | a |
| main.rs:178:9:178:9 | p [Point3D.plane, Point.y] | semmle.label | p [Point3D.plane, Point.y] |
| main.rs:178:13:184:5 | Point3D {...} [Point3D.plane, Point.y] | semmle.label | Point3D {...} [Point3D.plane, Point.y] |
| main.rs:179:16:182:9 | Point {...} [Point.y] | semmle.label | Point {...} [Point.y] |
| main.rs:181:16:181:25 | source(...) | semmle.label | source(...) |
| main.rs:185:11:185:11 | p [Point3D.plane, Point.y] | semmle.label | p [Point3D.plane, Point.y] |
| main.rs:186:9:189:9 | Point3D {...} [Point3D.plane, Point.y] | semmle.label | Point3D {...} [Point3D.plane, Point.y] |
| main.rs:187:20:187:33 | Point {...} [Point.y] | semmle.label | Point {...} [Point.y] |
| main.rs:187:31:187:31 | y | semmle.label | y |
| main.rs:191:18:191:18 | y | semmle.label | y |
| main.rs:201:9:201:10 | s1 [Some] | semmle.label | s1 [Some] |
| main.rs:201:14:201:37 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] |
| main.rs:201:27:201:36 | source(...) | semmle.label | source(...) |
| main.rs:203:11:203:12 | s1 [Some] | semmle.label | s1 [Some] |
| main.rs:204:9:204:23 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] |
| main.rs:204:22:204:22 | n | semmle.label | n |
| main.rs:204:33:204:33 | n | semmle.label | n |
| main.rs:178:9:178:9 | y | semmle.label | y |
| main.rs:178:13:178:22 | source(...) | semmle.label | source(...) |
| main.rs:179:9:179:9 | p [Point3D.plane, Point.y] | semmle.label | p [Point3D.plane, Point.y] |
| main.rs:179:13:182:5 | Point3D {...} [Point3D.plane, Point.y] | semmle.label | Point3D {...} [Point3D.plane, Point.y] |
| main.rs:180:16:180:32 | Point {...} [Point.y] | semmle.label | Point {...} [Point.y] |
| main.rs:180:30:180:30 | y | semmle.label | y |
| main.rs:183:11:183:11 | p [Point3D.plane, Point.y] | semmle.label | p [Point3D.plane, Point.y] |
| main.rs:184:9:187:9 | Point3D {...} [Point3D.plane, Point.y] | semmle.label | Point3D {...} [Point3D.plane, Point.y] |
| main.rs:185:20:185:33 | Point {...} [Point.y] | semmle.label | Point {...} [Point.y] |
| main.rs:185:31:185:31 | y | semmle.label | y |
| main.rs:189:18:189:18 | y | semmle.label | y |
| main.rs:198:9:198:9 | s [MyTupleStruct(0)] | semmle.label | s [MyTupleStruct(0)] |
| main.rs:198:13:198:40 | MyTupleStruct(...) [MyTupleStruct(0)] | semmle.label | MyTupleStruct(...) [MyTupleStruct(0)] |
| main.rs:198:27:198:36 | source(...) | semmle.label | source(...) |
| main.rs:202:11:202:11 | s [MyTupleStruct(0)] | semmle.label | s [MyTupleStruct(0)] |
| main.rs:203:9:203:27 | MyTupleStruct(...) [MyTupleStruct(0)] | semmle.label | MyTupleStruct(...) [MyTupleStruct(0)] |
| main.rs:203:23:203:23 | x | semmle.label | x |
| main.rs:204:18:204:18 | x | semmle.label | x |
| main.rs:214:9:214:10 | s1 [Some] | semmle.label | s1 [Some] |
| main.rs:214:14:214:29 | Some(...) [Some] | semmle.label | Some(...) [Some] |
| main.rs:214:19:214:28 | source(...) | semmle.label | source(...) |
| main.rs:214:14:214:37 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] |
| main.rs:214:27:214:36 | source(...) | semmle.label | source(...) |
| main.rs:216:11:216:12 | s1 [Some] | semmle.label | s1 [Some] |
| main.rs:217:9:217:15 | Some(...) [Some] | semmle.label | Some(...) [Some] |
| main.rs:217:14:217:14 | n | semmle.label | n |
| main.rs:217:25:217:25 | n | semmle.label | n |
| main.rs:217:9:217:23 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] |
| main.rs:217:22:217:22 | n | semmle.label | n |
| main.rs:217:33:217:33 | n | semmle.label | n |
| main.rs:227:9:227:10 | s1 [Some] | semmle.label | s1 [Some] |
| main.rs:227:14:227:29 | Some(...) [Some] | semmle.label | Some(...) [Some] |
| main.rs:227:19:227:28 | source(...) | semmle.label | source(...) |
| main.rs:228:10:228:11 | s1 [Some] | semmle.label | s1 [Some] |
| main.rs:228:10:228:20 | s1.unwrap(...) | semmle.label | s1.unwrap(...) |
| main.rs:232:9:232:10 | s1 [Some] | semmle.label | s1 [Some] |
| main.rs:232:14:232:29 | Some(...) [Some] | semmle.label | Some(...) [Some] |
| main.rs:232:19:232:28 | source(...) | semmle.label | source(...) |
| main.rs:233:10:233:11 | s1 [Some] | semmle.label | s1 [Some] |
| main.rs:233:10:233:24 | s1.unwrap_or(...) | semmle.label | s1.unwrap_or(...) |
| main.rs:236:10:236:33 | s2.unwrap_or(...) | semmle.label | s2.unwrap_or(...) |
| main.rs:236:23:236:32 | source(...) | semmle.label | source(...) |
| main.rs:229:11:229:12 | s1 [Some] | semmle.label | s1 [Some] |
| main.rs:230:9:230:15 | Some(...) [Some] | semmle.label | Some(...) [Some] |
| main.rs:230:14:230:14 | n | semmle.label | n |
| main.rs:230:25:230:25 | n | semmle.label | n |
| main.rs:240:9:240:10 | s1 [Some] | semmle.label | s1 [Some] |
| main.rs:240:14:240:29 | Some(...) [Some] | semmle.label | Some(...) [Some] |
| main.rs:240:19:240:28 | source(...) | semmle.label | source(...) |
| main.rs:241:10:241:11 | s1 [Some] | semmle.label | s1 [Some] |
| main.rs:241:10:241:32 | s1.unwrap_or_else(...) | semmle.label | s1.unwrap_or_else(...) |
| main.rs:244:10:244:41 | s2.unwrap_or_else(...) | semmle.label | s2.unwrap_or_else(...) |
| main.rs:244:31:244:40 | source(...) | semmle.label | source(...) |
| main.rs:248:9:248:10 | s1 [Some] | semmle.label | s1 [Some] |
| main.rs:248:14:248:29 | Some(...) [Some] | semmle.label | Some(...) [Some] |
| main.rs:248:19:248:28 | source(...) | semmle.label | source(...) |
| main.rs:250:9:250:10 | i1 | semmle.label | i1 |
| main.rs:250:14:250:15 | s1 [Some] | semmle.label | s1 [Some] |
| main.rs:250:14:250:16 | TryExpr | semmle.label | TryExpr |
| main.rs:251:10:251:11 | i1 | semmle.label | i1 |
| main.rs:257:9:257:10 | s1 [Ok] | semmle.label | s1 [Ok] |
| main.rs:257:32:257:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] |
| main.rs:257:35:257:44 | source(...) | semmle.label | source(...) |
| main.rs:260:9:260:10 | i1 | semmle.label | i1 |
| main.rs:260:14:260:15 | s1 [Ok] | semmle.label | s1 [Ok] |
| main.rs:260:14:260:16 | TryExpr | semmle.label | TryExpr |
| main.rs:262:10:262:11 | i1 | semmle.label | i1 |
| main.rs:241:10:241:20 | s1.unwrap(...) | semmle.label | s1.unwrap(...) |
| 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:246:10:246:11 | s1 [Some] | semmle.label | s1 [Some] |
| main.rs:246:10:246:24 | s1.unwrap_or(...) | semmle.label | s1.unwrap_or(...) |
| main.rs:249:10:249:33 | s2.unwrap_or(...) | semmle.label | s2.unwrap_or(...) |
| main.rs:249:23:249:32 | source(...) | semmle.label | source(...) |
| main.rs:253:9:253:10 | s1 [Some] | semmle.label | s1 [Some] |
| main.rs:253:14:253:29 | Some(...) [Some] | semmle.label | Some(...) [Some] |
| main.rs:253:19:253:28 | source(...) | semmle.label | source(...) |
| main.rs:254:10:254:11 | s1 [Some] | semmle.label | s1 [Some] |
| main.rs:254:10:254:32 | s1.unwrap_or_else(...) | semmle.label | s1.unwrap_or_else(...) |
| main.rs:257:10:257:41 | s2.unwrap_or_else(...) | semmle.label | s2.unwrap_or_else(...) |
| main.rs:257:31:257:40 | source(...) | semmle.label | source(...) |
| main.rs:261:9:261:10 | s1 [Some] | semmle.label | s1 [Some] |
| main.rs:261:14:261:29 | Some(...) [Some] | semmle.label | Some(...) [Some] |
| main.rs:261:19:261:28 | source(...) | semmle.label | source(...) |
| main.rs:263:9:263:10 | i1 | semmle.label | i1 |
| main.rs:263:14:263:15 | s1 [Some] | semmle.label | s1 [Some] |
| main.rs:263:14:263:16 | TryExpr | semmle.label | TryExpr |
| main.rs:264:10:264:11 | i1 | semmle.label | i1 |
| main.rs:270:9:270:10 | s1 [Ok] | semmle.label | s1 [Ok] |
| main.rs:270:32:270:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] |
| main.rs:270:35:270:44 | source(...) | semmle.label | source(...) |
| main.rs:271:10:271:11 | s1 [Ok] | semmle.label | s1 [Ok] |
| main.rs:271:10:271:22 | s1.expect(...) | semmle.label | s1.expect(...) |
| main.rs:274:9:274:10 | s2 [Err] | semmle.label | s2 [Err] |
| main.rs:274:32:274:46 | Err(...) [Err] | semmle.label | Err(...) [Err] |
| main.rs:274:36:274:45 | source(...) | semmle.label | source(...) |
| main.rs:276:10:276:11 | s2 [Err] | semmle.label | s2 [Err] |
| main.rs:276:10:276:26 | s2.expect_err(...) | semmle.label | s2.expect_err(...) |
| main.rs:285:9:285:10 | s1 [A] | semmle.label | s1 [A] |
| main.rs:285:14:285:39 | ...::A(...) [A] | semmle.label | ...::A(...) [A] |
| main.rs:285:29:285:38 | source(...) | semmle.label | source(...) |
| main.rs:287:11:287:12 | s1 [A] | semmle.label | s1 [A] |
| main.rs:288:9:288:25 | ...::A(...) [A] | semmle.label | ...::A(...) [A] |
| main.rs:288:24:288:24 | n | semmle.label | n |
| main.rs:288:35:288:35 | n | semmle.label | n |
| main.rs:291:11:291:12 | s1 [A] | semmle.label | s1 [A] |
| main.rs:292:9:292:25 | ...::A(...) [A] | semmle.label | ...::A(...) [A] |
| main.rs:292:24:292:24 | n | semmle.label | n |
| main.rs:292:55:292:55 | n | semmle.label | n |
| main.rs:303:9:303:10 | s1 [A] | semmle.label | s1 [A] |
| main.rs:303:14:303:26 | A(...) [A] | semmle.label | A(...) [A] |
| main.rs:303:16:303:25 | source(...) | semmle.label | source(...) |
| main.rs:305:11:305:12 | s1 [A] | semmle.label | s1 [A] |
| main.rs:306:9:306:12 | A(...) [A] | semmle.label | A(...) [A] |
| main.rs:306:11:306:11 | n | semmle.label | n |
| main.rs:306:22:306:22 | n | semmle.label | n |
| main.rs:309:11:309:12 | s1 [A] | semmle.label | s1 [A] |
| main.rs:310:9:310:12 | A(...) [A] | semmle.label | A(...) [A] |
| main.rs:310:11:310:11 | n | semmle.label | n |
| main.rs:310:29:310:29 | n | semmle.label | n |
| main.rs:324:9:324:10 | s1 [C] | semmle.label | s1 [C] |
| main.rs:324:14:326:5 | ...::C {...} [C] | semmle.label | ...::C {...} [C] |
| main.rs:325:18:325:27 | source(...) | semmle.label | source(...) |
| main.rs:328:11:328:12 | s1 [C] | semmle.label | s1 [C] |
| main.rs:329:9:329:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] |
| main.rs:329:36:329:36 | n | semmle.label | n |
| main.rs:329:48:329:48 | n | semmle.label | n |
| main.rs:332:11:332:12 | s1 [C] | semmle.label | s1 [C] |
| main.rs:333:9:333:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] |
| main.rs:333:36:333:36 | n | semmle.label | n |
| main.rs:333:81:333:81 | n | semmle.label | n |
| main.rs:344:9:344:10 | s1 [C] | semmle.label | s1 [C] |
| main.rs:344:14:346:5 | C {...} [C] | semmle.label | C {...} [C] |
| main.rs:345:18:345:27 | source(...) | semmle.label | source(...) |
| main.rs:348:11:348:12 | s1 [C] | semmle.label | s1 [C] |
| main.rs:349:9:349:24 | C {...} [C] | semmle.label | C {...} [C] |
| main.rs:349:22:349:22 | n | semmle.label | n |
| main.rs:349:34:349:34 | n | semmle.label | n |
| main.rs:352:11:352:12 | s1 [C] | semmle.label | s1 [C] |
| main.rs:353:9:353:24 | C {...} [C] | semmle.label | C {...} [C] |
| main.rs:353:22:353:22 | n | semmle.label | n |
| main.rs:353:53:353:53 | n | semmle.label | n |
| main.rs:365:9:365:12 | arr1 [element] | semmle.label | arr1 [element] |
| main.rs:365:16:365:33 | [...] [element] | semmle.label | [...] [element] |
| main.rs:365:23:365:32 | source(...) | semmle.label | source(...) |
| main.rs:366:9:366:10 | n1 | semmle.label | n1 |
| main.rs:366:14:366:17 | arr1 [element] | semmle.label | arr1 [element] |
| main.rs:366:14:366:20 | arr1[2] | semmle.label | arr1[2] |
| main.rs:367:10:367:11 | n1 | semmle.label | n1 |
| main.rs:369:9:369:12 | arr2 [element] | semmle.label | arr2 [element] |
| main.rs:369:16:369:31 | [...; 10] [element] | semmle.label | [...; 10] [element] |
| main.rs:369:17:369:26 | source(...) | semmle.label | source(...) |
| main.rs:370:9:370:10 | n2 | semmle.label | n2 |
| main.rs:370:14:370:17 | arr2 [element] | semmle.label | arr2 [element] |
| main.rs:370:14:370:20 | arr2[4] | semmle.label | arr2[4] |
| main.rs:371:10:371:11 | n2 | semmle.label | n2 |
| main.rs:379:9:379:12 | arr1 [element] | semmle.label | arr1 [element] |
| main.rs:379:16:379:33 | [...] [element] | semmle.label | [...] [element] |
| main.rs:379:23:379:32 | source(...) | semmle.label | source(...) |
| main.rs:380:9:380:10 | n1 | semmle.label | n1 |
| main.rs:380:15:380:18 | arr1 [element] | semmle.label | arr1 [element] |
| main.rs:381:14:381:15 | n1 | semmle.label | n1 |
| main.rs:391:9:391:12 | arr1 [element] | semmle.label | arr1 [element] |
| main.rs:391:16:391:33 | [...] [element] | semmle.label | [...] [element] |
| main.rs:391:23:391:32 | source(...) | semmle.label | source(...) |
| main.rs:392:11:392:14 | arr1 [element] | semmle.label | arr1 [element] |
| main.rs:393:9:393:17 | SlicePat [element] | semmle.label | SlicePat [element] |
| main.rs:393:10:393:10 | a | semmle.label | a |
| main.rs:393:13:393:13 | b | semmle.label | b |
| main.rs:393:16:393:16 | c | semmle.label | c |
| main.rs:394:18:394:18 | a | semmle.label | a |
| main.rs:395:18:395:18 | b | semmle.label | b |
| main.rs:396:18:396:18 | c | semmle.label | c |
| main.rs:405:5:405:11 | [post] mut_arr [element] | semmle.label | [post] mut_arr [element] |
| main.rs:405:18:405:27 | source(...) | semmle.label | source(...) |
| main.rs:406:9:406:9 | d | semmle.label | d |
| main.rs:406:13:406:19 | mut_arr [element] | semmle.label | mut_arr [element] |
| main.rs:406:13:406:22 | mut_arr[1] | semmle.label | mut_arr[1] |
| main.rs:407:10:407:10 | d | semmle.label | d |
| main.rs:408:10:408:16 | mut_arr [element] | semmle.label | mut_arr [element] |
| main.rs:408:10:408:19 | mut_arr[0] | semmle.label | mut_arr[0] |
| main.rs:431:9:431:9 | s | semmle.label | s |
| main.rs:431:25:431:26 | source(...) | semmle.label | source(...) |
| main.rs:432:10:432:10 | s | semmle.label | s |
| main.rs:436:9:436:9 | a | semmle.label | a |
| main.rs:436:13:436:22 | source(...) | semmle.label | source(...) |
| main.rs:438:9:438:9 | c | semmle.label | c |
| main.rs:438:13:438:22 | source(...) | semmle.label | source(...) |
| main.rs:439:9:439:13 | c_ref [&ref] | semmle.label | c_ref [&ref] |
| main.rs:439:17:439:18 | &c [&ref] | semmle.label | &c [&ref] |
| main.rs:439:18:439:18 | c | semmle.label | c |
| main.rs:441:10:441:10 | a | semmle.label | a |
| main.rs:444:10:444:15 | * ... | semmle.label | * ... |
| main.rs:444:11:444:15 | c_ref [&ref] | semmle.label | c_ref [&ref] |
| main.rs:273:9:273:10 | i1 | semmle.label | i1 |
| main.rs:273:14:273:15 | s1 [Ok] | semmle.label | s1 [Ok] |
| main.rs:273:14:273:16 | TryExpr | semmle.label | TryExpr |
| main.rs:275:10:275:11 | i1 | semmle.label | i1 |
| main.rs:283:9:283:10 | s1 [Ok] | semmle.label | s1 [Ok] |
| main.rs:283:32:283:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] |
| main.rs:283:35:283:44 | source(...) | semmle.label | source(...) |
| main.rs:284:10:284:11 | s1 [Ok] | semmle.label | s1 [Ok] |
| main.rs:284:10:284:22 | s1.expect(...) | semmle.label | s1.expect(...) |
| main.rs:287:9:287:10 | s2 [Err] | semmle.label | s2 [Err] |
| main.rs:287:32:287:46 | Err(...) [Err] | semmle.label | Err(...) [Err] |
| main.rs:287:36:287:45 | source(...) | semmle.label | source(...) |
| main.rs:289:10:289:11 | s2 [Err] | semmle.label | s2 [Err] |
| main.rs:289:10:289:26 | s2.expect_err(...) | semmle.label | s2.expect_err(...) |
| main.rs:298:9:298:10 | s1 [A] | semmle.label | s1 [A] |
| main.rs:298:14:298:39 | ...::A(...) [A] | semmle.label | ...::A(...) [A] |
| main.rs:298:29:298:38 | source(...) | semmle.label | source(...) |
| main.rs:300:11:300:12 | s1 [A] | semmle.label | s1 [A] |
| main.rs:301:9:301:25 | ...::A(...) [A] | semmle.label | ...::A(...) [A] |
| main.rs:301:24:301:24 | n | semmle.label | n |
| main.rs:301:35:301:35 | n | semmle.label | n |
| main.rs:304:11:304:12 | s1 [A] | semmle.label | s1 [A] |
| main.rs:305:9:305:25 | ...::A(...) [A] | semmle.label | ...::A(...) [A] |
| main.rs:305:24:305:24 | n | semmle.label | n |
| main.rs:305:55:305:55 | n | semmle.label | n |
| main.rs:316:9:316:10 | s1 [A] | semmle.label | s1 [A] |
| main.rs:316:14:316:26 | A(...) [A] | semmle.label | A(...) [A] |
| main.rs:316:16:316:25 | source(...) | semmle.label | source(...) |
| main.rs:318:11:318:12 | s1 [A] | semmle.label | s1 [A] |
| main.rs:319:9:319:12 | A(...) [A] | semmle.label | A(...) [A] |
| main.rs:319:11:319:11 | n | semmle.label | n |
| main.rs:319:22:319:22 | n | semmle.label | n |
| main.rs:322:11:322:12 | s1 [A] | semmle.label | s1 [A] |
| main.rs:323:9:323:12 | A(...) [A] | semmle.label | A(...) [A] |
| main.rs:323:11:323:11 | n | semmle.label | n |
| main.rs:323:29:323:29 | n | semmle.label | n |
| main.rs:337:9:337:10 | s1 [C] | semmle.label | s1 [C] |
| main.rs:337:14:339:5 | ...::C {...} [C] | semmle.label | ...::C {...} [C] |
| main.rs:338:18:338:27 | source(...) | semmle.label | source(...) |
| main.rs:341:11:341:12 | s1 [C] | semmle.label | s1 [C] |
| main.rs:342:9:342:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] |
| main.rs:342:36:342:36 | n | semmle.label | n |
| main.rs:342:48:342:48 | n | semmle.label | n |
| main.rs:345:11:345:12 | s1 [C] | semmle.label | s1 [C] |
| main.rs:346:9:346:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] |
| main.rs:346:36:346:36 | n | semmle.label | n |
| main.rs:346:81:346:81 | n | semmle.label | n |
| main.rs:357:9:357:10 | s1 [C] | semmle.label | s1 [C] |
| main.rs:357:14:359:5 | C {...} [C] | semmle.label | C {...} [C] |
| main.rs:358:18:358:27 | source(...) | semmle.label | source(...) |
| main.rs:361:11:361:12 | s1 [C] | semmle.label | s1 [C] |
| main.rs:362:9:362:24 | C {...} [C] | semmle.label | C {...} [C] |
| main.rs:362:22:362:22 | n | semmle.label | n |
| main.rs:362:34:362:34 | n | semmle.label | n |
| main.rs:365:11:365:12 | s1 [C] | semmle.label | s1 [C] |
| main.rs:366:9:366:24 | C {...} [C] | semmle.label | C {...} [C] |
| main.rs:366:22:366:22 | n | semmle.label | n |
| main.rs:366:53:366:53 | n | semmle.label | n |
| main.rs:378:9:378:12 | arr1 [element] | semmle.label | arr1 [element] |
| main.rs:378:16:378:33 | [...] [element] | semmle.label | [...] [element] |
| main.rs:378:23:378:32 | source(...) | semmle.label | source(...) |
| main.rs:379:9:379:10 | n1 | semmle.label | n1 |
| main.rs:379:14:379:17 | arr1 [element] | semmle.label | arr1 [element] |
| main.rs:379:14:379:20 | arr1[2] | semmle.label | arr1[2] |
| main.rs:380:10:380:11 | n1 | semmle.label | n1 |
| main.rs:382:9:382:12 | arr2 [element] | semmle.label | arr2 [element] |
| main.rs:382:16:382:31 | [...; 10] [element] | semmle.label | [...; 10] [element] |
| main.rs:382:17:382:26 | source(...) | semmle.label | source(...) |
| main.rs:383:9:383:10 | n2 | semmle.label | n2 |
| main.rs:383:14:383:17 | arr2 [element] | semmle.label | arr2 [element] |
| main.rs:383:14:383:20 | arr2[4] | semmle.label | arr2[4] |
| main.rs:384:10:384:11 | n2 | semmle.label | n2 |
| main.rs:392:9:392:12 | arr1 [element] | semmle.label | arr1 [element] |
| main.rs:392:16:392:33 | [...] [element] | semmle.label | [...] [element] |
| main.rs:392:23:392:32 | source(...) | semmle.label | source(...) |
| main.rs:393:9:393:10 | n1 | semmle.label | n1 |
| main.rs:393:15:393:18 | arr1 [element] | semmle.label | arr1 [element] |
| main.rs:394:14:394:15 | n1 | semmle.label | n1 |
| main.rs:404:9:404:12 | arr1 [element] | semmle.label | arr1 [element] |
| main.rs:404:16:404:33 | [...] [element] | semmle.label | [...] [element] |
| main.rs:404:23:404:32 | source(...) | semmle.label | source(...) |
| main.rs:405:11:405:14 | arr1 [element] | semmle.label | arr1 [element] |
| main.rs:406:9:406:17 | SlicePat [element] | semmle.label | SlicePat [element] |
| main.rs:406:10:406:10 | a | semmle.label | a |
| main.rs:406:13:406:13 | b | semmle.label | b |
| main.rs:406:16:406:16 | c | semmle.label | c |
| main.rs:407:18:407:18 | a | semmle.label | a |
| main.rs:408:18:408:18 | b | semmle.label | b |
| main.rs:409:18:409:18 | c | semmle.label | c |
| main.rs:418:5:418:11 | [post] mut_arr [element] | semmle.label | [post] mut_arr [element] |
| main.rs:418:18:418:27 | source(...) | semmle.label | source(...) |
| main.rs:419:9:419:9 | d | semmle.label | d |
| main.rs:419:13:419:19 | mut_arr [element] | semmle.label | mut_arr [element] |
| main.rs:419:13:419:22 | mut_arr[1] | semmle.label | mut_arr[1] |
| main.rs:420:10:420:10 | d | semmle.label | d |
| main.rs:421:10:421:16 | mut_arr [element] | semmle.label | mut_arr [element] |
| main.rs:421:10:421:19 | mut_arr[0] | semmle.label | mut_arr[0] |
| main.rs:444:9:444:9 | s | semmle.label | s |
| main.rs:444:25:444:26 | source(...) | semmle.label | source(...) |
| main.rs:445:10:445:10 | s | semmle.label | s |
| main.rs:449:9:449:9 | a | semmle.label | a |
| main.rs:449:13:449:22 | source(...) | semmle.label | source(...) |
| main.rs:451:9:451:9 | c | semmle.label | c |
| main.rs:451:13:451:22 | source(...) | semmle.label | source(...) |
| main.rs:452:9:452:13 | c_ref [&ref] | semmle.label | c_ref [&ref] |
| main.rs:452:17:452:18 | &c [&ref] | semmle.label | &c [&ref] |
| main.rs:452:18:452:18 | c | semmle.label | c |
| main.rs:454:10:454:10 | a | semmle.label | a |
| main.rs:457:10:457:15 | * ... | semmle.label | * ... |
| main.rs:457:11:457:15 | c_ref [&ref] | semmle.label | c_ref [&ref] |
subpaths
testFailures
#select
@@ -419,34 +436,35 @@ testFailures
| main.rs:116:10:116:12 | a.0 | main.rs:114:11:114:20 | source(...) | main.rs:116:10:116:12 | a.0 | $@ | main.rs:114:11:114:20 | source(...) | source(...) |
| main.rs:124:10:124:15 | ... .1 | main.rs:121:17:121:26 | source(...) | main.rs:124:10:124:15 | ... .1 | $@ | main.rs:121:17:121:26 | source(...) | source(...) |
| main.rs:155:10:155:10 | a | main.rs:151:12:151:21 | source(...) | main.rs:155:10:155:10 | a | $@ | main.rs:151:12:151:21 | source(...) | source(...) |
| main.rs:191:18:191:18 | y | main.rs:181:16:181:25 | source(...) | main.rs:191:18:191:18 | y | $@ | main.rs:181:16:181:25 | source(...) | source(...) |
| main.rs:204:33:204:33 | n | main.rs:201:27:201:36 | source(...) | main.rs:204:33:204:33 | n | $@ | main.rs:201:27:201:36 | source(...) | source(...) |
| main.rs:217:25:217:25 | n | main.rs:214:19:214:28 | source(...) | main.rs:217:25:217:25 | n | $@ | main.rs:214:19:214:28 | source(...) | source(...) |
| main.rs:228:10:228:20 | s1.unwrap(...) | main.rs:227:19:227:28 | source(...) | main.rs:228:10:228:20 | s1.unwrap(...) | $@ | main.rs:227:19:227:28 | source(...) | source(...) |
| main.rs:233:10:233:24 | s1.unwrap_or(...) | main.rs:232:19:232:28 | source(...) | main.rs:233:10:233:24 | s1.unwrap_or(...) | $@ | main.rs:232:19:232:28 | source(...) | source(...) |
| main.rs:236:10:236:33 | s2.unwrap_or(...) | main.rs:236:23:236:32 | source(...) | main.rs:236:10:236:33 | s2.unwrap_or(...) | $@ | main.rs:236:23:236:32 | source(...) | source(...) |
| main.rs:241:10:241:32 | s1.unwrap_or_else(...) | main.rs:240:19:240:28 | source(...) | main.rs:241:10:241:32 | s1.unwrap_or_else(...) | $@ | main.rs:240:19:240:28 | source(...) | source(...) |
| main.rs:244:10:244:41 | s2.unwrap_or_else(...) | main.rs:244:31:244:40 | source(...) | main.rs:244:10:244:41 | s2.unwrap_or_else(...) | $@ | main.rs:244:31:244:40 | source(...) | source(...) |
| main.rs:251:10:251:11 | i1 | main.rs:248:19:248:28 | source(...) | main.rs:251:10:251:11 | i1 | $@ | main.rs:248:19:248:28 | source(...) | source(...) |
| main.rs:262:10:262:11 | i1 | main.rs:257:35:257:44 | source(...) | main.rs:262:10:262:11 | i1 | $@ | main.rs:257:35:257:44 | source(...) | source(...) |
| main.rs:271:10:271:22 | s1.expect(...) | main.rs:270:35:270:44 | source(...) | main.rs:271:10:271:22 | s1.expect(...) | $@ | main.rs:270:35:270:44 | source(...) | source(...) |
| main.rs:276:10:276:26 | s2.expect_err(...) | main.rs:274:36:274:45 | source(...) | main.rs:276:10:276:26 | s2.expect_err(...) | $@ | main.rs:274:36:274:45 | source(...) | source(...) |
| main.rs:288:35:288:35 | n | main.rs:285:29:285:38 | source(...) | main.rs:288:35:288:35 | n | $@ | main.rs:285:29:285:38 | source(...) | source(...) |
| main.rs:292:55:292:55 | n | main.rs:285:29:285:38 | source(...) | main.rs:292:55:292:55 | n | $@ | main.rs:285:29:285:38 | source(...) | source(...) |
| main.rs:306:22:306:22 | n | main.rs:303:16:303:25 | source(...) | main.rs:306:22:306:22 | n | $@ | main.rs:303:16:303:25 | source(...) | source(...) |
| main.rs:310:29:310:29 | n | main.rs:303:16:303:25 | source(...) | main.rs:310:29:310:29 | n | $@ | main.rs:303:16:303:25 | source(...) | source(...) |
| main.rs:329:48:329:48 | n | main.rs:325:18:325:27 | source(...) | main.rs:329:48:329:48 | n | $@ | main.rs:325:18:325:27 | source(...) | source(...) |
| main.rs:333:81:333:81 | n | main.rs:325:18:325:27 | source(...) | main.rs:333:81:333:81 | n | $@ | main.rs:325:18:325:27 | source(...) | source(...) |
| main.rs:349:34:349:34 | n | main.rs:345:18:345:27 | source(...) | main.rs:349:34:349:34 | n | $@ | main.rs:345:18:345:27 | source(...) | source(...) |
| main.rs:353:53:353:53 | n | main.rs:345:18:345:27 | source(...) | main.rs:353:53:353:53 | n | $@ | main.rs:345:18:345:27 | source(...) | source(...) |
| main.rs:367:10:367:11 | n1 | main.rs:365:23:365:32 | source(...) | main.rs:367:10:367:11 | n1 | $@ | main.rs:365:23:365:32 | source(...) | source(...) |
| main.rs:371:10:371:11 | n2 | main.rs:369:17:369:26 | source(...) | main.rs:371:10:371:11 | n2 | $@ | main.rs:369:17:369:26 | source(...) | source(...) |
| main.rs:381:14:381:15 | n1 | main.rs:379:23:379:32 | source(...) | main.rs:381:14:381:15 | n1 | $@ | main.rs:379:23:379:32 | source(...) | source(...) |
| main.rs:394:18:394:18 | a | main.rs:391:23:391:32 | source(...) | main.rs:394:18:394:18 | a | $@ | main.rs:391:23:391:32 | source(...) | source(...) |
| main.rs:395:18:395:18 | b | main.rs:391:23:391:32 | source(...) | main.rs:395:18:395:18 | b | $@ | main.rs:391:23:391:32 | source(...) | source(...) |
| main.rs:396:18:396:18 | c | main.rs:391:23:391:32 | source(...) | main.rs:396:18:396:18 | c | $@ | main.rs:391:23:391:32 | source(...) | source(...) |
| main.rs:407:10:407:10 | d | main.rs:405:18:405:27 | source(...) | main.rs:407:10:407:10 | d | $@ | main.rs:405:18:405:27 | source(...) | source(...) |
| main.rs:408:10:408:19 | mut_arr[0] | main.rs:405:18:405:27 | source(...) | main.rs:408:10:408:19 | mut_arr[0] | $@ | main.rs:405:18:405:27 | source(...) | source(...) |
| main.rs:432:10:432:10 | s | main.rs:431:25:431:26 | source(...) | main.rs:432:10:432:10 | s | $@ | main.rs:431:25:431:26 | source(...) | source(...) |
| main.rs:441:10:441:10 | a | main.rs:436:13:436:22 | source(...) | main.rs:441:10:441:10 | a | $@ | main.rs:436:13:436:22 | source(...) | source(...) |
| main.rs:444:10:444:15 | * ... | main.rs:438:13:438:22 | source(...) | main.rs:444:10:444:15 | * ... | $@ | main.rs:438:13:438:22 | source(...) | source(...) |
| main.rs:189:18:189:18 | y | main.rs:178:13:178:22 | source(...) | main.rs:189:18:189:18 | y | $@ | main.rs:178:13:178:22 | source(...) | source(...) |
| main.rs:204:18:204:18 | x | main.rs:198:27:198:36 | source(...) | main.rs:204:18:204:18 | x | $@ | main.rs:198:27:198:36 | source(...) | source(...) |
| main.rs:217:33:217:33 | n | main.rs:214:27:214:36 | source(...) | main.rs:217:33:217:33 | n | $@ | main.rs:214:27:214:36 | source(...) | source(...) |
| main.rs:230:25:230:25 | n | main.rs:227:19:227:28 | source(...) | main.rs:230:25:230:25 | n | $@ | main.rs:227:19:227:28 | source(...) | source(...) |
| main.rs:241:10:241:20 | s1.unwrap(...) | main.rs:240:19:240:28 | source(...) | main.rs:241:10:241:20 | s1.unwrap(...) | $@ | main.rs:240:19:240:28 | source(...) | source(...) |
| main.rs:246:10:246:24 | s1.unwrap_or(...) | main.rs:245:19:245:28 | source(...) | main.rs:246:10:246:24 | s1.unwrap_or(...) | $@ | main.rs:245:19:245:28 | source(...) | source(...) |
| main.rs:249:10:249:33 | s2.unwrap_or(...) | main.rs:249:23:249:32 | source(...) | main.rs:249:10:249:33 | s2.unwrap_or(...) | $@ | main.rs:249:23:249:32 | source(...) | source(...) |
| main.rs:254:10:254:32 | s1.unwrap_or_else(...) | main.rs:253:19:253:28 | source(...) | main.rs:254:10:254:32 | s1.unwrap_or_else(...) | $@ | main.rs:253:19:253:28 | source(...) | source(...) |
| main.rs:257:10:257:41 | s2.unwrap_or_else(...) | main.rs:257:31:257:40 | source(...) | main.rs:257:10:257:41 | s2.unwrap_or_else(...) | $@ | main.rs:257:31:257:40 | source(...) | source(...) |
| main.rs:264:10:264:11 | i1 | main.rs:261:19:261:28 | source(...) | main.rs:264:10:264:11 | i1 | $@ | main.rs:261:19:261:28 | source(...) | source(...) |
| main.rs:275:10:275:11 | i1 | main.rs:270:35:270:44 | source(...) | main.rs:275:10:275:11 | i1 | $@ | main.rs:270:35:270:44 | source(...) | source(...) |
| main.rs:284:10:284:22 | s1.expect(...) | main.rs:283:35:283:44 | source(...) | main.rs:284:10:284:22 | s1.expect(...) | $@ | main.rs:283:35:283:44 | source(...) | source(...) |
| main.rs:289:10:289:26 | s2.expect_err(...) | main.rs:287:36:287:45 | source(...) | main.rs:289:10:289:26 | s2.expect_err(...) | $@ | main.rs:287:36:287:45 | source(...) | source(...) |
| main.rs:301:35:301:35 | n | main.rs:298:29:298:38 | source(...) | main.rs:301:35:301:35 | n | $@ | main.rs:298:29:298:38 | source(...) | source(...) |
| main.rs:305:55:305:55 | n | main.rs:298:29:298:38 | source(...) | main.rs:305:55:305:55 | n | $@ | main.rs:298:29:298:38 | source(...) | source(...) |
| main.rs:319:22:319:22 | n | main.rs:316:16:316:25 | source(...) | main.rs:319:22:319:22 | n | $@ | main.rs:316:16:316:25 | source(...) | source(...) |
| main.rs:323:29:323:29 | n | main.rs:316:16:316:25 | source(...) | main.rs:323:29:323:29 | n | $@ | main.rs:316:16:316:25 | source(...) | source(...) |
| main.rs:342:48:342:48 | n | main.rs:338:18:338:27 | source(...) | main.rs:342:48:342:48 | n | $@ | main.rs:338:18:338:27 | source(...) | source(...) |
| main.rs:346:81:346:81 | n | main.rs:338:18:338:27 | source(...) | main.rs:346:81:346:81 | n | $@ | main.rs:338:18:338:27 | source(...) | source(...) |
| main.rs:362:34:362:34 | n | main.rs:358:18:358:27 | source(...) | main.rs:362:34:362:34 | n | $@ | main.rs:358:18:358:27 | source(...) | source(...) |
| main.rs:366:53:366:53 | n | main.rs:358:18:358:27 | source(...) | main.rs:366:53:366:53 | n | $@ | main.rs:358:18:358:27 | source(...) | source(...) |
| main.rs:380:10:380:11 | n1 | main.rs:378:23:378:32 | source(...) | main.rs:380:10:380:11 | n1 | $@ | main.rs:378:23:378:32 | source(...) | source(...) |
| main.rs:384:10:384:11 | n2 | main.rs:382:17:382:26 | source(...) | main.rs:384:10:384:11 | n2 | $@ | main.rs:382:17:382:26 | source(...) | source(...) |
| main.rs:394:14:394:15 | n1 | main.rs:392:23:392:32 | source(...) | main.rs:394:14:394:15 | n1 | $@ | main.rs:392:23:392:32 | source(...) | source(...) |
| main.rs:407:18:407:18 | a | main.rs:404:23:404:32 | source(...) | main.rs:407:18:407:18 | a | $@ | main.rs:404:23:404:32 | source(...) | source(...) |
| main.rs:408:18:408:18 | b | main.rs:404:23:404:32 | source(...) | main.rs:408:18:408:18 | b | $@ | main.rs:404:23:404:32 | source(...) | source(...) |
| main.rs:409:18:409:18 | c | main.rs:404:23:404:32 | source(...) | main.rs:409:18:409:18 | c | $@ | main.rs:404:23:404:32 | source(...) | source(...) |
| main.rs:420:10:420:10 | d | main.rs:418:18:418:27 | source(...) | main.rs:420:10:420:10 | d | $@ | main.rs:418:18:418:27 | source(...) | source(...) |
| main.rs:421:10:421:19 | mut_arr[0] | main.rs:418:18:418:27 | source(...) | main.rs:421:10:421:19 | mut_arr[0] | $@ | main.rs:418:18:418:27 | source(...) | source(...) |
| main.rs:445:10:445:10 | s | main.rs:444:25:444:26 | source(...) | main.rs:445:10:445:10 | s | $@ | main.rs:444:25:444:26 | source(...) | source(...) |
| main.rs:454:10:454:10 | a | main.rs:449:13:449:22 | source(...) | main.rs:454:10:454:10 | a | $@ | main.rs:449:13:449:22 | source(...) | source(...) |
| main.rs:457:10:457:15 | * ... | main.rs:451:13:451:22 | source(...) | main.rs:457:10:457:15 | * ... | $@ | main.rs:451:13:451:22 | source(...) | source(...) |

View File

@@ -175,11 +175,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 {
@@ -194,6 +192,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
@@ -457,6 +470,7 @@ fn main() {
tuple_mutation();
tuple_nested();
struct_field();
tuple_struct();
struct_mutation();
struct_pattern_match();
struct_nested_field();

View File

@@ -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(...) |

View 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()

View 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();
}

View File

@@ -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

View File

@@ -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 |

View File

@@ -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

View File

@@ -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 |

View File

@@ -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 |

View 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,
}
}
}

View File

@@ -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,
}
}
}