Merge pull request #17949 from paldepind/rust-async-blocks

Rust: Handle async blocks in CFG and SSA
This commit is contained in:
Tom Hvitved
2024-11-13 13:51:20 +01:00
committed by GitHub
18 changed files with 825 additions and 534 deletions

View File

@@ -12,7 +12,7 @@ final class BasicBlock = BasicBlockImpl;
* without branches or joins.
*/
private class BasicBlockImpl extends TBasicBlockStart {
/** Gets the scope of this basic block. */
/** Gets the CFG scope of this basic block. */
CfgScope getScope() { result = this.getAPredecessor().getScope() }
/** Gets an immediate successor of this basic block, if any. */

View File

@@ -32,8 +32,12 @@ query predicate nonPostOrderExpr(Expr e, string cls) {
*/
query predicate scopeNoFirst(CfgScope scope) {
Consistency::scopeNoFirst(scope) and
not scope = any(Function f | not exists(f.getBody())) and
not scope = any(ClosureExpr c | not exists(c.getBody()))
not scope =
[
any(AstNode f | not f.(Function).hasBody()),
any(ClosureExpr c | not c.hasBody()),
any(AsyncBlockExpr b | not b.hasStmtList())
]
}
/** Holds if `be` is the `else` branch of a `let` statement that results in a panic. */

View File

@@ -23,7 +23,7 @@ private module CfgInput implements InputSig<Location> {
class CfgScope = Scope::CfgScope;
CfgScope getCfgScope(AstNode n) {
result = n.getEnclosingCallable() and
result = n.getEnclosingCfgScope() and
Stages::CfgStage::ref()
}
@@ -44,12 +44,10 @@ private module CfgInput implements InputSig<Location> {
predicate successorTypeIsCondition(SuccessorType t) { t instanceof Cfg::BooleanSuccessor }
/** Holds if `first` is first executed when entering `scope`. */
predicate scopeFirst(CfgScope scope, AstNode first) {
first(scope.(CfgScopeTree).getFirstChildNode(), first)
}
predicate scopeFirst(CfgScope scope, AstNode first) { scope.scopeFirst(first) }
/** Holds if `scope` is exited when `last` finishes with completion `c`. */
predicate scopeLast(CfgScope scope, AstNode last, Completion c) { last(scope.getBody(), last, c) }
predicate scopeLast(CfgScope scope, AstNode last, Completion c) { scope.scopeLast(last, c) }
}
private module CfgSplittingInput implements SplittingInputSig<Location, CfgInput> {
@@ -71,14 +69,7 @@ private module CfgImpl =
import CfgImpl
class CfgScopeTree extends StandardTree, Scope::CfgScope {
override predicate first(AstNode first) { first = this }
override predicate last(AstNode last, Completion c) {
last = this and
completionIsValidFor(c, this)
}
class CallableScopeTree extends StandardTree, PreOrderTree, PostOrderTree, Scope::CallableScope {
override predicate propagatesAbnormal(AstNode child) { none() }
override AstNode getChildNode(int i) {
@@ -280,13 +271,23 @@ module ExprTrees {
}
}
private AstNode getBlockChildNode(BlockExpr b, int i) {
result = b.getStmtList().getStatement(i)
or
i = b.getStmtList().getNumberOfStatements() and
result = b.getStmtList().getTailExpr()
}
class AsyncBlockExprTree extends StandardTree, PreOrderTree, PostOrderTree, AsyncBlockExpr {
override AstNode getChildNode(int i) { result = getBlockChildNode(this, i) }
override predicate propagatesAbnormal(AstNode child) { none() }
}
class BlockExprTree extends StandardPostOrderTree, BlockExpr {
override AstNode getChildNode(int i) {
result = this.getStmtList().getStatement(i)
or
i = this.getStmtList().getNumberOfStatements() and
result = this.getStmtList().getTailExpr()
}
BlockExprTree() { not this.isAsync() }
override AstNode getChildNode(int i) { result = getBlockChildNode(this, i) }
override predicate propagatesAbnormal(AstNode child) { child = this.getChildNode(_) }
}

View File

@@ -5,11 +5,31 @@ private import codeql.rust.elements.internal.generated.ParentChild
/**
* A control-flow graph (CFG) scope.
*
* A CFG scope is a callable with a body.
*/
class CfgScope extends Callable {
CfgScope() {
abstract private class CfgScopeImpl extends AstNode {
/** Holds if `first` is executed first when entering `scope`. */
abstract predicate scopeFirst(AstNode first);
/** Holds if `scope` is exited when `last` finishes with completion `c`. */
abstract predicate scopeLast(AstNode last, Completion c);
}
final class CfgScope = CfgScopeImpl;
final class AsyncBlockScope extends CfgScopeImpl, AsyncBlockExpr instanceof ExprTrees::AsyncBlockExprTree
{
override predicate scopeFirst(AstNode first) { first(super.getFirstChildNode(), first) }
override predicate scopeLast(AstNode last, Completion c) {
last(super.getLastChildElement(), last, c)
}
}
/**
* A CFG scope for a callable (a function or a closure) with a body.
*/
final class CallableScope extends CfgScopeImpl, Callable {
CallableScope() {
// A function without a body corresponds to a trait method signature and
// should not have a CFG scope.
this.(Function).hasBody()
@@ -23,4 +43,11 @@ class CfgScope extends Callable {
or
result = this.(ClosureExpr).getBody()
}
override predicate scopeFirst(AstNode first) {
first(this.(CallableScopeTree).getFirstChildNode(), first)
}
/** Holds if `scope` is exited when `last` finishes with completion `c`. */
override predicate scopeLast(AstNode last, Completion c) { last(this.getBody(), last, c) }
}

View File

@@ -65,7 +65,7 @@ final class NormalCall extends DataFlowCall, TNormalCall {
override CallCfgNode asCall() { result = c }
override DataFlowCallable getEnclosingCallable() {
result = TCfgScope(c.getExpr().getEnclosingCallable())
result = TCfgScope(c.getExpr().getEnclosingCfgScope())
}
override string toString() { result = c.toString() }
@@ -136,7 +136,7 @@ module Node {
ExprNode() { this = TExprNode(n) }
override CfgScope getCfgScope() { result = this.asExpr().getEnclosingCallable() }
override CfgScope getCfgScope() { result = this.asExpr().getEnclosingCfgScope() }
override Location getLocation() { result = n.getExpr().getLocation() }
@@ -156,7 +156,7 @@ module Node {
ParameterNode() { this = TParameterNode(parameter) }
override CfgScope getCfgScope() { result = parameter.getParam().getEnclosingCallable() }
override CfgScope getCfgScope() { result = parameter.getParam().getEnclosingCfgScope() }
override Location getLocation() { result = parameter.getLocation() }

View File

@@ -156,19 +156,19 @@ private predicate variableReadActual(BasicBlock bb, int i, Variable v) {
*/
pragma[noinline]
private predicate hasCapturedWrite(Variable v, Cfg::CfgScope scope) {
any(VariableWriteAccess write | write.getVariable() = v and scope = write.getEnclosingCallable+())
any(VariableWriteAccess write | write.getVariable() = v and scope = write.getEnclosingCfgScope+())
.isCapture()
}
/**
* Holds if `v` is read inside basic block `bb` at index `i`, which is in the
* immediate outer scope of `scope`.
* immediate outer CFG scope of `scope`.
*/
pragma[noinline]
private predicate variableReadActualInOuterScope(
BasicBlock bb, int i, Variable v, Cfg::CfgScope scope
) {
variableReadActual(bb, i, v) and bb.getScope() = scope.getEnclosingCallable()
variableReadActual(bb, i, v) and bb.getScope() = scope.getEnclosingCfgScope()
}
pragma[noinline]
@@ -263,7 +263,7 @@ private predicate readsCapturedVariable(BasicBlock bb, Variable v) {
*/
pragma[noinline]
private predicate hasCapturedRead(Variable v, Cfg::CfgScope scope) {
any(VariableReadAccess read | read.getVariable() = v and scope = read.getEnclosingCallable+())
any(VariableReadAccess read | read.getVariable() = v and scope = read.getEnclosingCfgScope+())
.isCapture()
}
@@ -273,14 +273,18 @@ private predicate hasCapturedRead(Variable v, Cfg::CfgScope scope) {
*/
pragma[noinline]
private predicate variableWriteInOuterScope(BasicBlock bb, int i, Variable v, Cfg::CfgScope scope) {
SsaInput::variableWrite(bb, i, v, _) and scope.getEnclosingCallable() = bb.getScope()
SsaInput::variableWrite(bb, i, v, _) and scope.getEnclosingCfgScope() = bb.getScope()
}
/** Holds if evaluating `e` jumps to the evaluation of a different CFG scope. */
private predicate isControlFlowJump(Expr e) { e instanceof CallExprBase or e instanceof AwaitExpr }
/**
* Holds if the call `call` at index `i` in basic block `bb` may reach
* a callable that reads captured variable `v`.
*/
private predicate capturedCallRead(CallExprBase call, BasicBlock bb, int i, Variable v) {
private predicate capturedCallRead(Expr call, BasicBlock bb, int i, Variable v) {
isControlFlowJump(call) and
exists(Cfg::CfgScope scope |
hasCapturedRead(v, scope) and
(
@@ -295,7 +299,8 @@ private predicate capturedCallRead(CallExprBase call, BasicBlock bb, int i, Vari
* Holds if the call `call` at index `i` in basic block `bb` may reach a callable
* that writes captured variable `v`.
*/
predicate capturedCallWrite(CallExprBase call, BasicBlock bb, int i, Variable v) {
predicate capturedCallWrite(Expr call, BasicBlock bb, int i, Variable v) {
isControlFlowJump(call) and
call = bb.getNode(i).getAstNode() and
exists(Cfg::CfgScope scope |
hasVariableReadWithCapturedWrite(bb, any(int j | j > i), v, scope)

View File

@@ -0,0 +1,17 @@
/**
* This module provides the public class `AsyncBlockExpr`.
*/
private import codeql.rust.elements.BlockExpr
/**
* An async block expression. For example:
* ```rust
* async {
* let x = 42;
* }
* ```
*/
final class AsyncBlockExpr extends BlockExpr {
AsyncBlockExpr() { this.isAsync() }
}

View File

@@ -5,6 +5,7 @@
*/
private import codeql.rust.elements.internal.generated.AstNode
private import codeql.rust.controlflow.ControlFlowGraph
/**
* INTERNAL: This module contains the customizable definition of `AstNode` and should not
@@ -44,6 +45,17 @@ module Impl {
)
}
/** Gets the CFG scope that encloses this node, if any. */
cached
CfgScope getEnclosingCfgScope() {
exists(AstNode p | p = this.getParentNode() |
result = p
or
not p instanceof CfgScope and
result = p.getEnclosingCfgScope()
)
}
/** Holds if this node is inside a macro expansion. */
predicate isInMacroExpansion() {
this = any(MacroCall mc).getExpanded()

View File

@@ -1,4 +1,5 @@
private import rust
private import codeql.rust.controlflow.ControlFlowGraph
private import codeql.rust.elements.internal.generated.ParentChild
private import codeql.rust.elements.internal.PathExprBaseImpl::Impl as PathExprBaseImpl
private import codeql.rust.elements.internal.FormatTemplateVariableAccessImpl::Impl as FormatTemplateVariableAccessImpl
@@ -445,7 +446,7 @@ module Impl {
Variable getVariable() { result = v }
/** Holds if this access is a capture. */
predicate isCapture() { this.getEnclosingCallable() != v.getPat().getEnclosingCallable() }
predicate isCapture() { this.getEnclosingCfgScope() != v.getPat().getEnclosingCfgScope() }
override string toString() { result = name }

View File

@@ -5,6 +5,7 @@ import codeql.Locations
import codeql.files.FileSystem
import codeql.rust.elements.AssignmentOperation
import codeql.rust.elements.LogicalOperation
import codeql.rust.elements.AsyncBlockExpr
import codeql.rust.elements.Variable
import codeql.rust.elements.NamedFormatArgument
import codeql.rust.elements.PositionalFormatArgument

View File

@@ -765,85 +765,200 @@ edges
| test.rs:360:9:362:9 | ExprStmt | test.rs:361:13:361:13 | 1 | |
| test.rs:360:14:362:9 | BlockExpr | test.rs:361:13:361:13 | 1 | |
| test.rs:361:13:361:13 | 1 | test.rs:360:14:362:9 | BlockExpr | |
| test.rs:367:1:372:1 | enter dead_code | test.rs:368:5:370:5 | ExprStmt | |
| test.rs:367:1:372:1 | exit dead_code (normal) | test.rs:367:1:372:1 | exit dead_code | |
| test.rs:368:5:370:5 | ExprStmt | test.rs:368:9:368:12 | true | |
| test.rs:368:9:368:12 | true | test.rs:369:9:369:17 | ExprStmt | true |
| test.rs:369:9:369:16 | ReturnExpr | test.rs:367:1:372:1 | exit dead_code (normal) | return |
| test.rs:369:9:369:17 | ExprStmt | test.rs:369:16:369:16 | 0 | |
| test.rs:369:16:369:16 | 0 | test.rs:369:9:369:16 | ReturnExpr | |
| test.rs:374:1:387:1 | enter labelled_block1 | test.rs:375:5:386:6 | LetStmt | |
| test.rs:374:1:387:1 | exit labelled_block1 (normal) | test.rs:374:1:387:1 | exit labelled_block1 | |
| test.rs:374:29:387:1 | BlockExpr | test.rs:374:1:387:1 | exit labelled_block1 (normal) | |
| test.rs:375:5:386:6 | LetStmt | test.rs:376:9:376:19 | ExprStmt | |
| test.rs:375:9:375:14 | result | test.rs:374:29:387:1 | BlockExpr | match |
| test.rs:375:18:386:5 | BlockExpr | test.rs:375:9:375:14 | result | |
| test.rs:376:9:376:16 | PathExpr | test.rs:376:9:376:18 | CallExpr | |
| test.rs:376:9:376:18 | CallExpr | test.rs:377:9:379:9 | ExprStmt | |
| test.rs:376:9:376:19 | ExprStmt | test.rs:376:9:376:16 | PathExpr | |
| test.rs:377:9:379:9 | ExprStmt | test.rs:377:12:377:28 | PathExpr | |
| test.rs:377:9:379:9 | IfExpr | test.rs:380:9:380:24 | ExprStmt | |
| test.rs:377:12:377:28 | PathExpr | test.rs:377:12:377:30 | CallExpr | |
| test.rs:377:12:377:30 | CallExpr | test.rs:377:9:379:9 | IfExpr | false |
| test.rs:377:12:377:30 | CallExpr | test.rs:378:13:378:27 | ExprStmt | true |
| test.rs:378:13:378:26 | BreakExpr | test.rs:375:18:386:5 | BlockExpr | break |
| test.rs:378:13:378:27 | ExprStmt | test.rs:378:26:378:26 | 1 | |
| test.rs:378:26:378:26 | 1 | test.rs:378:13:378:26 | BreakExpr | |
| test.rs:380:9:380:21 | PathExpr | test.rs:380:9:380:23 | CallExpr | |
| test.rs:380:9:380:23 | CallExpr | test.rs:381:9:383:9 | ExprStmt | |
| test.rs:380:9:380:24 | ExprStmt | test.rs:380:9:380:21 | PathExpr | |
| test.rs:381:9:383:9 | ExprStmt | test.rs:381:12:381:28 | PathExpr | |
| test.rs:381:9:383:9 | IfExpr | test.rs:384:9:384:24 | ExprStmt | |
| test.rs:381:12:381:28 | PathExpr | test.rs:381:12:381:30 | CallExpr | |
| test.rs:381:12:381:30 | CallExpr | test.rs:381:9:383:9 | IfExpr | false |
| test.rs:381:12:381:30 | CallExpr | test.rs:382:13:382:27 | ExprStmt | true |
| test.rs:382:13:382:26 | BreakExpr | test.rs:375:18:386:5 | BlockExpr | break |
| test.rs:382:13:382:27 | ExprStmt | test.rs:382:26:382:26 | 2 | |
| test.rs:382:26:382:26 | 2 | test.rs:382:13:382:26 | BreakExpr | |
| test.rs:384:9:384:21 | PathExpr | test.rs:384:9:384:23 | CallExpr | |
| test.rs:384:9:384:23 | CallExpr | test.rs:385:9:385:9 | 3 | |
| test.rs:384:9:384:24 | ExprStmt | test.rs:384:9:384:21 | PathExpr | |
| test.rs:385:9:385:9 | 3 | test.rs:375:18:386:5 | BlockExpr | |
| test.rs:389:1:397:1 | enter labelled_block2 | test.rs:390:5:396:6 | LetStmt | |
| test.rs:389:1:397:1 | exit labelled_block2 (normal) | test.rs:389:1:397:1 | exit labelled_block2 | |
| test.rs:389:29:397:1 | BlockExpr | test.rs:389:1:397:1 | exit labelled_block2 (normal) | |
| test.rs:390:5:396:6 | LetStmt | test.rs:391:9:391:34 | LetStmt | |
| test.rs:390:9:390:14 | result | test.rs:389:29:397:1 | BlockExpr | match |
| test.rs:390:18:396:5 | BlockExpr | test.rs:390:9:390:14 | result | |
| test.rs:391:9:391:34 | LetStmt | test.rs:391:30:391:33 | PathExpr | |
| test.rs:391:13:391:13 | x | test.rs:392:9:394:10 | LetStmt | match |
| test.rs:391:30:391:33 | PathExpr | test.rs:391:13:391:13 | x | |
| test.rs:392:9:394:10 | LetStmt | test.rs:392:23:392:23 | x | |
| test.rs:392:13:392:19 | TupleStructPat | test.rs:392:18:392:18 | y | match |
| test.rs:392:13:392:19 | TupleStructPat | test.rs:393:13:393:27 | ExprStmt | no-match |
| test.rs:392:18:392:18 | y | test.rs:395:9:395:9 | x | match |
| test.rs:392:23:392:23 | x | test.rs:392:13:392:19 | TupleStructPat | |
| test.rs:393:13:393:26 | BreakExpr | test.rs:390:18:396:5 | BlockExpr | break |
| test.rs:393:13:393:27 | ExprStmt | test.rs:393:26:393:26 | 1 | |
| test.rs:393:26:393:26 | 1 | test.rs:393:13:393:26 | BreakExpr | |
| test.rs:395:9:395:9 | x | test.rs:390:18:396:5 | BlockExpr | |
| test.rs:399:1:405:1 | enter test_nested_function | test.rs:400:5:400:18 | LetStmt | |
| test.rs:399:1:405:1 | exit test_nested_function (normal) | test.rs:399:1:405:1 | exit test_nested_function | |
| test.rs:399:27:405:1 | BlockExpr | test.rs:399:1:405:1 | exit test_nested_function (normal) | |
| test.rs:400:5:400:18 | LetStmt | test.rs:400:17:400:17 | 0 | |
| test.rs:400:9:400:13 | x | test.rs:401:5:403:5 | nested | match |
| test.rs:400:17:400:17 | 0 | test.rs:400:9:400:13 | x | |
| test.rs:401:5:403:5 | enter nested | test.rs:401:15:401:15 | x | |
| test.rs:401:5:403:5 | exit nested (normal) | test.rs:401:5:403:5 | exit nested | |
| test.rs:401:5:403:5 | nested | test.rs:404:5:404:19 | ExprStmt | |
| test.rs:401:15:401:15 | x | test.rs:401:15:401:25 | Param | match |
| test.rs:401:15:401:25 | Param | test.rs:402:9:402:16 | ExprStmt | |
| test.rs:401:28:403:5 | BlockExpr | test.rs:401:5:403:5 | exit nested (normal) | |
| test.rs:402:9:402:10 | * ... | test.rs:402:15:402:15 | 1 | |
| test.rs:402:9:402:15 | ... += ... | test.rs:401:28:403:5 | BlockExpr | |
| test.rs:402:9:402:16 | ExprStmt | test.rs:402:10:402:10 | x | |
| test.rs:402:10:402:10 | x | test.rs:402:9:402:10 | * ... | |
| test.rs:402:15:402:15 | 1 | test.rs:402:9:402:15 | ... += ... | |
| test.rs:404:5:404:10 | PathExpr | test.rs:404:17:404:17 | x | |
| test.rs:404:5:404:18 | CallExpr | test.rs:399:27:405:1 | BlockExpr | |
| test.rs:404:5:404:19 | ExprStmt | test.rs:404:5:404:10 | PathExpr | |
| test.rs:404:12:404:17 | RefExpr | test.rs:404:5:404:18 | CallExpr | |
| test.rs:404:17:404:17 | x | test.rs:404:12:404:17 | RefExpr | |
| test.rs:368:5:370:5 | enter say_hello | test.rs:369:9:369:34 | ExprStmt | |
| test.rs:368:5:370:5 | exit say_hello (normal) | test.rs:368:5:370:5 | exit say_hello | |
| test.rs:368:26:370:5 | BlockExpr | test.rs:368:5:370:5 | exit say_hello (normal) | |
| test.rs:369:9:369:33 | MacroExpr | test.rs:368:26:370:5 | BlockExpr | |
| test.rs:369:9:369:33 | PathExpr | test.rs:369:18:369:32 | "hello, world!\\n" | |
| test.rs:369:9:369:34 | ExprStmt | test.rs:369:18:369:32 | MacroStmts | |
| test.rs:369:18:369:32 | "hello, world!\\n" | test.rs:369:18:369:32 | FormatArgsExpr | |
| test.rs:369:18:369:32 | BlockExpr | test.rs:369:9:369:33 | MacroExpr | |
| test.rs:369:18:369:32 | CallExpr | test.rs:369:18:369:32 | BlockExpr | |
| test.rs:369:18:369:32 | ExprStmt | test.rs:369:9:369:33 | PathExpr | |
| test.rs:369:18:369:32 | FormatArgsExpr | test.rs:369:18:369:32 | MacroExpr | |
| test.rs:369:18:369:32 | MacroExpr | test.rs:369:18:369:32 | CallExpr | |
| test.rs:369:18:369:32 | MacroStmts | test.rs:369:18:369:32 | ExprStmt | |
| test.rs:372:5:384:5 | enter async_block | test.rs:373:9:375:10 | LetStmt | |
| test.rs:372:5:384:5 | exit async_block (normal) | test.rs:372:5:384:5 | exit async_block | |
| test.rs:372:28:384:5 | BlockExpr | test.rs:372:5:384:5 | exit async_block (normal) | |
| test.rs:373:9:375:10 | LetStmt | test.rs:373:26:375:9 | BlockExpr | |
| test.rs:373:13:373:22 | say_godbye | test.rs:376:9:378:10 | LetStmt | match |
| test.rs:373:26:375:9 | BlockExpr | test.rs:373:13:373:22 | say_godbye | |
| test.rs:373:26:375:9 | enter BlockExpr | test.rs:374:13:374:42 | ExprStmt | |
| test.rs:373:26:375:9 | exit BlockExpr (normal) | test.rs:373:26:375:9 | exit BlockExpr | |
| test.rs:374:13:374:41 | MacroExpr | test.rs:373:26:375:9 | exit BlockExpr (normal) | |
| test.rs:374:13:374:41 | PathExpr | test.rs:374:22:374:40 | "godbye, everyone!\\n" | |
| test.rs:374:13:374:42 | ExprStmt | test.rs:374:22:374:40 | MacroStmts | |
| test.rs:374:22:374:40 | "godbye, everyone!\\n" | test.rs:374:22:374:40 | FormatArgsExpr | |
| test.rs:374:22:374:40 | BlockExpr | test.rs:374:13:374:41 | MacroExpr | |
| test.rs:374:22:374:40 | CallExpr | test.rs:374:22:374:40 | BlockExpr | |
| test.rs:374:22:374:40 | ExprStmt | test.rs:374:13:374:41 | PathExpr | |
| test.rs:374:22:374:40 | FormatArgsExpr | test.rs:374:22:374:40 | MacroExpr | |
| test.rs:374:22:374:40 | MacroExpr | test.rs:374:22:374:40 | CallExpr | |
| test.rs:374:22:374:40 | MacroStmts | test.rs:374:22:374:40 | ExprStmt | |
| test.rs:376:9:378:10 | LetStmt | test.rs:376:31:378:9 | BlockExpr | |
| test.rs:376:13:376:27 | say_how_are_you | test.rs:379:9:379:28 | LetStmt | match |
| test.rs:376:31:378:9 | BlockExpr | test.rs:376:13:376:27 | say_how_are_you | |
| test.rs:376:31:378:9 | enter BlockExpr | test.rs:377:13:377:37 | ExprStmt | |
| test.rs:376:31:378:9 | exit BlockExpr (normal) | test.rs:376:31:378:9 | exit BlockExpr | |
| test.rs:377:13:377:36 | MacroExpr | test.rs:376:31:378:9 | exit BlockExpr (normal) | |
| test.rs:377:13:377:36 | PathExpr | test.rs:377:22:377:35 | "how are you?\\n" | |
| test.rs:377:13:377:37 | ExprStmt | test.rs:377:22:377:35 | MacroStmts | |
| test.rs:377:22:377:35 | "how are you?\\n" | test.rs:377:22:377:35 | FormatArgsExpr | |
| test.rs:377:22:377:35 | BlockExpr | test.rs:377:13:377:36 | MacroExpr | |
| test.rs:377:22:377:35 | CallExpr | test.rs:377:22:377:35 | BlockExpr | |
| test.rs:377:22:377:35 | ExprStmt | test.rs:377:13:377:36 | PathExpr | |
| test.rs:377:22:377:35 | FormatArgsExpr | test.rs:377:22:377:35 | MacroExpr | |
| test.rs:377:22:377:35 | MacroExpr | test.rs:377:22:377:35 | CallExpr | |
| test.rs:377:22:377:35 | MacroStmts | test.rs:377:22:377:35 | ExprStmt | |
| test.rs:379:9:379:28 | LetStmt | test.rs:379:20:379:27 | BlockExpr | |
| test.rs:379:13:379:16 | noop | test.rs:380:9:380:26 | ExprStmt | match |
| test.rs:379:20:379:27 | BlockExpr | test.rs:379:13:379:16 | noop | |
| test.rs:380:9:380:17 | PathExpr | test.rs:380:9:380:19 | CallExpr | |
| test.rs:380:9:380:19 | CallExpr | test.rs:380:9:380:25 | AwaitExpr | |
| test.rs:380:9:380:25 | AwaitExpr | test.rs:381:9:381:30 | ExprStmt | |
| test.rs:380:9:380:26 | ExprStmt | test.rs:380:9:380:17 | PathExpr | |
| test.rs:381:9:381:23 | say_how_are_you | test.rs:381:9:381:29 | AwaitExpr | |
| test.rs:381:9:381:29 | AwaitExpr | test.rs:382:9:382:25 | ExprStmt | |
| test.rs:381:9:381:30 | ExprStmt | test.rs:381:9:381:23 | say_how_are_you | |
| test.rs:382:9:382:18 | say_godbye | test.rs:382:9:382:24 | AwaitExpr | |
| test.rs:382:9:382:24 | AwaitExpr | test.rs:383:9:383:19 | ExprStmt | |
| test.rs:382:9:382:25 | ExprStmt | test.rs:382:9:382:18 | say_godbye | |
| test.rs:383:9:383:12 | noop | test.rs:383:9:383:18 | AwaitExpr | |
| test.rs:383:9:383:18 | AwaitExpr | test.rs:372:28:384:5 | BlockExpr | |
| test.rs:383:9:383:19 | ExprStmt | test.rs:383:9:383:12 | noop | |
| test.rs:390:5:392:5 | enter add_two | test.rs:390:22:390:22 | n | |
| test.rs:390:5:392:5 | exit add_two (normal) | test.rs:390:5:392:5 | exit add_two | |
| test.rs:390:22:390:22 | n | test.rs:390:22:390:27 | Param | match |
| test.rs:390:22:390:27 | Param | test.rs:391:9:391:9 | n | |
| test.rs:390:37:392:5 | BlockExpr | test.rs:390:5:392:5 | exit add_two (normal) | |
| test.rs:391:9:391:9 | n | test.rs:391:13:391:13 | 2 | |
| test.rs:391:9:391:13 | ... + ... | test.rs:390:37:392:5 | BlockExpr | |
| test.rs:391:13:391:13 | 2 | test.rs:391:9:391:13 | ... + ... | |
| test.rs:396:5:404:5 | enter const_block_assert | test.rs:399:9:401:9 | ExprStmt | |
| test.rs:396:5:404:5 | exit const_block_assert (normal) | test.rs:396:5:404:5 | exit const_block_assert | |
| test.rs:396:41:404:5 | BlockExpr | test.rs:396:5:404:5 | exit const_block_assert (normal) | |
| test.rs:399:9:401:9 | BlockExpr | test.rs:403:9:403:10 | 42 | |
| test.rs:399:9:401:9 | ExprStmt | test.rs:400:13:400:50 | ExprStmt | |
| test.rs:400:13:400:49 | BlockExpr | test.rs:400:13:400:49 | MacroExpr | |
| test.rs:400:13:400:49 | BlockExpr | test.rs:400:13:400:49 | exit panic_cold_explicit (normal) | |
| test.rs:400:13:400:49 | BlockExpr | test.rs:400:21:400:48 | IfExpr | |
| test.rs:400:13:400:49 | CallExpr | test.rs:400:13:400:49 | BlockExpr | |
| test.rs:400:13:400:49 | CallExpr | test.rs:400:13:400:49 | BlockExpr | |
| test.rs:400:13:400:49 | ExprStmt | test.rs:400:13:400:49 | MacroStmts | |
| test.rs:400:13:400:49 | ExprStmt | test.rs:400:13:400:49 | PathExpr | |
| test.rs:400:13:400:49 | MacroExpr | test.rs:399:9:401:9 | BlockExpr | |
| test.rs:400:13:400:49 | MacroExpr | test.rs:400:13:400:49 | BlockExpr | |
| test.rs:400:13:400:49 | MacroStmts | test.rs:400:13:400:49 | panic_cold_explicit | |
| test.rs:400:13:400:49 | PathExpr | test.rs:400:13:400:49 | CallExpr | |
| test.rs:400:13:400:49 | PathExpr | test.rs:400:13:400:49 | CallExpr | |
| test.rs:400:13:400:49 | enter panic_cold_explicit | test.rs:400:13:400:49 | PathExpr | |
| test.rs:400:13:400:49 | exit panic_cold_explicit (normal) | test.rs:400:13:400:49 | exit panic_cold_explicit | |
| test.rs:400:13:400:49 | panic_cold_explicit | test.rs:400:13:400:49 | ExprStmt | |
| test.rs:400:13:400:50 | ExprStmt | test.rs:400:21:400:48 | MacroStmts | |
| test.rs:400:21:400:42 | PathExpr | test.rs:400:21:400:44 | CallExpr | |
| test.rs:400:21:400:44 | CallExpr | test.rs:400:48:400:48 | 0 | |
| test.rs:400:21:400:48 | ... > ... | test.rs:400:21:400:48 | [boolean(false)] ! ... | true |
| test.rs:400:21:400:48 | ... > ... | test.rs:400:21:400:48 | [boolean(true)] ! ... | false |
| test.rs:400:21:400:48 | BlockExpr | test.rs:400:13:400:49 | MacroExpr | |
| test.rs:400:21:400:48 | IfExpr | test.rs:400:21:400:48 | BlockExpr | |
| test.rs:400:21:400:48 | MacroStmts | test.rs:400:21:400:42 | PathExpr | |
| test.rs:400:21:400:48 | [boolean(false)] ! ... | test.rs:400:21:400:48 | IfExpr | false |
| test.rs:400:21:400:48 | [boolean(true)] ! ... | test.rs:400:13:400:49 | ExprStmt | true |
| test.rs:400:48:400:48 | 0 | test.rs:400:21:400:48 | ... > ... | |
| test.rs:403:9:403:10 | 42 | test.rs:396:41:404:5 | BlockExpr | |
| test.rs:406:5:415:5 | enter const_block_panic | test.rs:407:9:407:30 | Const | |
| test.rs:406:5:415:5 | exit const_block_panic (normal) | test.rs:406:5:415:5 | exit const_block_panic | |
| test.rs:406:35:415:5 | BlockExpr | test.rs:406:5:415:5 | exit const_block_panic (normal) | |
| test.rs:407:9:407:30 | Const | test.rs:408:9:413:9 | ExprStmt | |
| test.rs:408:9:413:9 | ExprStmt | test.rs:408:12:408:16 | false | |
| test.rs:408:9:413:9 | IfExpr | test.rs:414:9:414:9 | PathExpr | |
| test.rs:408:12:408:16 | false | test.rs:408:9:413:9 | IfExpr | false |
| test.rs:411:17:411:24 | BlockExpr | test.rs:411:17:411:24 | exit panic_cold_explicit (normal) | |
| test.rs:411:17:411:24 | CallExpr | test.rs:411:17:411:24 | BlockExpr | |
| test.rs:411:17:411:24 | PathExpr | test.rs:411:17:411:24 | CallExpr | |
| test.rs:411:17:411:24 | enter panic_cold_explicit | test.rs:411:17:411:24 | PathExpr | |
| test.rs:411:17:411:24 | exit panic_cold_explicit (normal) | test.rs:411:17:411:24 | exit panic_cold_explicit | |
| test.rs:414:9:414:9 | PathExpr | test.rs:406:35:415:5 | BlockExpr | |
| test.rs:418:1:423:1 | enter dead_code | test.rs:419:5:421:5 | ExprStmt | |
| test.rs:418:1:423:1 | exit dead_code (normal) | test.rs:418:1:423:1 | exit dead_code | |
| test.rs:419:5:421:5 | ExprStmt | test.rs:419:9:419:12 | true | |
| test.rs:419:9:419:12 | true | test.rs:420:9:420:17 | ExprStmt | true |
| test.rs:420:9:420:16 | ReturnExpr | test.rs:418:1:423:1 | exit dead_code (normal) | return |
| test.rs:420:9:420:17 | ExprStmt | test.rs:420:16:420:16 | 0 | |
| test.rs:420:16:420:16 | 0 | test.rs:420:9:420:16 | ReturnExpr | |
| test.rs:425:1:438:1 | enter labelled_block1 | test.rs:426:5:437:6 | LetStmt | |
| test.rs:425:1:438:1 | exit labelled_block1 (normal) | test.rs:425:1:438:1 | exit labelled_block1 | |
| test.rs:425:29:438:1 | BlockExpr | test.rs:425:1:438:1 | exit labelled_block1 (normal) | |
| test.rs:426:5:437:6 | LetStmt | test.rs:427:9:427:19 | ExprStmt | |
| test.rs:426:9:426:14 | result | test.rs:425:29:438:1 | BlockExpr | match |
| test.rs:426:18:437:5 | BlockExpr | test.rs:426:9:426:14 | result | |
| test.rs:427:9:427:16 | PathExpr | test.rs:427:9:427:18 | CallExpr | |
| test.rs:427:9:427:18 | CallExpr | test.rs:428:9:430:9 | ExprStmt | |
| test.rs:427:9:427:19 | ExprStmt | test.rs:427:9:427:16 | PathExpr | |
| test.rs:428:9:430:9 | ExprStmt | test.rs:428:12:428:28 | PathExpr | |
| test.rs:428:9:430:9 | IfExpr | test.rs:431:9:431:24 | ExprStmt | |
| test.rs:428:12:428:28 | PathExpr | test.rs:428:12:428:30 | CallExpr | |
| test.rs:428:12:428:30 | CallExpr | test.rs:428:9:430:9 | IfExpr | false |
| test.rs:428:12:428:30 | CallExpr | test.rs:429:13:429:27 | ExprStmt | true |
| test.rs:429:13:429:26 | BreakExpr | test.rs:426:18:437:5 | BlockExpr | break |
| test.rs:429:13:429:27 | ExprStmt | test.rs:429:26:429:26 | 1 | |
| test.rs:429:26:429:26 | 1 | test.rs:429:13:429:26 | BreakExpr | |
| test.rs:431:9:431:21 | PathExpr | test.rs:431:9:431:23 | CallExpr | |
| test.rs:431:9:431:23 | CallExpr | test.rs:432:9:434:9 | ExprStmt | |
| test.rs:431:9:431:24 | ExprStmt | test.rs:431:9:431:21 | PathExpr | |
| test.rs:432:9:434:9 | ExprStmt | test.rs:432:12:432:28 | PathExpr | |
| test.rs:432:9:434:9 | IfExpr | test.rs:435:9:435:24 | ExprStmt | |
| test.rs:432:12:432:28 | PathExpr | test.rs:432:12:432:30 | CallExpr | |
| test.rs:432:12:432:30 | CallExpr | test.rs:432:9:434:9 | IfExpr | false |
| test.rs:432:12:432:30 | CallExpr | test.rs:433:13:433:27 | ExprStmt | true |
| test.rs:433:13:433:26 | BreakExpr | test.rs:426:18:437:5 | BlockExpr | break |
| test.rs:433:13:433:27 | ExprStmt | test.rs:433:26:433:26 | 2 | |
| test.rs:433:26:433:26 | 2 | test.rs:433:13:433:26 | BreakExpr | |
| test.rs:435:9:435:21 | PathExpr | test.rs:435:9:435:23 | CallExpr | |
| test.rs:435:9:435:23 | CallExpr | test.rs:436:9:436:9 | 3 | |
| test.rs:435:9:435:24 | ExprStmt | test.rs:435:9:435:21 | PathExpr | |
| test.rs:436:9:436:9 | 3 | test.rs:426:18:437:5 | BlockExpr | |
| test.rs:440:1:448:1 | enter labelled_block2 | test.rs:441:5:447:6 | LetStmt | |
| test.rs:440:1:448:1 | exit labelled_block2 (normal) | test.rs:440:1:448:1 | exit labelled_block2 | |
| test.rs:440:29:448:1 | BlockExpr | test.rs:440:1:448:1 | exit labelled_block2 (normal) | |
| test.rs:441:5:447:6 | LetStmt | test.rs:442:9:442:34 | LetStmt | |
| test.rs:441:9:441:14 | result | test.rs:440:29:448:1 | BlockExpr | match |
| test.rs:441:18:447:5 | BlockExpr | test.rs:441:9:441:14 | result | |
| test.rs:442:9:442:34 | LetStmt | test.rs:442:30:442:33 | PathExpr | |
| test.rs:442:13:442:13 | x | test.rs:443:9:445:10 | LetStmt | match |
| test.rs:442:30:442:33 | PathExpr | test.rs:442:13:442:13 | x | |
| test.rs:443:9:445:10 | LetStmt | test.rs:443:23:443:23 | x | |
| test.rs:443:13:443:19 | TupleStructPat | test.rs:443:18:443:18 | y | match |
| test.rs:443:13:443:19 | TupleStructPat | test.rs:444:13:444:27 | ExprStmt | no-match |
| test.rs:443:18:443:18 | y | test.rs:446:9:446:9 | x | match |
| test.rs:443:23:443:23 | x | test.rs:443:13:443:19 | TupleStructPat | |
| test.rs:444:13:444:26 | BreakExpr | test.rs:441:18:447:5 | BlockExpr | break |
| test.rs:444:13:444:27 | ExprStmt | test.rs:444:26:444:26 | 1 | |
| test.rs:444:26:444:26 | 1 | test.rs:444:13:444:26 | BreakExpr | |
| test.rs:446:9:446:9 | x | test.rs:441:18:447:5 | BlockExpr | |
| test.rs:450:1:456:1 | enter test_nested_function | test.rs:451:5:451:18 | LetStmt | |
| test.rs:450:1:456:1 | exit test_nested_function (normal) | test.rs:450:1:456:1 | exit test_nested_function | |
| test.rs:450:27:456:1 | BlockExpr | test.rs:450:1:456:1 | exit test_nested_function (normal) | |
| test.rs:451:5:451:18 | LetStmt | test.rs:451:17:451:17 | 0 | |
| test.rs:451:9:451:13 | x | test.rs:452:5:454:5 | nested | match |
| test.rs:451:17:451:17 | 0 | test.rs:451:9:451:13 | x | |
| test.rs:452:5:454:5 | enter nested | test.rs:452:15:452:15 | x | |
| test.rs:452:5:454:5 | exit nested (normal) | test.rs:452:5:454:5 | exit nested | |
| test.rs:452:5:454:5 | nested | test.rs:455:5:455:19 | ExprStmt | |
| test.rs:452:15:452:15 | x | test.rs:452:15:452:25 | Param | match |
| test.rs:452:15:452:25 | Param | test.rs:453:9:453:16 | ExprStmt | |
| test.rs:452:28:454:5 | BlockExpr | test.rs:452:5:454:5 | exit nested (normal) | |
| test.rs:453:9:453:10 | * ... | test.rs:453:15:453:15 | 1 | |
| test.rs:453:9:453:15 | ... += ... | test.rs:452:28:454:5 | BlockExpr | |
| test.rs:453:9:453:16 | ExprStmt | test.rs:453:10:453:10 | x | |
| test.rs:453:10:453:10 | x | test.rs:453:9:453:10 | * ... | |
| test.rs:453:15:453:15 | 1 | test.rs:453:9:453:15 | ... += ... | |
| test.rs:455:5:455:10 | PathExpr | test.rs:455:17:455:17 | x | |
| test.rs:455:5:455:18 | CallExpr | test.rs:450:27:456:1 | BlockExpr | |
| test.rs:455:5:455:19 | ExprStmt | test.rs:455:5:455:10 | PathExpr | |
| test.rs:455:12:455:17 | RefExpr | test.rs:455:5:455:18 | CallExpr | |
| test.rs:455:17:455:17 | x | test.rs:455:12:455:17 | RefExpr | |
breakTarget
| test.rs:26:17:26:21 | BreakExpr | test.rs:20:9:32:9 | LoopExpr |
| test.rs:40:21:40:25 | BreakExpr | test.rs:38:13:45:13 | LoopExpr |
@@ -856,9 +971,9 @@ breakTarget
| test.rs:186:17:186:28 | BreakExpr | test.rs:184:13:189:9 | LoopExpr |
| test.rs:199:17:199:35 | BreakExpr | test.rs:197:13:202:9 | LoopExpr |
| test.rs:211:13:211:30 | BreakExpr | test.rs:210:13:212:9 | BlockExpr |
| test.rs:378:13:378:26 | BreakExpr | test.rs:375:18:386:5 | BlockExpr |
| test.rs:382:13:382:26 | BreakExpr | test.rs:375:18:386:5 | BlockExpr |
| test.rs:393:13:393:26 | BreakExpr | test.rs:390:18:396:5 | BlockExpr |
| test.rs:429:13:429:26 | BreakExpr | test.rs:426:18:437:5 | BlockExpr |
| test.rs:433:13:433:26 | BreakExpr | test.rs:426:18:437:5 | BlockExpr |
| test.rs:444:13:444:26 | BreakExpr | test.rs:441:18:447:5 | BlockExpr |
continueTarget
| test.rs:29:17:29:24 | ContinueExpr | test.rs:20:9:32:9 | LoopExpr |
| test.rs:55:21:55:28 | ContinueExpr | test.rs:53:13:60:13 | LoopExpr |

View File

@@ -364,6 +364,57 @@ mod divergence {
}
}
mod async_await {
async fn say_hello() {
println!("hello, world!");
}
async fn async_block() {
let say_godbye = async {
println!("godbye, everyone!");
};
let say_how_are_you = async {
println!("how are you?");
};
let noop = async {};
say_hello().await;
say_how_are_you.await;
say_godbye.await;
noop.await;
}
}
mod const_evaluation {
const PI: i64 = 3.14159;
const fn add_two(n: i64) -> i64 {
n + 2
}
const A_NUMBER: i64 = if add_two(2) + 2 == 4 { PI } else { 0 };
fn const_block_assert<T>() -> usize {
// If this code ever gets executed, then the assertion has definitely
// been evaluated at compile-time.
const {
assert!(std::mem::size_of::<T>() > 0);
}
// Here we can have unsafe code relying on the type being non-zero-sized.
42
}
fn const_block_panic() -> i64 {
const N: i64 = 12 + 7;
if false {
// The panic may or may not occur when the program is built.
const {
panic!();
}
}
N
}
}
fn dead_code() -> i64 {
if (true) {
return 0;

View File

@@ -955,289 +955,314 @@ edges
| variables.rs:432:5:432:16 | CallExpr | variables.rs:409:18:433:1 | BlockExpr | |
| variables.rs:432:5:432:17 | ExprStmt | variables.rs:432:5:432:13 | PathExpr | |
| variables.rs:432:15:432:15 | z | variables.rs:432:5:432:16 | CallExpr | |
| variables.rs:435:1:449:1 | enter phi | variables.rs:435:8:435:8 | b | |
| variables.rs:435:1:449:1 | exit phi (normal) | variables.rs:435:1:449:1 | exit phi | |
| variables.rs:435:8:435:8 | b | variables.rs:435:8:435:15 | Param | match |
| variables.rs:435:8:435:15 | Param | variables.rs:436:5:436:18 | LetStmt | |
| variables.rs:435:18:449:1 | BlockExpr | variables.rs:435:1:449:1 | exit phi (normal) | |
| variables.rs:436:5:436:18 | LetStmt | variables.rs:436:17:436:17 | 1 | |
| variables.rs:436:9:436:13 | x | variables.rs:437:5:437:17 | ExprStmt | match |
| variables.rs:436:17:436:17 | 1 | variables.rs:436:9:436:13 | x | |
| variables.rs:437:5:437:13 | PathExpr | variables.rs:437:15:437:15 | x | |
| variables.rs:437:5:437:16 | CallExpr | variables.rs:438:5:438:21 | ExprStmt | |
| variables.rs:437:5:437:17 | ExprStmt | variables.rs:437:5:437:13 | PathExpr | |
| variables.rs:437:15:437:15 | x | variables.rs:437:5:437:16 | CallExpr | |
| variables.rs:438:5:438:13 | PathExpr | variables.rs:438:15:438:15 | x | |
| variables.rs:438:5:438:20 | CallExpr | variables.rs:439:5:447:5 | ExprStmt | |
| variables.rs:438:5:438:21 | ExprStmt | variables.rs:438:5:438:13 | PathExpr | |
| variables.rs:438:15:438:15 | x | variables.rs:438:19:438:19 | 1 | |
| variables.rs:438:15:438:19 | ... + ... | variables.rs:438:5:438:20 | CallExpr | |
| variables.rs:438:19:438:19 | 1 | variables.rs:438:15:438:19 | ... + ... | |
| variables.rs:439:5:447:5 | ExprStmt | variables.rs:439:8:439:8 | b | |
| variables.rs:439:5:447:5 | IfExpr | variables.rs:448:5:448:17 | ExprStmt | |
| variables.rs:439:8:439:8 | b | variables.rs:440:9:440:14 | ExprStmt | true |
| variables.rs:439:8:439:8 | b | variables.rs:444:9:444:14 | ExprStmt | false |
| variables.rs:439:10:443:5 | BlockExpr | variables.rs:439:5:447:5 | IfExpr | |
| variables.rs:440:9:440:9 | x | variables.rs:440:13:440:13 | 2 | |
| variables.rs:440:9:440:13 | ... = ... | variables.rs:441:9:441:21 | ExprStmt | |
| variables.rs:440:9:440:14 | ExprStmt | variables.rs:440:9:440:9 | x | |
| variables.rs:440:13:440:13 | 2 | variables.rs:440:9:440:13 | ... = ... | |
| variables.rs:441:9:441:17 | PathExpr | variables.rs:441:19:441:19 | x | |
| variables.rs:441:9:441:20 | CallExpr | variables.rs:442:9:442:25 | ExprStmt | |
| variables.rs:441:9:441:21 | ExprStmt | variables.rs:441:9:441:17 | PathExpr | |
| variables.rs:441:19:441:19 | x | variables.rs:441:9:441:20 | CallExpr | |
| variables.rs:442:9:442:17 | PathExpr | variables.rs:442:19:442:19 | x | |
| variables.rs:442:9:442:24 | CallExpr | variables.rs:439:10:443:5 | BlockExpr | |
| variables.rs:442:9:442:25 | ExprStmt | variables.rs:442:9:442:17 | PathExpr | |
| variables.rs:442:19:442:19 | x | variables.rs:442:23:442:23 | 1 | |
| variables.rs:442:19:442:23 | ... + ... | variables.rs:442:9:442:24 | CallExpr | |
| variables.rs:442:23:442:23 | 1 | variables.rs:442:19:442:23 | ... + ... | |
| variables.rs:443:12:447:5 | BlockExpr | variables.rs:439:5:447:5 | IfExpr | |
| variables.rs:444:9:444:9 | x | variables.rs:444:13:444:13 | 3 | |
| variables.rs:444:9:444:13 | ... = ... | variables.rs:445:9:445:21 | ExprStmt | |
| variables.rs:444:9:444:14 | ExprStmt | variables.rs:444:9:444:9 | x | |
| variables.rs:444:13:444:13 | 3 | variables.rs:444:9:444:13 | ... = ... | |
| variables.rs:445:9:445:17 | PathExpr | variables.rs:445:19:445:19 | x | |
| variables.rs:445:9:445:20 | CallExpr | variables.rs:446:9:446:25 | ExprStmt | |
| variables.rs:445:9:445:21 | ExprStmt | variables.rs:445:9:445:17 | PathExpr | |
| variables.rs:445:19:445:19 | x | variables.rs:445:9:445:20 | CallExpr | |
| variables.rs:446:9:446:17 | PathExpr | variables.rs:446:19:446:19 | x | |
| variables.rs:446:9:446:24 | CallExpr | variables.rs:443:12:447:5 | BlockExpr | |
| variables.rs:446:9:446:25 | ExprStmt | variables.rs:446:9:446:17 | PathExpr | |
| variables.rs:446:19:446:19 | x | variables.rs:446:23:446:23 | 1 | |
| variables.rs:446:19:446:23 | ... + ... | variables.rs:446:9:446:24 | CallExpr | |
| variables.rs:446:23:446:23 | 1 | variables.rs:446:19:446:23 | ... + ... | |
| variables.rs:435:1:443:1 | enter async_block_capture | variables.rs:436:5:436:23 | LetStmt | |
| variables.rs:435:1:443:1 | exit async_block_capture (normal) | variables.rs:435:1:443:1 | exit async_block_capture | |
| variables.rs:435:32:443:1 | BlockExpr | variables.rs:435:1:443:1 | exit async_block_capture (normal) | |
| variables.rs:436:5:436:23 | LetStmt | variables.rs:436:22:436:22 | 0 | |
| variables.rs:436:9:436:13 | i | variables.rs:437:5:439:6 | LetStmt | match |
| variables.rs:436:22:436:22 | 0 | variables.rs:436:9:436:13 | i | |
| variables.rs:437:5:439:6 | LetStmt | variables.rs:437:17:439:5 | BlockExpr | |
| variables.rs:437:9:437:13 | block | variables.rs:441:5:441:16 | ExprStmt | match |
| variables.rs:437:17:439:5 | BlockExpr | variables.rs:437:9:437:13 | block | |
| variables.rs:437:17:439:5 | enter BlockExpr | variables.rs:438:9:438:14 | ExprStmt | |
| variables.rs:437:17:439:5 | exit BlockExpr (normal) | variables.rs:437:17:439:5 | exit BlockExpr | |
| variables.rs:438:9:438:9 | i | variables.rs:438:13:438:13 | 1 | |
| variables.rs:438:9:438:13 | ... = ... | variables.rs:437:17:439:5 | exit BlockExpr (normal) | |
| variables.rs:438:9:438:14 | ExprStmt | variables.rs:438:9:438:9 | i | |
| variables.rs:438:13:438:13 | 1 | variables.rs:438:9:438:13 | ... = ... | |
| variables.rs:441:5:441:9 | block | variables.rs:441:5:441:15 | AwaitExpr | |
| variables.rs:441:5:441:15 | AwaitExpr | variables.rs:442:5:442:17 | ExprStmt | |
| variables.rs:441:5:441:16 | ExprStmt | variables.rs:441:5:441:9 | block | |
| variables.rs:442:5:442:13 | PathExpr | variables.rs:442:15:442:15 | i | |
| variables.rs:442:5:442:16 | CallExpr | variables.rs:435:32:443:1 | BlockExpr | |
| variables.rs:442:5:442:17 | ExprStmt | variables.rs:442:5:442:13 | PathExpr | |
| variables.rs:442:15:442:15 | i | variables.rs:442:5:442:16 | CallExpr | |
| variables.rs:445:1:459:1 | enter phi | variables.rs:445:8:445:8 | b | |
| variables.rs:445:1:459:1 | exit phi (normal) | variables.rs:445:1:459:1 | exit phi | |
| variables.rs:445:8:445:8 | b | variables.rs:445:8:445:15 | Param | match |
| variables.rs:445:8:445:15 | Param | variables.rs:446:5:446:18 | LetStmt | |
| variables.rs:445:18:459:1 | BlockExpr | variables.rs:445:1:459:1 | exit phi (normal) | |
| variables.rs:446:5:446:18 | LetStmt | variables.rs:446:17:446:17 | 1 | |
| variables.rs:446:9:446:13 | x | variables.rs:447:5:447:17 | ExprStmt | match |
| variables.rs:446:17:446:17 | 1 | variables.rs:446:9:446:13 | x | |
| variables.rs:447:5:447:13 | PathExpr | variables.rs:447:15:447:15 | x | |
| variables.rs:447:5:447:16 | CallExpr | variables.rs:448:5:448:21 | ExprStmt | |
| variables.rs:447:5:447:17 | ExprStmt | variables.rs:447:5:447:13 | PathExpr | |
| variables.rs:447:15:447:15 | x | variables.rs:447:5:447:16 | CallExpr | |
| variables.rs:448:5:448:13 | PathExpr | variables.rs:448:15:448:15 | x | |
| variables.rs:448:5:448:16 | CallExpr | variables.rs:435:18:449:1 | BlockExpr | |
| variables.rs:448:5:448:17 | ExprStmt | variables.rs:448:5:448:13 | PathExpr | |
| variables.rs:448:15:448:15 | x | variables.rs:448:5:448:16 | CallExpr | |
| variables.rs:451:1:464:1 | enter phi_read | variables.rs:451:13:451:14 | b1 | |
| variables.rs:451:1:464:1 | exit phi_read (normal) | variables.rs:451:1:464:1 | exit phi_read | |
| variables.rs:451:13:451:14 | b1 | variables.rs:451:13:451:21 | Param | match |
| variables.rs:451:13:451:21 | Param | variables.rs:451:24:451:25 | b2 | |
| variables.rs:451:24:451:25 | b2 | variables.rs:451:24:451:32 | Param | match |
| variables.rs:451:24:451:32 | Param | variables.rs:452:5:452:14 | LetStmt | |
| variables.rs:451:35:464:1 | BlockExpr | variables.rs:451:1:464:1 | exit phi_read (normal) | |
| variables.rs:452:5:452:14 | LetStmt | variables.rs:452:13:452:13 | 1 | |
| variables.rs:452:9:452:9 | x | variables.rs:453:5:457:5 | ExprStmt | match |
| variables.rs:452:13:452:13 | 1 | variables.rs:452:9:452:9 | x | |
| variables.rs:453:5:457:5 | ExprStmt | variables.rs:453:8:453:9 | b1 | |
| variables.rs:453:5:457:5 | IfExpr | variables.rs:459:8:459:9 | b2 | |
| variables.rs:453:8:453:9 | b1 | variables.rs:454:9:454:21 | ExprStmt | true |
| variables.rs:453:8:453:9 | b1 | variables.rs:456:9:456:21 | ExprStmt | false |
| variables.rs:453:11:455:5 | BlockExpr | variables.rs:453:5:457:5 | IfExpr | |
| variables.rs:454:9:454:17 | PathExpr | variables.rs:454:19:454:19 | x | |
| variables.rs:454:9:454:20 | CallExpr | variables.rs:453:11:455:5 | BlockExpr | |
| variables.rs:454:9:454:21 | ExprStmt | variables.rs:454:9:454:17 | PathExpr | |
| variables.rs:454:19:454:19 | x | variables.rs:454:9:454:20 | CallExpr | |
| variables.rs:455:12:457:5 | BlockExpr | variables.rs:453:5:457:5 | IfExpr | |
| variables.rs:448:5:448:20 | CallExpr | variables.rs:449:5:457:5 | ExprStmt | |
| variables.rs:448:5:448:21 | ExprStmt | variables.rs:448:5:448:13 | PathExpr | |
| variables.rs:448:15:448:15 | x | variables.rs:448:19:448:19 | 1 | |
| variables.rs:448:15:448:19 | ... + ... | variables.rs:448:5:448:20 | CallExpr | |
| variables.rs:448:19:448:19 | 1 | variables.rs:448:15:448:19 | ... + ... | |
| variables.rs:449:5:457:5 | ExprStmt | variables.rs:449:8:449:8 | b | |
| variables.rs:449:5:457:5 | IfExpr | variables.rs:458:5:458:17 | ExprStmt | |
| variables.rs:449:8:449:8 | b | variables.rs:450:9:450:14 | ExprStmt | true |
| variables.rs:449:8:449:8 | b | variables.rs:454:9:454:14 | ExprStmt | false |
| variables.rs:449:10:453:5 | BlockExpr | variables.rs:449:5:457:5 | IfExpr | |
| variables.rs:450:9:450:9 | x | variables.rs:450:13:450:13 | 2 | |
| variables.rs:450:9:450:13 | ... = ... | variables.rs:451:9:451:21 | ExprStmt | |
| variables.rs:450:9:450:14 | ExprStmt | variables.rs:450:9:450:9 | x | |
| variables.rs:450:13:450:13 | 2 | variables.rs:450:9:450:13 | ... = ... | |
| variables.rs:451:9:451:17 | PathExpr | variables.rs:451:19:451:19 | x | |
| variables.rs:451:9:451:20 | CallExpr | variables.rs:452:9:452:25 | ExprStmt | |
| variables.rs:451:9:451:21 | ExprStmt | variables.rs:451:9:451:17 | PathExpr | |
| variables.rs:451:19:451:19 | x | variables.rs:451:9:451:20 | CallExpr | |
| variables.rs:452:9:452:17 | PathExpr | variables.rs:452:19:452:19 | x | |
| variables.rs:452:9:452:24 | CallExpr | variables.rs:449:10:453:5 | BlockExpr | |
| variables.rs:452:9:452:25 | ExprStmt | variables.rs:452:9:452:17 | PathExpr | |
| variables.rs:452:19:452:19 | x | variables.rs:452:23:452:23 | 1 | |
| variables.rs:452:19:452:23 | ... + ... | variables.rs:452:9:452:24 | CallExpr | |
| variables.rs:452:23:452:23 | 1 | variables.rs:452:19:452:23 | ... + ... | |
| variables.rs:453:12:457:5 | BlockExpr | variables.rs:449:5:457:5 | IfExpr | |
| variables.rs:454:9:454:9 | x | variables.rs:454:13:454:13 | 3 | |
| variables.rs:454:9:454:13 | ... = ... | variables.rs:455:9:455:21 | ExprStmt | |
| variables.rs:454:9:454:14 | ExprStmt | variables.rs:454:9:454:9 | x | |
| variables.rs:454:13:454:13 | 3 | variables.rs:454:9:454:13 | ... = ... | |
| variables.rs:455:9:455:17 | PathExpr | variables.rs:455:19:455:19 | x | |
| variables.rs:455:9:455:20 | CallExpr | variables.rs:456:9:456:25 | ExprStmt | |
| variables.rs:455:9:455:21 | ExprStmt | variables.rs:455:9:455:17 | PathExpr | |
| variables.rs:455:19:455:19 | x | variables.rs:455:9:455:20 | CallExpr | |
| variables.rs:456:9:456:17 | PathExpr | variables.rs:456:19:456:19 | x | |
| variables.rs:456:9:456:20 | CallExpr | variables.rs:455:12:457:5 | BlockExpr | |
| variables.rs:456:9:456:21 | ExprStmt | variables.rs:456:9:456:17 | PathExpr | |
| variables.rs:456:19:456:19 | x | variables.rs:456:9:456:20 | CallExpr | |
| variables.rs:459:5:463:5 | IfExpr | variables.rs:451:35:464:1 | BlockExpr | |
| variables.rs:459:8:459:9 | b2 | variables.rs:460:9:460:21 | ExprStmt | true |
| variables.rs:459:8:459:9 | b2 | variables.rs:462:9:462:21 | ExprStmt | false |
| variables.rs:459:11:461:5 | BlockExpr | variables.rs:459:5:463:5 | IfExpr | |
| variables.rs:460:9:460:17 | PathExpr | variables.rs:460:19:460:19 | x | |
| variables.rs:460:9:460:20 | CallExpr | variables.rs:459:11:461:5 | BlockExpr | |
| variables.rs:460:9:460:21 | ExprStmt | variables.rs:460:9:460:17 | PathExpr | |
| variables.rs:460:19:460:19 | x | variables.rs:460:9:460:20 | CallExpr | |
| variables.rs:461:12:463:5 | BlockExpr | variables.rs:459:5:463:5 | IfExpr | |
| variables.rs:462:9:462:17 | PathExpr | variables.rs:462:19:462:19 | x | |
| variables.rs:462:9:462:20 | CallExpr | variables.rs:461:12:463:5 | BlockExpr | |
| variables.rs:462:9:462:21 | ExprStmt | variables.rs:462:9:462:17 | PathExpr | |
| variables.rs:462:19:462:19 | x | variables.rs:462:9:462:20 | CallExpr | |
| variables.rs:472:5:474:5 | enter my_get | variables.rs:473:9:473:24 | ExprStmt | |
| variables.rs:472:5:474:5 | exit my_get (normal) | variables.rs:472:5:474:5 | exit my_get | |
| variables.rs:473:9:473:23 | ReturnExpr | variables.rs:472:5:474:5 | exit my_get (normal) | return |
| variables.rs:473:9:473:24 | ExprStmt | variables.rs:473:16:473:19 | PathExpr | |
| variables.rs:473:16:473:19 | PathExpr | variables.rs:473:16:473:23 | FieldExpr | |
| variables.rs:473:16:473:23 | FieldExpr | variables.rs:473:9:473:23 | ReturnExpr | |
| variables.rs:477:1:484:1 | enter structs | variables.rs:478:5:478:36 | LetStmt | |
| variables.rs:477:1:484:1 | exit structs (normal) | variables.rs:477:1:484:1 | exit structs | |
| variables.rs:477:14:484:1 | BlockExpr | variables.rs:477:1:484:1 | exit structs (normal) | |
| variables.rs:478:5:478:36 | LetStmt | variables.rs:478:33:478:33 | 1 | |
| variables.rs:478:9:478:13 | a | variables.rs:479:5:479:26 | ExprStmt | match |
| variables.rs:478:17:478:35 | RecordExpr | variables.rs:478:9:478:13 | a | |
| variables.rs:478:33:478:33 | 1 | variables.rs:478:17:478:35 | RecordExpr | |
| variables.rs:479:5:479:13 | PathExpr | variables.rs:479:15:479:15 | a | |
| variables.rs:479:5:479:25 | CallExpr | variables.rs:480:5:480:14 | ExprStmt | |
| variables.rs:479:5:479:26 | ExprStmt | variables.rs:479:5:479:13 | PathExpr | |
| variables.rs:479:15:479:15 | a | variables.rs:479:15:479:24 | ... .my_get(...) | |
| variables.rs:479:15:479:24 | ... .my_get(...) | variables.rs:479:5:479:25 | CallExpr | |
| variables.rs:480:5:480:5 | a | variables.rs:480:5:480:9 | FieldExpr | |
| variables.rs:480:5:480:9 | FieldExpr | variables.rs:480:13:480:13 | 5 | |
| variables.rs:480:5:480:13 | ... = ... | variables.rs:481:5:481:26 | ExprStmt | |
| variables.rs:480:5:480:14 | ExprStmt | variables.rs:480:5:480:5 | a | |
| variables.rs:480:13:480:13 | 5 | variables.rs:480:5:480:13 | ... = ... | |
| variables.rs:481:5:481:13 | PathExpr | variables.rs:481:15:481:15 | a | |
| variables.rs:481:5:481:25 | CallExpr | variables.rs:482:5:482:28 | ExprStmt | |
| variables.rs:481:5:481:26 | ExprStmt | variables.rs:481:5:481:13 | PathExpr | |
| variables.rs:481:15:481:15 | a | variables.rs:481:15:481:24 | ... .my_get(...) | |
| variables.rs:481:15:481:24 | ... .my_get(...) | variables.rs:481:5:481:25 | CallExpr | |
| variables.rs:482:5:482:5 | a | variables.rs:482:25:482:25 | 2 | |
| variables.rs:482:5:482:27 | ... = ... | variables.rs:483:5:483:26 | ExprStmt | |
| variables.rs:482:5:482:28 | ExprStmt | variables.rs:482:5:482:5 | a | |
| variables.rs:482:9:482:27 | RecordExpr | variables.rs:482:5:482:27 | ... = ... | |
| variables.rs:482:25:482:25 | 2 | variables.rs:482:9:482:27 | RecordExpr | |
| variables.rs:483:5:483:13 | PathExpr | variables.rs:483:15:483:15 | a | |
| variables.rs:483:5:483:25 | CallExpr | variables.rs:477:14:484:1 | BlockExpr | |
| variables.rs:483:5:483:26 | ExprStmt | variables.rs:483:5:483:13 | PathExpr | |
| variables.rs:483:15:483:15 | a | variables.rs:483:15:483:24 | ... .my_get(...) | |
| variables.rs:483:15:483:24 | ... .my_get(...) | variables.rs:483:5:483:25 | CallExpr | |
| variables.rs:486:1:493:1 | enter ref_arg | variables.rs:487:5:487:15 | LetStmt | |
| variables.rs:486:1:493:1 | exit ref_arg (normal) | variables.rs:486:1:493:1 | exit ref_arg | |
| variables.rs:486:14:493:1 | BlockExpr | variables.rs:486:1:493:1 | exit ref_arg (normal) | |
| variables.rs:487:5:487:15 | LetStmt | variables.rs:487:13:487:14 | 16 | |
| variables.rs:487:9:487:9 | x | variables.rs:488:5:488:22 | ExprStmt | match |
| variables.rs:487:13:487:14 | 16 | variables.rs:487:9:487:9 | x | |
| variables.rs:488:5:488:17 | PathExpr | variables.rs:488:20:488:20 | x | |
| variables.rs:488:5:488:21 | CallExpr | variables.rs:489:5:489:17 | ExprStmt | |
| variables.rs:488:5:488:22 | ExprStmt | variables.rs:488:5:488:17 | PathExpr | |
| variables.rs:488:19:488:20 | RefExpr | variables.rs:488:5:488:21 | CallExpr | |
| variables.rs:488:20:488:20 | x | variables.rs:488:19:488:20 | RefExpr | |
| variables.rs:489:5:489:13 | PathExpr | variables.rs:489:15:489:15 | x | |
| variables.rs:489:5:489:16 | CallExpr | variables.rs:491:5:491:15 | LetStmt | |
| variables.rs:489:5:489:17 | ExprStmt | variables.rs:489:5:489:13 | PathExpr | |
| variables.rs:489:15:489:15 | x | variables.rs:489:5:489:16 | CallExpr | |
| variables.rs:491:5:491:15 | LetStmt | variables.rs:491:13:491:14 | 17 | |
| variables.rs:491:9:491:9 | z | variables.rs:492:5:492:22 | ExprStmt | match |
| variables.rs:491:13:491:14 | 17 | variables.rs:491:9:491:9 | z | |
| variables.rs:492:5:492:17 | PathExpr | variables.rs:492:20:492:20 | z | |
| variables.rs:492:5:492:21 | CallExpr | variables.rs:486:14:493:1 | BlockExpr | |
| variables.rs:492:5:492:22 | ExprStmt | variables.rs:492:5:492:17 | PathExpr | |
| variables.rs:492:19:492:20 | RefExpr | variables.rs:492:5:492:21 | CallExpr | |
| variables.rs:492:20:492:20 | z | variables.rs:492:19:492:20 | RefExpr | |
| variables.rs:500:3:502:3 | enter bar | variables.rs:501:5:501:32 | ExprStmt | |
| variables.rs:500:3:502:3 | exit bar (normal) | variables.rs:500:3:502:3 | exit bar | |
| variables.rs:500:21:502:3 | BlockExpr | variables.rs:500:3:502:3 | exit bar (normal) | |
| variables.rs:501:5:501:9 | * ... | variables.rs:501:29:501:29 | 3 | |
| variables.rs:501:5:501:31 | ... = ... | variables.rs:500:21:502:3 | BlockExpr | |
| variables.rs:501:5:501:32 | ExprStmt | variables.rs:501:6:501:9 | PathExpr | |
| variables.rs:501:6:501:9 | PathExpr | variables.rs:501:5:501:9 | * ... | |
| variables.rs:501:13:501:31 | RecordExpr | variables.rs:501:5:501:31 | ... = ... | |
| variables.rs:501:29:501:29 | 3 | variables.rs:501:13:501:31 | RecordExpr | |
| variables.rs:505:1:510:1 | enter ref_methodcall_receiver | variables.rs:506:3:506:34 | LetStmt | |
| variables.rs:505:1:510:1 | exit ref_methodcall_receiver (normal) | variables.rs:505:1:510:1 | exit ref_methodcall_receiver | |
| variables.rs:505:30:510:1 | BlockExpr | variables.rs:505:1:510:1 | exit ref_methodcall_receiver (normal) | |
| variables.rs:506:3:506:34 | LetStmt | variables.rs:506:31:506:31 | 1 | |
| variables.rs:506:7:506:11 | a | variables.rs:507:3:507:10 | ExprStmt | match |
| variables.rs:506:15:506:33 | RecordExpr | variables.rs:506:7:506:11 | a | |
| variables.rs:506:31:506:31 | 1 | variables.rs:506:15:506:33 | RecordExpr | |
| variables.rs:507:3:507:3 | a | variables.rs:507:3:507:9 | ... .bar(...) | |
| variables.rs:507:3:507:9 | ... .bar(...) | variables.rs:509:3:509:19 | ExprStmt | |
| variables.rs:507:3:507:10 | ExprStmt | variables.rs:507:3:507:3 | a | |
| variables.rs:509:3:509:11 | PathExpr | variables.rs:509:13:509:13 | a | |
| variables.rs:509:3:509:18 | CallExpr | variables.rs:505:30:510:1 | BlockExpr | |
| variables.rs:509:3:509:19 | ExprStmt | variables.rs:509:3:509:11 | PathExpr | |
| variables.rs:509:13:509:13 | a | variables.rs:509:13:509:17 | FieldExpr | |
| variables.rs:509:13:509:17 | FieldExpr | variables.rs:509:3:509:18 | CallExpr | |
| variables.rs:512:1:545:1 | enter main | variables.rs:513:5:513:25 | ExprStmt | |
| variables.rs:512:1:545:1 | exit main (normal) | variables.rs:512:1:545:1 | exit main | |
| variables.rs:512:11:545:1 | BlockExpr | variables.rs:512:1:545:1 | exit main (normal) | |
| variables.rs:513:5:513:22 | PathExpr | variables.rs:513:5:513:24 | CallExpr | |
| variables.rs:513:5:513:24 | CallExpr | variables.rs:514:5:514:23 | ExprStmt | |
| variables.rs:513:5:513:25 | ExprStmt | variables.rs:513:5:513:22 | PathExpr | |
| variables.rs:514:5:514:20 | PathExpr | variables.rs:514:5:514:22 | CallExpr | |
| variables.rs:514:5:514:22 | CallExpr | variables.rs:515:5:515:40 | ExprStmt | |
| variables.rs:514:5:514:23 | ExprStmt | variables.rs:514:5:514:20 | PathExpr | |
| variables.rs:515:5:515:37 | PathExpr | variables.rs:515:5:515:39 | CallExpr | |
| variables.rs:515:5:515:39 | CallExpr | variables.rs:516:5:516:23 | ExprStmt | |
| variables.rs:515:5:515:40 | ExprStmt | variables.rs:515:5:515:37 | PathExpr | |
| variables.rs:516:5:516:20 | PathExpr | variables.rs:516:5:516:22 | CallExpr | |
| variables.rs:516:5:516:22 | CallExpr | variables.rs:517:5:517:23 | ExprStmt | |
| variables.rs:516:5:516:23 | ExprStmt | variables.rs:516:5:516:20 | PathExpr | |
| variables.rs:517:5:517:20 | PathExpr | variables.rs:517:5:517:22 | CallExpr | |
| variables.rs:517:5:517:22 | CallExpr | variables.rs:518:5:518:19 | ExprStmt | |
| variables.rs:517:5:517:23 | ExprStmt | variables.rs:517:5:517:20 | PathExpr | |
| variables.rs:518:5:518:16 | PathExpr | variables.rs:518:5:518:18 | CallExpr | |
| variables.rs:518:5:518:18 | CallExpr | variables.rs:519:5:519:19 | ExprStmt | |
| variables.rs:518:5:518:19 | ExprStmt | variables.rs:518:5:518:16 | PathExpr | |
| variables.rs:519:5:519:16 | PathExpr | variables.rs:519:5:519:18 | CallExpr | |
| variables.rs:519:5:519:18 | CallExpr | variables.rs:520:5:520:19 | ExprStmt | |
| variables.rs:519:5:519:19 | ExprStmt | variables.rs:519:5:519:16 | PathExpr | |
| variables.rs:520:5:520:16 | PathExpr | variables.rs:520:5:520:18 | CallExpr | |
| variables.rs:520:5:520:18 | CallExpr | variables.rs:521:5:521:19 | ExprStmt | |
| variables.rs:520:5:520:19 | ExprStmt | variables.rs:520:5:520:16 | PathExpr | |
| variables.rs:521:5:521:16 | PathExpr | variables.rs:521:5:521:18 | CallExpr | |
| variables.rs:521:5:521:18 | CallExpr | variables.rs:522:5:522:21 | ExprStmt | |
| variables.rs:521:5:521:19 | ExprStmt | variables.rs:521:5:521:16 | PathExpr | |
| variables.rs:522:5:522:18 | PathExpr | variables.rs:522:5:522:20 | CallExpr | |
| variables.rs:522:5:522:20 | CallExpr | variables.rs:523:5:523:21 | ExprStmt | |
| variables.rs:522:5:522:21 | ExprStmt | variables.rs:522:5:522:18 | PathExpr | |
| variables.rs:523:5:523:18 | PathExpr | variables.rs:523:5:523:20 | CallExpr | |
| variables.rs:523:5:523:20 | CallExpr | variables.rs:524:5:524:21 | ExprStmt | |
| variables.rs:523:5:523:21 | ExprStmt | variables.rs:523:5:523:18 | PathExpr | |
| variables.rs:524:5:524:18 | PathExpr | variables.rs:524:5:524:20 | CallExpr | |
| variables.rs:524:5:524:20 | CallExpr | variables.rs:525:5:525:21 | ExprStmt | |
| variables.rs:524:5:524:21 | ExprStmt | variables.rs:524:5:524:18 | PathExpr | |
| variables.rs:525:5:525:18 | PathExpr | variables.rs:525:5:525:20 | CallExpr | |
| variables.rs:525:5:525:20 | CallExpr | variables.rs:526:5:526:21 | ExprStmt | |
| variables.rs:525:5:525:21 | ExprStmt | variables.rs:525:5:525:18 | PathExpr | |
| variables.rs:526:5:526:18 | PathExpr | variables.rs:526:5:526:20 | CallExpr | |
| variables.rs:526:5:526:20 | CallExpr | variables.rs:527:5:527:21 | ExprStmt | |
| variables.rs:526:5:526:21 | ExprStmt | variables.rs:526:5:526:18 | PathExpr | |
| variables.rs:527:5:527:18 | PathExpr | variables.rs:527:5:527:20 | CallExpr | |
| variables.rs:527:5:527:20 | CallExpr | variables.rs:528:5:528:21 | ExprStmt | |
| variables.rs:527:5:527:21 | ExprStmt | variables.rs:527:5:527:18 | PathExpr | |
| variables.rs:528:5:528:18 | PathExpr | variables.rs:528:5:528:20 | CallExpr | |
| variables.rs:528:5:528:20 | CallExpr | variables.rs:529:5:529:21 | ExprStmt | |
| variables.rs:528:5:528:21 | ExprStmt | variables.rs:528:5:528:18 | PathExpr | |
| variables.rs:529:5:529:18 | PathExpr | variables.rs:529:5:529:20 | CallExpr | |
| variables.rs:529:5:529:20 | CallExpr | variables.rs:530:5:530:21 | ExprStmt | |
| variables.rs:529:5:529:21 | ExprStmt | variables.rs:529:5:529:18 | PathExpr | |
| variables.rs:530:5:530:18 | PathExpr | variables.rs:530:5:530:20 | CallExpr | |
| variables.rs:530:5:530:20 | CallExpr | variables.rs:531:5:531:36 | ExprStmt | |
| variables.rs:530:5:530:21 | ExprStmt | variables.rs:530:5:530:18 | PathExpr | |
| variables.rs:531:5:531:18 | PathExpr | variables.rs:531:20:531:22 | "a" | |
| variables.rs:531:5:531:35 | CallExpr | variables.rs:532:5:532:37 | ExprStmt | |
| variables.rs:531:5:531:36 | ExprStmt | variables.rs:531:5:531:18 | PathExpr | |
| variables.rs:531:20:531:22 | "a" | variables.rs:531:26:531:28 | "b" | |
| variables.rs:531:25:531:34 | TupleExpr | variables.rs:531:5:531:35 | CallExpr | |
| variables.rs:531:26:531:28 | "b" | variables.rs:531:31:531:33 | "c" | |
| variables.rs:531:31:531:33 | "c" | variables.rs:531:25:531:34 | TupleExpr | |
| variables.rs:532:5:532:18 | PathExpr | variables.rs:532:20:532:31 | PathExpr | |
| variables.rs:532:5:532:36 | CallExpr | variables.rs:533:5:533:26 | ExprStmt | |
| variables.rs:532:5:532:37 | ExprStmt | variables.rs:532:5:532:18 | PathExpr | |
| variables.rs:532:20:532:31 | PathExpr | variables.rs:532:33:532:34 | 45 | |
| variables.rs:532:20:532:35 | CallExpr | variables.rs:532:5:532:36 | CallExpr | |
| variables.rs:532:33:532:34 | 45 | variables.rs:532:20:532:35 | CallExpr | |
| variables.rs:533:5:533:23 | PathExpr | variables.rs:533:5:533:25 | CallExpr | |
| variables.rs:533:5:533:25 | CallExpr | variables.rs:534:5:534:23 | ExprStmt | |
| variables.rs:533:5:533:26 | ExprStmt | variables.rs:533:5:533:23 | PathExpr | |
| variables.rs:534:5:534:20 | PathExpr | variables.rs:534:5:534:22 | CallExpr | |
| variables.rs:534:5:534:22 | CallExpr | variables.rs:535:5:535:19 | ExprStmt | |
| variables.rs:534:5:534:23 | ExprStmt | variables.rs:534:5:534:20 | PathExpr | |
| variables.rs:535:5:535:16 | PathExpr | variables.rs:535:5:535:18 | CallExpr | |
| variables.rs:535:5:535:18 | CallExpr | variables.rs:536:5:536:17 | ExprStmt | |
| variables.rs:535:5:535:19 | ExprStmt | variables.rs:535:5:535:16 | PathExpr | |
| variables.rs:536:5:536:14 | PathExpr | variables.rs:536:5:536:16 | CallExpr | |
| variables.rs:536:5:536:16 | CallExpr | variables.rs:537:5:537:13 | ExprStmt | |
| variables.rs:536:5:536:17 | ExprStmt | variables.rs:536:5:536:14 | PathExpr | |
| variables.rs:537:5:537:10 | PathExpr | variables.rs:537:5:537:12 | CallExpr | |
| variables.rs:537:5:537:12 | CallExpr | variables.rs:538:5:538:17 | ExprStmt | |
| variables.rs:537:5:537:13 | ExprStmt | variables.rs:537:5:537:10 | PathExpr | |
| variables.rs:538:5:538:14 | PathExpr | variables.rs:538:5:538:16 | CallExpr | |
| variables.rs:538:5:538:16 | CallExpr | variables.rs:539:5:539:12 | ExprStmt | |
| variables.rs:538:5:538:17 | ExprStmt | variables.rs:538:5:538:14 | PathExpr | |
| variables.rs:539:5:539:9 | PathExpr | variables.rs:539:5:539:11 | CallExpr | |
| variables.rs:539:5:539:11 | CallExpr | variables.rs:540:5:540:18 | ExprStmt | |
| variables.rs:539:5:539:12 | ExprStmt | variables.rs:539:5:539:9 | PathExpr | |
| variables.rs:540:5:540:15 | PathExpr | variables.rs:540:5:540:17 | CallExpr | |
| variables.rs:540:5:540:17 | CallExpr | variables.rs:541:5:541:20 | ExprStmt | |
| variables.rs:540:5:540:18 | ExprStmt | variables.rs:540:5:540:15 | PathExpr | |
| variables.rs:541:5:541:17 | PathExpr | variables.rs:541:5:541:19 | CallExpr | |
| variables.rs:541:5:541:19 | CallExpr | variables.rs:542:5:542:14 | ExprStmt | |
| variables.rs:541:5:541:20 | ExprStmt | variables.rs:541:5:541:17 | PathExpr | |
| variables.rs:542:5:542:11 | PathExpr | variables.rs:542:5:542:13 | CallExpr | |
| variables.rs:542:5:542:13 | CallExpr | variables.rs:543:5:543:14 | ExprStmt | |
| variables.rs:542:5:542:14 | ExprStmt | variables.rs:542:5:542:11 | PathExpr | |
| variables.rs:543:5:543:11 | PathExpr | variables.rs:543:5:543:13 | CallExpr | |
| variables.rs:543:5:543:13 | CallExpr | variables.rs:544:5:544:30 | ExprStmt | |
| variables.rs:543:5:543:14 | ExprStmt | variables.rs:543:5:543:11 | PathExpr | |
| variables.rs:544:5:544:27 | PathExpr | variables.rs:544:5:544:29 | CallExpr | |
| variables.rs:544:5:544:29 | CallExpr | variables.rs:512:11:545:1 | BlockExpr | |
| variables.rs:544:5:544:30 | ExprStmt | variables.rs:544:5:544:27 | PathExpr | |
| variables.rs:456:9:456:24 | CallExpr | variables.rs:453:12:457:5 | BlockExpr | |
| variables.rs:456:9:456:25 | ExprStmt | variables.rs:456:9:456:17 | PathExpr | |
| variables.rs:456:19:456:19 | x | variables.rs:456:23:456:23 | 1 | |
| variables.rs:456:19:456:23 | ... + ... | variables.rs:456:9:456:24 | CallExpr | |
| variables.rs:456:23:456:23 | 1 | variables.rs:456:19:456:23 | ... + ... | |
| variables.rs:458:5:458:13 | PathExpr | variables.rs:458:15:458:15 | x | |
| variables.rs:458:5:458:16 | CallExpr | variables.rs:445:18:459:1 | BlockExpr | |
| variables.rs:458:5:458:17 | ExprStmt | variables.rs:458:5:458:13 | PathExpr | |
| variables.rs:458:15:458:15 | x | variables.rs:458:5:458:16 | CallExpr | |
| variables.rs:461:1:474:1 | enter phi_read | variables.rs:461:13:461:14 | b1 | |
| variables.rs:461:1:474:1 | exit phi_read (normal) | variables.rs:461:1:474:1 | exit phi_read | |
| variables.rs:461:13:461:14 | b1 | variables.rs:461:13:461:21 | Param | match |
| variables.rs:461:13:461:21 | Param | variables.rs:461:24:461:25 | b2 | |
| variables.rs:461:24:461:25 | b2 | variables.rs:461:24:461:32 | Param | match |
| variables.rs:461:24:461:32 | Param | variables.rs:462:5:462:14 | LetStmt | |
| variables.rs:461:35:474:1 | BlockExpr | variables.rs:461:1:474:1 | exit phi_read (normal) | |
| variables.rs:462:5:462:14 | LetStmt | variables.rs:462:13:462:13 | 1 | |
| variables.rs:462:9:462:9 | x | variables.rs:463:5:467:5 | ExprStmt | match |
| variables.rs:462:13:462:13 | 1 | variables.rs:462:9:462:9 | x | |
| variables.rs:463:5:467:5 | ExprStmt | variables.rs:463:8:463:9 | b1 | |
| variables.rs:463:5:467:5 | IfExpr | variables.rs:469:8:469:9 | b2 | |
| variables.rs:463:8:463:9 | b1 | variables.rs:464:9:464:21 | ExprStmt | true |
| variables.rs:463:8:463:9 | b1 | variables.rs:466:9:466:21 | ExprStmt | false |
| variables.rs:463:11:465:5 | BlockExpr | variables.rs:463:5:467:5 | IfExpr | |
| variables.rs:464:9:464:17 | PathExpr | variables.rs:464:19:464:19 | x | |
| variables.rs:464:9:464:20 | CallExpr | variables.rs:463:11:465:5 | BlockExpr | |
| variables.rs:464:9:464:21 | ExprStmt | variables.rs:464:9:464:17 | PathExpr | |
| variables.rs:464:19:464:19 | x | variables.rs:464:9:464:20 | CallExpr | |
| variables.rs:465:12:467:5 | BlockExpr | variables.rs:463:5:467:5 | IfExpr | |
| variables.rs:466:9:466:17 | PathExpr | variables.rs:466:19:466:19 | x | |
| variables.rs:466:9:466:20 | CallExpr | variables.rs:465:12:467:5 | BlockExpr | |
| variables.rs:466:9:466:21 | ExprStmt | variables.rs:466:9:466:17 | PathExpr | |
| variables.rs:466:19:466:19 | x | variables.rs:466:9:466:20 | CallExpr | |
| variables.rs:469:5:473:5 | IfExpr | variables.rs:461:35:474:1 | BlockExpr | |
| variables.rs:469:8:469:9 | b2 | variables.rs:470:9:470:21 | ExprStmt | true |
| variables.rs:469:8:469:9 | b2 | variables.rs:472:9:472:21 | ExprStmt | false |
| variables.rs:469:11:471:5 | BlockExpr | variables.rs:469:5:473:5 | IfExpr | |
| variables.rs:470:9:470:17 | PathExpr | variables.rs:470:19:470:19 | x | |
| variables.rs:470:9:470:20 | CallExpr | variables.rs:469:11:471:5 | BlockExpr | |
| variables.rs:470:9:470:21 | ExprStmt | variables.rs:470:9:470:17 | PathExpr | |
| variables.rs:470:19:470:19 | x | variables.rs:470:9:470:20 | CallExpr | |
| variables.rs:471:12:473:5 | BlockExpr | variables.rs:469:5:473:5 | IfExpr | |
| variables.rs:472:9:472:17 | PathExpr | variables.rs:472:19:472:19 | x | |
| variables.rs:472:9:472:20 | CallExpr | variables.rs:471:12:473:5 | BlockExpr | |
| variables.rs:472:9:472:21 | ExprStmt | variables.rs:472:9:472:17 | PathExpr | |
| variables.rs:472:19:472:19 | x | variables.rs:472:9:472:20 | CallExpr | |
| variables.rs:482:5:484:5 | enter my_get | variables.rs:483:9:483:24 | ExprStmt | |
| variables.rs:482:5:484:5 | exit my_get (normal) | variables.rs:482:5:484:5 | exit my_get | |
| variables.rs:483:9:483:23 | ReturnExpr | variables.rs:482:5:484:5 | exit my_get (normal) | return |
| variables.rs:483:9:483:24 | ExprStmt | variables.rs:483:16:483:19 | PathExpr | |
| variables.rs:483:16:483:19 | PathExpr | variables.rs:483:16:483:23 | FieldExpr | |
| variables.rs:483:16:483:23 | FieldExpr | variables.rs:483:9:483:23 | ReturnExpr | |
| variables.rs:487:1:494:1 | enter structs | variables.rs:488:5:488:36 | LetStmt | |
| variables.rs:487:1:494:1 | exit structs (normal) | variables.rs:487:1:494:1 | exit structs | |
| variables.rs:487:14:494:1 | BlockExpr | variables.rs:487:1:494:1 | exit structs (normal) | |
| variables.rs:488:5:488:36 | LetStmt | variables.rs:488:33:488:33 | 1 | |
| variables.rs:488:9:488:13 | a | variables.rs:489:5:489:26 | ExprStmt | match |
| variables.rs:488:17:488:35 | RecordExpr | variables.rs:488:9:488:13 | a | |
| variables.rs:488:33:488:33 | 1 | variables.rs:488:17:488:35 | RecordExpr | |
| variables.rs:489:5:489:13 | PathExpr | variables.rs:489:15:489:15 | a | |
| variables.rs:489:5:489:25 | CallExpr | variables.rs:490:5:490:14 | ExprStmt | |
| variables.rs:489:5:489:26 | ExprStmt | variables.rs:489:5:489:13 | PathExpr | |
| variables.rs:489:15:489:15 | a | variables.rs:489:15:489:24 | ... .my_get(...) | |
| variables.rs:489:15:489:24 | ... .my_get(...) | variables.rs:489:5:489:25 | CallExpr | |
| variables.rs:490:5:490:5 | a | variables.rs:490:5:490:9 | FieldExpr | |
| variables.rs:490:5:490:9 | FieldExpr | variables.rs:490:13:490:13 | 5 | |
| variables.rs:490:5:490:13 | ... = ... | variables.rs:491:5:491:26 | ExprStmt | |
| variables.rs:490:5:490:14 | ExprStmt | variables.rs:490:5:490:5 | a | |
| variables.rs:490:13:490:13 | 5 | variables.rs:490:5:490:13 | ... = ... | |
| variables.rs:491:5:491:13 | PathExpr | variables.rs:491:15:491:15 | a | |
| variables.rs:491:5:491:25 | CallExpr | variables.rs:492:5:492:28 | ExprStmt | |
| variables.rs:491:5:491:26 | ExprStmt | variables.rs:491:5:491:13 | PathExpr | |
| variables.rs:491:15:491:15 | a | variables.rs:491:15:491:24 | ... .my_get(...) | |
| variables.rs:491:15:491:24 | ... .my_get(...) | variables.rs:491:5:491:25 | CallExpr | |
| variables.rs:492:5:492:5 | a | variables.rs:492:25:492:25 | 2 | |
| variables.rs:492:5:492:27 | ... = ... | variables.rs:493:5:493:26 | ExprStmt | |
| variables.rs:492:5:492:28 | ExprStmt | variables.rs:492:5:492:5 | a | |
| variables.rs:492:9:492:27 | RecordExpr | variables.rs:492:5:492:27 | ... = ... | |
| variables.rs:492:25:492:25 | 2 | variables.rs:492:9:492:27 | RecordExpr | |
| variables.rs:493:5:493:13 | PathExpr | variables.rs:493:15:493:15 | a | |
| variables.rs:493:5:493:25 | CallExpr | variables.rs:487:14:494:1 | BlockExpr | |
| variables.rs:493:5:493:26 | ExprStmt | variables.rs:493:5:493:13 | PathExpr | |
| variables.rs:493:15:493:15 | a | variables.rs:493:15:493:24 | ... .my_get(...) | |
| variables.rs:493:15:493:24 | ... .my_get(...) | variables.rs:493:5:493:25 | CallExpr | |
| variables.rs:496:1:503:1 | enter ref_arg | variables.rs:497:5:497:15 | LetStmt | |
| variables.rs:496:1:503:1 | exit ref_arg (normal) | variables.rs:496:1:503:1 | exit ref_arg | |
| variables.rs:496:14:503:1 | BlockExpr | variables.rs:496:1:503:1 | exit ref_arg (normal) | |
| variables.rs:497:5:497:15 | LetStmt | variables.rs:497:13:497:14 | 16 | |
| variables.rs:497:9:497:9 | x | variables.rs:498:5:498:22 | ExprStmt | match |
| variables.rs:497:13:497:14 | 16 | variables.rs:497:9:497:9 | x | |
| variables.rs:498:5:498:17 | PathExpr | variables.rs:498:20:498:20 | x | |
| variables.rs:498:5:498:21 | CallExpr | variables.rs:499:5:499:17 | ExprStmt | |
| variables.rs:498:5:498:22 | ExprStmt | variables.rs:498:5:498:17 | PathExpr | |
| variables.rs:498:19:498:20 | RefExpr | variables.rs:498:5:498:21 | CallExpr | |
| variables.rs:498:20:498:20 | x | variables.rs:498:19:498:20 | RefExpr | |
| variables.rs:499:5:499:13 | PathExpr | variables.rs:499:15:499:15 | x | |
| variables.rs:499:5:499:16 | CallExpr | variables.rs:501:5:501:15 | LetStmt | |
| variables.rs:499:5:499:17 | ExprStmt | variables.rs:499:5:499:13 | PathExpr | |
| variables.rs:499:15:499:15 | x | variables.rs:499:5:499:16 | CallExpr | |
| variables.rs:501:5:501:15 | LetStmt | variables.rs:501:13:501:14 | 17 | |
| variables.rs:501:9:501:9 | z | variables.rs:502:5:502:22 | ExprStmt | match |
| variables.rs:501:13:501:14 | 17 | variables.rs:501:9:501:9 | z | |
| variables.rs:502:5:502:17 | PathExpr | variables.rs:502:20:502:20 | z | |
| variables.rs:502:5:502:21 | CallExpr | variables.rs:496:14:503:1 | BlockExpr | |
| variables.rs:502:5:502:22 | ExprStmt | variables.rs:502:5:502:17 | PathExpr | |
| variables.rs:502:19:502:20 | RefExpr | variables.rs:502:5:502:21 | CallExpr | |
| variables.rs:502:20:502:20 | z | variables.rs:502:19:502:20 | RefExpr | |
| variables.rs:510:3:512:3 | enter bar | variables.rs:511:5:511:32 | ExprStmt | |
| variables.rs:510:3:512:3 | exit bar (normal) | variables.rs:510:3:512:3 | exit bar | |
| variables.rs:510:21:512:3 | BlockExpr | variables.rs:510:3:512:3 | exit bar (normal) | |
| variables.rs:511:5:511:9 | * ... | variables.rs:511:29:511:29 | 3 | |
| variables.rs:511:5:511:31 | ... = ... | variables.rs:510:21:512:3 | BlockExpr | |
| variables.rs:511:5:511:32 | ExprStmt | variables.rs:511:6:511:9 | PathExpr | |
| variables.rs:511:6:511:9 | PathExpr | variables.rs:511:5:511:9 | * ... | |
| variables.rs:511:13:511:31 | RecordExpr | variables.rs:511:5:511:31 | ... = ... | |
| variables.rs:511:29:511:29 | 3 | variables.rs:511:13:511:31 | RecordExpr | |
| variables.rs:515:1:520:1 | enter ref_methodcall_receiver | variables.rs:516:3:516:34 | LetStmt | |
| variables.rs:515:1:520:1 | exit ref_methodcall_receiver (normal) | variables.rs:515:1:520:1 | exit ref_methodcall_receiver | |
| variables.rs:515:30:520:1 | BlockExpr | variables.rs:515:1:520:1 | exit ref_methodcall_receiver (normal) | |
| variables.rs:516:3:516:34 | LetStmt | variables.rs:516:31:516:31 | 1 | |
| variables.rs:516:7:516:11 | a | variables.rs:517:3:517:10 | ExprStmt | match |
| variables.rs:516:15:516:33 | RecordExpr | variables.rs:516:7:516:11 | a | |
| variables.rs:516:31:516:31 | 1 | variables.rs:516:15:516:33 | RecordExpr | |
| variables.rs:517:3:517:3 | a | variables.rs:517:3:517:9 | ... .bar(...) | |
| variables.rs:517:3:517:9 | ... .bar(...) | variables.rs:519:3:519:19 | ExprStmt | |
| variables.rs:517:3:517:10 | ExprStmt | variables.rs:517:3:517:3 | a | |
| variables.rs:519:3:519:11 | PathExpr | variables.rs:519:13:519:13 | a | |
| variables.rs:519:3:519:18 | CallExpr | variables.rs:515:30:520:1 | BlockExpr | |
| variables.rs:519:3:519:19 | ExprStmt | variables.rs:519:3:519:11 | PathExpr | |
| variables.rs:519:13:519:13 | a | variables.rs:519:13:519:17 | FieldExpr | |
| variables.rs:519:13:519:17 | FieldExpr | variables.rs:519:3:519:18 | CallExpr | |
| variables.rs:522:1:556:1 | enter main | variables.rs:523:5:523:25 | ExprStmt | |
| variables.rs:522:1:556:1 | exit main (normal) | variables.rs:522:1:556:1 | exit main | |
| variables.rs:522:11:556:1 | BlockExpr | variables.rs:522:1:556:1 | exit main (normal) | |
| variables.rs:523:5:523:22 | PathExpr | variables.rs:523:5:523:24 | CallExpr | |
| variables.rs:523:5:523:24 | CallExpr | variables.rs:524:5:524:23 | ExprStmt | |
| variables.rs:523:5:523:25 | ExprStmt | variables.rs:523:5:523:22 | PathExpr | |
| variables.rs:524:5:524:20 | PathExpr | variables.rs:524:5:524:22 | CallExpr | |
| variables.rs:524:5:524:22 | CallExpr | variables.rs:525:5:525:40 | ExprStmt | |
| variables.rs:524:5:524:23 | ExprStmt | variables.rs:524:5:524:20 | PathExpr | |
| variables.rs:525:5:525:37 | PathExpr | variables.rs:525:5:525:39 | CallExpr | |
| variables.rs:525:5:525:39 | CallExpr | variables.rs:526:5:526:23 | ExprStmt | |
| variables.rs:525:5:525:40 | ExprStmt | variables.rs:525:5:525:37 | PathExpr | |
| variables.rs:526:5:526:20 | PathExpr | variables.rs:526:5:526:22 | CallExpr | |
| variables.rs:526:5:526:22 | CallExpr | variables.rs:527:5:527:23 | ExprStmt | |
| variables.rs:526:5:526:23 | ExprStmt | variables.rs:526:5:526:20 | PathExpr | |
| variables.rs:527:5:527:20 | PathExpr | variables.rs:527:5:527:22 | CallExpr | |
| variables.rs:527:5:527:22 | CallExpr | variables.rs:528:5:528:19 | ExprStmt | |
| variables.rs:527:5:527:23 | ExprStmt | variables.rs:527:5:527:20 | PathExpr | |
| variables.rs:528:5:528:16 | PathExpr | variables.rs:528:5:528:18 | CallExpr | |
| variables.rs:528:5:528:18 | CallExpr | variables.rs:529:5:529:19 | ExprStmt | |
| variables.rs:528:5:528:19 | ExprStmt | variables.rs:528:5:528:16 | PathExpr | |
| variables.rs:529:5:529:16 | PathExpr | variables.rs:529:5:529:18 | CallExpr | |
| variables.rs:529:5:529:18 | CallExpr | variables.rs:530:5:530:19 | ExprStmt | |
| variables.rs:529:5:529:19 | ExprStmt | variables.rs:529:5:529:16 | PathExpr | |
| variables.rs:530:5:530:16 | PathExpr | variables.rs:530:5:530:18 | CallExpr | |
| variables.rs:530:5:530:18 | CallExpr | variables.rs:531:5:531:19 | ExprStmt | |
| variables.rs:530:5:530:19 | ExprStmt | variables.rs:530:5:530:16 | PathExpr | |
| variables.rs:531:5:531:16 | PathExpr | variables.rs:531:5:531:18 | CallExpr | |
| variables.rs:531:5:531:18 | CallExpr | variables.rs:532:5:532:21 | ExprStmt | |
| variables.rs:531:5:531:19 | ExprStmt | variables.rs:531:5:531:16 | PathExpr | |
| variables.rs:532:5:532:18 | PathExpr | variables.rs:532:5:532:20 | CallExpr | |
| variables.rs:532:5:532:20 | CallExpr | variables.rs:533:5:533:21 | ExprStmt | |
| variables.rs:532:5:532:21 | ExprStmt | variables.rs:532:5:532:18 | PathExpr | |
| variables.rs:533:5:533:18 | PathExpr | variables.rs:533:5:533:20 | CallExpr | |
| variables.rs:533:5:533:20 | CallExpr | variables.rs:534:5:534:21 | ExprStmt | |
| variables.rs:533:5:533:21 | ExprStmt | variables.rs:533:5:533:18 | PathExpr | |
| variables.rs:534:5:534:18 | PathExpr | variables.rs:534:5:534:20 | CallExpr | |
| variables.rs:534:5:534:20 | CallExpr | variables.rs:535:5:535:21 | ExprStmt | |
| variables.rs:534:5:534:21 | ExprStmt | variables.rs:534:5:534:18 | PathExpr | |
| variables.rs:535:5:535:18 | PathExpr | variables.rs:535:5:535:20 | CallExpr | |
| variables.rs:535:5:535:20 | CallExpr | variables.rs:536:5:536:21 | ExprStmt | |
| variables.rs:535:5:535:21 | ExprStmt | variables.rs:535:5:535:18 | PathExpr | |
| variables.rs:536:5:536:18 | PathExpr | variables.rs:536:5:536:20 | CallExpr | |
| variables.rs:536:5:536:20 | CallExpr | variables.rs:537:5:537:21 | ExprStmt | |
| variables.rs:536:5:536:21 | ExprStmt | variables.rs:536:5:536:18 | PathExpr | |
| variables.rs:537:5:537:18 | PathExpr | variables.rs:537:5:537:20 | CallExpr | |
| variables.rs:537:5:537:20 | CallExpr | variables.rs:538:5:538:21 | ExprStmt | |
| variables.rs:537:5:537:21 | ExprStmt | variables.rs:537:5:537:18 | PathExpr | |
| variables.rs:538:5:538:18 | PathExpr | variables.rs:538:5:538:20 | CallExpr | |
| variables.rs:538:5:538:20 | CallExpr | variables.rs:539:5:539:21 | ExprStmt | |
| variables.rs:538:5:538:21 | ExprStmt | variables.rs:538:5:538:18 | PathExpr | |
| variables.rs:539:5:539:18 | PathExpr | variables.rs:539:5:539:20 | CallExpr | |
| variables.rs:539:5:539:20 | CallExpr | variables.rs:540:5:540:21 | ExprStmt | |
| variables.rs:539:5:539:21 | ExprStmt | variables.rs:539:5:539:18 | PathExpr | |
| variables.rs:540:5:540:18 | PathExpr | variables.rs:540:5:540:20 | CallExpr | |
| variables.rs:540:5:540:20 | CallExpr | variables.rs:541:5:541:36 | ExprStmt | |
| variables.rs:540:5:540:21 | ExprStmt | variables.rs:540:5:540:18 | PathExpr | |
| variables.rs:541:5:541:18 | PathExpr | variables.rs:541:20:541:22 | "a" | |
| variables.rs:541:5:541:35 | CallExpr | variables.rs:542:5:542:37 | ExprStmt | |
| variables.rs:541:5:541:36 | ExprStmt | variables.rs:541:5:541:18 | PathExpr | |
| variables.rs:541:20:541:22 | "a" | variables.rs:541:26:541:28 | "b" | |
| variables.rs:541:25:541:34 | TupleExpr | variables.rs:541:5:541:35 | CallExpr | |
| variables.rs:541:26:541:28 | "b" | variables.rs:541:31:541:33 | "c" | |
| variables.rs:541:31:541:33 | "c" | variables.rs:541:25:541:34 | TupleExpr | |
| variables.rs:542:5:542:18 | PathExpr | variables.rs:542:20:542:31 | PathExpr | |
| variables.rs:542:5:542:36 | CallExpr | variables.rs:543:5:543:26 | ExprStmt | |
| variables.rs:542:5:542:37 | ExprStmt | variables.rs:542:5:542:18 | PathExpr | |
| variables.rs:542:20:542:31 | PathExpr | variables.rs:542:33:542:34 | 45 | |
| variables.rs:542:20:542:35 | CallExpr | variables.rs:542:5:542:36 | CallExpr | |
| variables.rs:542:33:542:34 | 45 | variables.rs:542:20:542:35 | CallExpr | |
| variables.rs:543:5:543:23 | PathExpr | variables.rs:543:5:543:25 | CallExpr | |
| variables.rs:543:5:543:25 | CallExpr | variables.rs:544:5:544:23 | ExprStmt | |
| variables.rs:543:5:543:26 | ExprStmt | variables.rs:543:5:543:23 | PathExpr | |
| variables.rs:544:5:544:20 | PathExpr | variables.rs:544:5:544:22 | CallExpr | |
| variables.rs:544:5:544:22 | CallExpr | variables.rs:545:5:545:19 | ExprStmt | |
| variables.rs:544:5:544:23 | ExprStmt | variables.rs:544:5:544:20 | PathExpr | |
| variables.rs:545:5:545:16 | PathExpr | variables.rs:545:5:545:18 | CallExpr | |
| variables.rs:545:5:545:18 | CallExpr | variables.rs:546:5:546:17 | ExprStmt | |
| variables.rs:545:5:545:19 | ExprStmt | variables.rs:545:5:545:16 | PathExpr | |
| variables.rs:546:5:546:14 | PathExpr | variables.rs:546:5:546:16 | CallExpr | |
| variables.rs:546:5:546:16 | CallExpr | variables.rs:547:5:547:13 | ExprStmt | |
| variables.rs:546:5:546:17 | ExprStmt | variables.rs:546:5:546:14 | PathExpr | |
| variables.rs:547:5:547:10 | PathExpr | variables.rs:547:5:547:12 | CallExpr | |
| variables.rs:547:5:547:12 | CallExpr | variables.rs:548:5:548:17 | ExprStmt | |
| variables.rs:547:5:547:13 | ExprStmt | variables.rs:547:5:547:10 | PathExpr | |
| variables.rs:548:5:548:14 | PathExpr | variables.rs:548:5:548:16 | CallExpr | |
| variables.rs:548:5:548:16 | CallExpr | variables.rs:549:5:549:12 | ExprStmt | |
| variables.rs:548:5:548:17 | ExprStmt | variables.rs:548:5:548:14 | PathExpr | |
| variables.rs:549:5:549:9 | PathExpr | variables.rs:549:5:549:11 | CallExpr | |
| variables.rs:549:5:549:11 | CallExpr | variables.rs:550:5:550:18 | ExprStmt | |
| variables.rs:549:5:549:12 | ExprStmt | variables.rs:549:5:549:9 | PathExpr | |
| variables.rs:550:5:550:15 | PathExpr | variables.rs:550:5:550:17 | CallExpr | |
| variables.rs:550:5:550:17 | CallExpr | variables.rs:551:5:551:20 | ExprStmt | |
| variables.rs:550:5:550:18 | ExprStmt | variables.rs:550:5:550:15 | PathExpr | |
| variables.rs:551:5:551:17 | PathExpr | variables.rs:551:5:551:19 | CallExpr | |
| variables.rs:551:5:551:19 | CallExpr | variables.rs:552:5:552:26 | ExprStmt | |
| variables.rs:551:5:551:20 | ExprStmt | variables.rs:551:5:551:17 | PathExpr | |
| variables.rs:552:5:552:23 | PathExpr | variables.rs:552:5:552:25 | CallExpr | |
| variables.rs:552:5:552:25 | CallExpr | variables.rs:553:5:553:14 | ExprStmt | |
| variables.rs:552:5:552:26 | ExprStmt | variables.rs:552:5:552:23 | PathExpr | |
| variables.rs:553:5:553:11 | PathExpr | variables.rs:553:5:553:13 | CallExpr | |
| variables.rs:553:5:553:13 | CallExpr | variables.rs:554:5:554:14 | ExprStmt | |
| variables.rs:553:5:553:14 | ExprStmt | variables.rs:553:5:553:11 | PathExpr | |
| variables.rs:554:5:554:11 | PathExpr | variables.rs:554:5:554:13 | CallExpr | |
| variables.rs:554:5:554:13 | CallExpr | variables.rs:555:5:555:30 | ExprStmt | |
| variables.rs:554:5:554:14 | ExprStmt | variables.rs:554:5:554:11 | PathExpr | |
| variables.rs:555:5:555:27 | PathExpr | variables.rs:555:5:555:29 | CallExpr | |
| variables.rs:555:5:555:29 | CallExpr | variables.rs:522:11:556:1 | BlockExpr | |
| variables.rs:555:5:555:30 | ExprStmt | variables.rs:555:5:555:27 | PathExpr | |
breakTarget
continueTarget

View File

@@ -5,8 +5,8 @@ nonSsaVariable
| variables.rs:379:13:379:13 | z |
| variables.rs:392:13:392:13 | x |
| variables.rs:426:13:426:13 | z |
| variables.rs:478:13:478:13 | a |
| variables.rs:506:11:506:11 | a |
| variables.rs:488:13:488:13 | a |
| variables.rs:516:11:516:11 | a |
definition
| variables.rs:3:14:3:14 | s | variables.rs:3:14:3:14 | s |
| variables.rs:7:14:7:14 | i | variables.rs:7:14:7:14 | i |
@@ -122,16 +122,20 @@ definition
| variables.rs:421:9:421:9 | y | variables.rs:418:13:418:13 | y |
| variables.rs:423:5:423:14 | CallExpr | variables.rs:418:13:418:13 | y |
| variables.rs:428:9:428:20 | closure3 | variables.rs:428:13:428:20 | closure3 |
| variables.rs:435:8:435:8 | b | variables.rs:435:8:435:8 | b |
| variables.rs:436:9:436:13 | x | variables.rs:436:13:436:13 | x |
| variables.rs:439:5:447:5 | phi | variables.rs:436:13:436:13 | x |
| variables.rs:440:9:440:9 | x | variables.rs:436:13:436:13 | x |
| variables.rs:444:9:444:9 | x | variables.rs:436:13:436:13 | x |
| variables.rs:451:13:451:14 | b1 | variables.rs:451:13:451:14 | b1 |
| variables.rs:451:24:451:25 | b2 | variables.rs:451:24:451:25 | b2 |
| variables.rs:452:9:452:9 | x | variables.rs:452:9:452:9 | x |
| variables.rs:487:9:487:9 | x | variables.rs:487:9:487:9 | x |
| variables.rs:491:9:491:9 | z | variables.rs:491:9:491:9 | z |
| variables.rs:436:9:436:13 | i | variables.rs:436:13:436:13 | i |
| variables.rs:437:9:437:13 | block | variables.rs:437:9:437:13 | block |
| variables.rs:438:9:438:9 | i | variables.rs:436:13:436:13 | i |
| variables.rs:441:5:441:15 | AwaitExpr | variables.rs:436:13:436:13 | i |
| variables.rs:445:8:445:8 | b | variables.rs:445:8:445:8 | b |
| variables.rs:446:9:446:13 | x | variables.rs:446:13:446:13 | x |
| variables.rs:449:5:457:5 | phi | variables.rs:446:13:446:13 | x |
| variables.rs:450:9:450:9 | x | variables.rs:446:13:446:13 | x |
| variables.rs:454:9:454:9 | x | variables.rs:446:13:446:13 | x |
| variables.rs:461:13:461:14 | b1 | variables.rs:461:13:461:14 | b1 |
| variables.rs:461:24:461:25 | b2 | variables.rs:461:24:461:25 | b2 |
| variables.rs:462:9:462:9 | x | variables.rs:462:9:462:9 | x |
| variables.rs:497:9:497:9 | x | variables.rs:497:9:497:9 | x |
| variables.rs:501:9:501:9 | z | variables.rs:501:9:501:9 | z |
read
| variables.rs:3:14:3:14 | s | variables.rs:3:14:3:14 | s | variables.rs:4:20:4:20 | s |
| variables.rs:7:14:7:14 | i | variables.rs:7:14:7:14 | i | variables.rs:8:20:8:20 | i |
@@ -237,21 +241,23 @@ read
| variables.rs:420:9:420:20 | closure2 | variables.rs:420:13:420:20 | closure2 | variables.rs:423:5:423:12 | closure2 |
| variables.rs:423:5:423:14 | CallExpr | variables.rs:418:13:418:13 | y | variables.rs:424:15:424:15 | y |
| variables.rs:428:9:428:20 | closure3 | variables.rs:428:13:428:20 | closure3 | variables.rs:431:5:431:12 | closure3 |
| variables.rs:435:8:435:8 | b | variables.rs:435:8:435:8 | b | variables.rs:439:8:439:8 | b |
| variables.rs:436:9:436:13 | x | variables.rs:436:13:436:13 | x | variables.rs:437:15:437:15 | x |
| variables.rs:436:9:436:13 | x | variables.rs:436:13:436:13 | x | variables.rs:438:15:438:15 | x |
| variables.rs:439:5:447:5 | phi | variables.rs:436:13:436:13 | x | variables.rs:448:15:448:15 | x |
| variables.rs:440:9:440:9 | x | variables.rs:436:13:436:13 | x | variables.rs:441:19:441:19 | x |
| variables.rs:440:9:440:9 | x | variables.rs:436:13:436:13 | x | variables.rs:442:19:442:19 | x |
| variables.rs:444:9:444:9 | x | variables.rs:436:13:436:13 | x | variables.rs:445:19:445:19 | x |
| variables.rs:444:9:444:9 | x | variables.rs:436:13:436:13 | x | variables.rs:446:19:446:19 | x |
| variables.rs:451:13:451:14 | b1 | variables.rs:451:13:451:14 | b1 | variables.rs:453:8:453:9 | b1 |
| variables.rs:451:24:451:25 | b2 | variables.rs:451:24:451:25 | b2 | variables.rs:459:8:459:9 | b2 |
| variables.rs:452:9:452:9 | x | variables.rs:452:9:452:9 | x | variables.rs:454:19:454:19 | x |
| variables.rs:452:9:452:9 | x | variables.rs:452:9:452:9 | x | variables.rs:456:19:456:19 | x |
| variables.rs:452:9:452:9 | x | variables.rs:452:9:452:9 | x | variables.rs:460:19:460:19 | x |
| variables.rs:452:9:452:9 | x | variables.rs:452:9:452:9 | x | variables.rs:462:19:462:19 | x |
| variables.rs:487:9:487:9 | x | variables.rs:487:9:487:9 | x | variables.rs:489:15:489:15 | x |
| variables.rs:437:9:437:13 | block | variables.rs:437:9:437:13 | block | variables.rs:441:5:441:9 | block |
| variables.rs:441:5:441:15 | AwaitExpr | variables.rs:436:13:436:13 | i | variables.rs:442:15:442:15 | i |
| variables.rs:445:8:445:8 | b | variables.rs:445:8:445:8 | b | variables.rs:449:8:449:8 | b |
| variables.rs:446:9:446:13 | x | variables.rs:446:13:446:13 | x | variables.rs:447:15:447:15 | x |
| variables.rs:446:9:446:13 | x | variables.rs:446:13:446:13 | x | variables.rs:448:15:448:15 | x |
| variables.rs:449:5:457:5 | phi | variables.rs:446:13:446:13 | x | variables.rs:458:15:458:15 | x |
| variables.rs:450:9:450:9 | x | variables.rs:446:13:446:13 | x | variables.rs:451:19:451:19 | x |
| variables.rs:450:9:450:9 | x | variables.rs:446:13:446:13 | x | variables.rs:452:19:452:19 | x |
| variables.rs:454:9:454:9 | x | variables.rs:446:13:446:13 | x | variables.rs:455:19:455:19 | x |
| variables.rs:454:9:454:9 | x | variables.rs:446:13:446:13 | x | variables.rs:456:19:456:19 | x |
| variables.rs:461:13:461:14 | b1 | variables.rs:461:13:461:14 | b1 | variables.rs:463:8:463:9 | b1 |
| variables.rs:461:24:461:25 | b2 | variables.rs:461:24:461:25 | b2 | variables.rs:469:8:469:9 | b2 |
| variables.rs:462:9:462:9 | x | variables.rs:462:9:462:9 | x | variables.rs:464:19:464:19 | x |
| variables.rs:462:9:462:9 | x | variables.rs:462:9:462:9 | x | variables.rs:466:19:466:19 | x |
| variables.rs:462:9:462:9 | x | variables.rs:462:9:462:9 | x | variables.rs:470:19:470:19 | x |
| variables.rs:462:9:462:9 | x | variables.rs:462:9:462:9 | x | variables.rs:472:19:472:19 | x |
| variables.rs:497:9:497:9 | x | variables.rs:497:9:497:9 | x | variables.rs:499:15:499:15 | x |
firstRead
| variables.rs:3:14:3:14 | s | variables.rs:3:14:3:14 | s | variables.rs:4:20:4:20 | s |
| variables.rs:7:14:7:14 | i | variables.rs:7:14:7:14 | i | variables.rs:8:20:8:20 | i |
@@ -339,16 +345,18 @@ firstRead
| variables.rs:420:9:420:20 | closure2 | variables.rs:420:13:420:20 | closure2 | variables.rs:423:5:423:12 | closure2 |
| variables.rs:423:5:423:14 | CallExpr | variables.rs:418:13:418:13 | y | variables.rs:424:15:424:15 | y |
| variables.rs:428:9:428:20 | closure3 | variables.rs:428:13:428:20 | closure3 | variables.rs:431:5:431:12 | closure3 |
| variables.rs:435:8:435:8 | b | variables.rs:435:8:435:8 | b | variables.rs:439:8:439:8 | b |
| variables.rs:436:9:436:13 | x | variables.rs:436:13:436:13 | x | variables.rs:437:15:437:15 | x |
| variables.rs:439:5:447:5 | phi | variables.rs:436:13:436:13 | x | variables.rs:448:15:448:15 | x |
| variables.rs:440:9:440:9 | x | variables.rs:436:13:436:13 | x | variables.rs:441:19:441:19 | x |
| variables.rs:444:9:444:9 | x | variables.rs:436:13:436:13 | x | variables.rs:445:19:445:19 | x |
| variables.rs:451:13:451:14 | b1 | variables.rs:451:13:451:14 | b1 | variables.rs:453:8:453:9 | b1 |
| variables.rs:451:24:451:25 | b2 | variables.rs:451:24:451:25 | b2 | variables.rs:459:8:459:9 | b2 |
| variables.rs:452:9:452:9 | x | variables.rs:452:9:452:9 | x | variables.rs:454:19:454:19 | x |
| variables.rs:452:9:452:9 | x | variables.rs:452:9:452:9 | x | variables.rs:456:19:456:19 | x |
| variables.rs:487:9:487:9 | x | variables.rs:487:9:487:9 | x | variables.rs:489:15:489:15 | x |
| variables.rs:437:9:437:13 | block | variables.rs:437:9:437:13 | block | variables.rs:441:5:441:9 | block |
| variables.rs:441:5:441:15 | AwaitExpr | variables.rs:436:13:436:13 | i | variables.rs:442:15:442:15 | i |
| variables.rs:445:8:445:8 | b | variables.rs:445:8:445:8 | b | variables.rs:449:8:449:8 | b |
| variables.rs:446:9:446:13 | x | variables.rs:446:13:446:13 | x | variables.rs:447:15:447:15 | x |
| variables.rs:449:5:457:5 | phi | variables.rs:446:13:446:13 | x | variables.rs:458:15:458:15 | x |
| variables.rs:450:9:450:9 | x | variables.rs:446:13:446:13 | x | variables.rs:451:19:451:19 | x |
| variables.rs:454:9:454:9 | x | variables.rs:446:13:446:13 | x | variables.rs:455:19:455:19 | x |
| variables.rs:461:13:461:14 | b1 | variables.rs:461:13:461:14 | b1 | variables.rs:463:8:463:9 | b1 |
| variables.rs:461:24:461:25 | b2 | variables.rs:461:24:461:25 | b2 | variables.rs:469:8:469:9 | b2 |
| variables.rs:462:9:462:9 | x | variables.rs:462:9:462:9 | x | variables.rs:464:19:464:19 | x |
| variables.rs:462:9:462:9 | x | variables.rs:462:9:462:9 | x | variables.rs:466:19:466:19 | x |
| variables.rs:497:9:497:9 | x | variables.rs:497:9:497:9 | x | variables.rs:499:15:499:15 | x |
lastRead
| variables.rs:3:14:3:14 | s | variables.rs:3:14:3:14 | s | variables.rs:4:20:4:20 | s |
| variables.rs:7:14:7:14 | i | variables.rs:7:14:7:14 | i | variables.rs:8:20:8:20 | i |
@@ -437,16 +445,18 @@ lastRead
| variables.rs:420:9:420:20 | closure2 | variables.rs:420:13:420:20 | closure2 | variables.rs:423:5:423:12 | closure2 |
| variables.rs:423:5:423:14 | CallExpr | variables.rs:418:13:418:13 | y | variables.rs:424:15:424:15 | y |
| variables.rs:428:9:428:20 | closure3 | variables.rs:428:13:428:20 | closure3 | variables.rs:431:5:431:12 | closure3 |
| variables.rs:435:8:435:8 | b | variables.rs:435:8:435:8 | b | variables.rs:439:8:439:8 | b |
| variables.rs:436:9:436:13 | x | variables.rs:436:13:436:13 | x | variables.rs:438:15:438:15 | x |
| variables.rs:439:5:447:5 | phi | variables.rs:436:13:436:13 | x | variables.rs:448:15:448:15 | x |
| variables.rs:440:9:440:9 | x | variables.rs:436:13:436:13 | x | variables.rs:442:19:442:19 | x |
| variables.rs:444:9:444:9 | x | variables.rs:436:13:436:13 | x | variables.rs:446:19:446:19 | x |
| variables.rs:451:13:451:14 | b1 | variables.rs:451:13:451:14 | b1 | variables.rs:453:8:453:9 | b1 |
| variables.rs:451:24:451:25 | b2 | variables.rs:451:24:451:25 | b2 | variables.rs:459:8:459:9 | b2 |
| variables.rs:452:9:452:9 | x | variables.rs:452:9:452:9 | x | variables.rs:460:19:460:19 | x |
| variables.rs:452:9:452:9 | x | variables.rs:452:9:452:9 | x | variables.rs:462:19:462:19 | x |
| variables.rs:487:9:487:9 | x | variables.rs:487:9:487:9 | x | variables.rs:489:15:489:15 | x |
| variables.rs:437:9:437:13 | block | variables.rs:437:9:437:13 | block | variables.rs:441:5:441:9 | block |
| variables.rs:441:5:441:15 | AwaitExpr | variables.rs:436:13:436:13 | i | variables.rs:442:15:442:15 | i |
| variables.rs:445:8:445:8 | b | variables.rs:445:8:445:8 | b | variables.rs:449:8:449:8 | b |
| variables.rs:446:9:446:13 | x | variables.rs:446:13:446:13 | x | variables.rs:448:15:448:15 | x |
| variables.rs:449:5:457:5 | phi | variables.rs:446:13:446:13 | x | variables.rs:458:15:458:15 | x |
| variables.rs:450:9:450:9 | x | variables.rs:446:13:446:13 | x | variables.rs:452:19:452:19 | x |
| variables.rs:454:9:454:9 | x | variables.rs:446:13:446:13 | x | variables.rs:456:19:456:19 | x |
| variables.rs:461:13:461:14 | b1 | variables.rs:461:13:461:14 | b1 | variables.rs:463:8:463:9 | b1 |
| variables.rs:461:24:461:25 | b2 | variables.rs:461:24:461:25 | b2 | variables.rs:469:8:469:9 | b2 |
| variables.rs:462:9:462:9 | x | variables.rs:462:9:462:9 | x | variables.rs:470:19:470:19 | x |
| variables.rs:462:9:462:9 | x | variables.rs:462:9:462:9 | x | variables.rs:472:19:472:19 | x |
| variables.rs:497:9:497:9 | x | variables.rs:497:9:497:9 | x | variables.rs:499:15:499:15 | x |
adjacentReads
| variables.rs:35:9:35:10 | x3 | variables.rs:35:9:35:10 | x3 | variables.rs:36:15:36:16 | x3 | variables.rs:38:9:38:10 | x3 |
| variables.rs:43:9:43:10 | x4 | variables.rs:43:9:43:10 | x4 | variables.rs:44:15:44:16 | x4 | variables.rs:49:15:49:16 | x4 |
@@ -467,13 +477,13 @@ adjacentReads
| variables.rs:363:22:363:22 | x | variables.rs:363:22:363:22 | x | variables.rs:365:10:365:10 | x | variables.rs:366:10:366:10 | x |
| variables.rs:363:22:363:22 | x | variables.rs:363:22:363:22 | x | variables.rs:366:10:366:10 | x | variables.rs:368:9:368:9 | x |
| variables.rs:380:9:380:9 | w | variables.rs:380:9:380:9 | w | variables.rs:384:9:384:9 | w | variables.rs:386:7:386:7 | w |
| variables.rs:436:9:436:13 | x | variables.rs:436:13:436:13 | x | variables.rs:437:15:437:15 | x | variables.rs:438:15:438:15 | x |
| variables.rs:440:9:440:9 | x | variables.rs:436:13:436:13 | x | variables.rs:441:19:441:19 | x | variables.rs:442:19:442:19 | x |
| variables.rs:444:9:444:9 | x | variables.rs:436:13:436:13 | x | variables.rs:445:19:445:19 | x | variables.rs:446:19:446:19 | x |
| variables.rs:452:9:452:9 | x | variables.rs:452:9:452:9 | x | variables.rs:454:19:454:19 | x | variables.rs:460:19:460:19 | x |
| variables.rs:452:9:452:9 | x | variables.rs:452:9:452:9 | x | variables.rs:454:19:454:19 | x | variables.rs:462:19:462:19 | x |
| variables.rs:452:9:452:9 | x | variables.rs:452:9:452:9 | x | variables.rs:456:19:456:19 | x | variables.rs:460:19:460:19 | x |
| variables.rs:452:9:452:9 | x | variables.rs:452:9:452:9 | x | variables.rs:456:19:456:19 | x | variables.rs:462:19:462:19 | x |
| variables.rs:446:9:446:13 | x | variables.rs:446:13:446:13 | x | variables.rs:447:15:447:15 | x | variables.rs:448:15:448:15 | x |
| variables.rs:450:9:450:9 | x | variables.rs:446:13:446:13 | x | variables.rs:451:19:451:19 | x | variables.rs:452:19:452:19 | x |
| variables.rs:454:9:454:9 | x | variables.rs:446:13:446:13 | x | variables.rs:455:19:455:19 | x | variables.rs:456:19:456:19 | x |
| variables.rs:462:9:462:9 | x | variables.rs:462:9:462:9 | x | variables.rs:464:19:464:19 | x | variables.rs:470:19:470:19 | x |
| variables.rs:462:9:462:9 | x | variables.rs:462:9:462:9 | x | variables.rs:464:19:464:19 | x | variables.rs:472:19:472:19 | x |
| variables.rs:462:9:462:9 | x | variables.rs:462:9:462:9 | x | variables.rs:466:19:466:19 | x | variables.rs:470:19:470:19 | x |
| variables.rs:462:9:462:9 | x | variables.rs:462:9:462:9 | x | variables.rs:466:19:466:19 | x | variables.rs:472:19:472:19 | x |
phi
| variables.rs:191:9:191:44 | [match(true)] phi | variables.rs:191:9:191:44 | a3 | variables.rs:191:22:191:23 | a3 |
| variables.rs:191:9:191:44 | [match(true)] phi | variables.rs:191:9:191:44 | a3 | variables.rs:191:42:191:43 | a3 |
@@ -499,19 +509,19 @@ phi
| variables.rs:255:35:255:82 | [match(true)] phi | variables.rs:255:9:255:109 | a13 | variables.rs:255:79:255:81 | a13 |
| variables.rs:272:6:272:41 | [match(true)] phi | variables.rs:272:6:272:41 | a9 | variables.rs:272:19:272:20 | a9 |
| variables.rs:272:6:272:41 | [match(true)] phi | variables.rs:272:6:272:41 | a9 | variables.rs:272:39:272:40 | a9 |
| variables.rs:439:5:447:5 | phi | variables.rs:436:13:436:13 | x | variables.rs:440:9:440:9 | x |
| variables.rs:439:5:447:5 | phi | variables.rs:436:13:436:13 | x | variables.rs:444:9:444:9 | x |
| variables.rs:449:5:457:5 | phi | variables.rs:446:13:446:13 | x | variables.rs:450:9:450:9 | x |
| variables.rs:449:5:457:5 | phi | variables.rs:446:13:446:13 | x | variables.rs:454:9:454:9 | x |
phiReadNode
| variables.rs:104:11:105:12 | SSA phi read(s1) | variables.rs:102:9:102:10 | s1 |
| variables.rs:453:5:457:5 | SSA phi read(x) | variables.rs:452:9:452:9 | x |
| variables.rs:463:5:467:5 | SSA phi read(x) | variables.rs:462:9:462:9 | x |
phiReadNodeRead
| variables.rs:104:11:105:12 | SSA phi read(s1) | variables.rs:102:9:102:10 | s1 | variables.rs:105:11:105:12 | s1 |
| variables.rs:453:5:457:5 | SSA phi read(x) | variables.rs:452:9:452:9 | x | variables.rs:460:19:460:19 | x |
| variables.rs:453:5:457:5 | SSA phi read(x) | variables.rs:452:9:452:9 | x | variables.rs:462:19:462:19 | x |
| variables.rs:463:5:467:5 | SSA phi read(x) | variables.rs:462:9:462:9 | x | variables.rs:470:19:470:19 | x |
| variables.rs:463:5:467:5 | SSA phi read(x) | variables.rs:462:9:462:9 | x | variables.rs:472:19:472:19 | x |
phiReadInput
| variables.rs:104:11:105:12 | SSA phi read(s1) | variables.rs:102:9:102:10 | s1 |
| variables.rs:104:11:105:12 | SSA phi read(s1) | variables.rs:104:11:105:12 | SSA phi read(s1) |
| variables.rs:453:5:457:5 | SSA phi read(x) | variables.rs:452:9:452:9 | x |
| variables.rs:463:5:467:5 | SSA phi read(x) | variables.rs:462:9:462:9 | x |
ultimateDef
| variables.rs:191:9:191:44 | [match(true)] phi | variables.rs:191:22:191:23 | a3 |
| variables.rs:191:9:191:44 | [match(true)] phi | variables.rs:191:42:191:43 | a3 |
@@ -540,11 +550,12 @@ ultimateDef
| variables.rs:255:35:255:82 | [match(true)] phi | variables.rs:255:79:255:81 | a13 |
| variables.rs:272:6:272:41 | [match(true)] phi | variables.rs:272:19:272:20 | a9 |
| variables.rs:272:6:272:41 | [match(true)] phi | variables.rs:272:39:272:40 | a9 |
| variables.rs:439:5:447:5 | phi | variables.rs:440:9:440:9 | x |
| variables.rs:439:5:447:5 | phi | variables.rs:444:9:444:9 | x |
| variables.rs:449:5:457:5 | phi | variables.rs:450:9:450:9 | x |
| variables.rs:449:5:457:5 | phi | variables.rs:454:9:454:9 | x |
assigns
| variables.rs:23:5:23:6 | x2 | variables.rs:23:10:23:10 | 5 |
| variables.rs:30:5:30:5 | x | variables.rs:30:9:30:9 | 2 |
| variables.rs:421:9:421:9 | y | variables.rs:421:13:421:13 | 3 |
| variables.rs:440:9:440:9 | x | variables.rs:440:13:440:13 | 2 |
| variables.rs:444:9:444:9 | x | variables.rs:444:13:444:13 | 3 |
| variables.rs:438:9:438:9 | i | variables.rs:438:13:438:13 | 1 |
| variables.rs:450:9:450:9 | x | variables.rs:450:13:450:13 | 2 |
| variables.rs:454:9:454:9 | x | variables.rs:454:13:454:13 | 3 |

View File

@@ -88,15 +88,17 @@ variable
| variables.rs:420:13:420:20 | closure2 |
| variables.rs:426:13:426:13 | z |
| variables.rs:428:13:428:20 | closure3 |
| variables.rs:435:8:435:8 | b |
| variables.rs:436:13:436:13 | x |
| variables.rs:451:13:451:14 | b1 |
| variables.rs:451:24:451:25 | b2 |
| variables.rs:452:9:452:9 | x |
| variables.rs:478:13:478:13 | a |
| variables.rs:487:9:487:9 | x |
| variables.rs:491:9:491:9 | z |
| variables.rs:506:11:506:11 | a |
| variables.rs:436:13:436:13 | i |
| variables.rs:437:9:437:13 | block |
| variables.rs:445:8:445:8 | b |
| variables.rs:446:13:446:13 | x |
| variables.rs:461:13:461:14 | b1 |
| variables.rs:461:24:461:25 | b2 |
| variables.rs:462:9:462:9 | x |
| variables.rs:488:13:488:13 | a |
| variables.rs:497:9:497:9 | x |
| variables.rs:501:9:501:9 | z |
| variables.rs:516:11:516:11 | a |
variableAccess
| variables.rs:4:20:4:20 | s | variables.rs:3:14:3:14 | s |
| variables.rs:8:20:8:20 | i | variables.rs:7:14:7:14 | i |
@@ -225,32 +227,35 @@ variableAccess
| variables.rs:429:9:429:9 | z | variables.rs:426:13:426:13 | z |
| variables.rs:431:5:431:12 | closure3 | variables.rs:428:13:428:20 | closure3 |
| variables.rs:432:15:432:15 | z | variables.rs:426:13:426:13 | z |
| variables.rs:437:15:437:15 | x | variables.rs:436:13:436:13 | x |
| variables.rs:438:15:438:15 | x | variables.rs:436:13:436:13 | x |
| variables.rs:439:8:439:8 | b | variables.rs:435:8:435:8 | b |
| variables.rs:440:9:440:9 | x | variables.rs:436:13:436:13 | x |
| variables.rs:441:19:441:19 | x | variables.rs:436:13:436:13 | x |
| variables.rs:442:19:442:19 | x | variables.rs:436:13:436:13 | x |
| variables.rs:444:9:444:9 | x | variables.rs:436:13:436:13 | x |
| variables.rs:445:19:445:19 | x | variables.rs:436:13:436:13 | x |
| variables.rs:446:19:446:19 | x | variables.rs:436:13:436:13 | x |
| variables.rs:448:15:448:15 | x | variables.rs:436:13:436:13 | x |
| variables.rs:453:8:453:9 | b1 | variables.rs:451:13:451:14 | b1 |
| variables.rs:454:19:454:19 | x | variables.rs:452:9:452:9 | x |
| variables.rs:456:19:456:19 | x | variables.rs:452:9:452:9 | x |
| variables.rs:459:8:459:9 | b2 | variables.rs:451:24:451:25 | b2 |
| variables.rs:460:19:460:19 | x | variables.rs:452:9:452:9 | x |
| variables.rs:462:19:462:19 | x | variables.rs:452:9:452:9 | x |
| variables.rs:479:15:479:15 | a | variables.rs:478:13:478:13 | a |
| variables.rs:480:5:480:5 | a | variables.rs:478:13:478:13 | a |
| variables.rs:481:15:481:15 | a | variables.rs:478:13:478:13 | a |
| variables.rs:482:5:482:5 | a | variables.rs:478:13:478:13 | a |
| variables.rs:483:15:483:15 | a | variables.rs:478:13:478:13 | a |
| variables.rs:488:20:488:20 | x | variables.rs:487:9:487:9 | x |
| variables.rs:489:15:489:15 | x | variables.rs:487:9:487:9 | x |
| variables.rs:492:20:492:20 | z | variables.rs:491:9:491:9 | z |
| variables.rs:507:3:507:3 | a | variables.rs:506:11:506:11 | a |
| variables.rs:509:13:509:13 | a | variables.rs:506:11:506:11 | a |
| variables.rs:438:9:438:9 | i | variables.rs:436:13:436:13 | i |
| variables.rs:441:5:441:9 | block | variables.rs:437:9:437:13 | block |
| variables.rs:442:15:442:15 | i | variables.rs:436:13:436:13 | i |
| variables.rs:447:15:447:15 | x | variables.rs:446:13:446:13 | x |
| variables.rs:448:15:448:15 | x | variables.rs:446:13:446:13 | x |
| variables.rs:449:8:449:8 | b | variables.rs:445:8:445:8 | b |
| variables.rs:450:9:450:9 | x | variables.rs:446:13:446:13 | x |
| variables.rs:451:19:451:19 | x | variables.rs:446:13:446:13 | x |
| variables.rs:452:19:452:19 | x | variables.rs:446:13:446:13 | x |
| variables.rs:454:9:454:9 | x | variables.rs:446:13:446:13 | x |
| variables.rs:455:19:455:19 | x | variables.rs:446:13:446:13 | x |
| variables.rs:456:19:456:19 | x | variables.rs:446:13:446:13 | x |
| variables.rs:458:15:458:15 | x | variables.rs:446:13:446:13 | x |
| variables.rs:463:8:463:9 | b1 | variables.rs:461:13:461:14 | b1 |
| variables.rs:464:19:464:19 | x | variables.rs:462:9:462:9 | x |
| variables.rs:466:19:466:19 | x | variables.rs:462:9:462:9 | x |
| variables.rs:469:8:469:9 | b2 | variables.rs:461:24:461:25 | b2 |
| variables.rs:470:19:470:19 | x | variables.rs:462:9:462:9 | x |
| variables.rs:472:19:472:19 | x | variables.rs:462:9:462:9 | x |
| variables.rs:489:15:489:15 | a | variables.rs:488:13:488:13 | a |
| variables.rs:490:5:490:5 | a | variables.rs:488:13:488:13 | a |
| variables.rs:491:15:491:15 | a | variables.rs:488:13:488:13 | a |
| variables.rs:492:5:492:5 | a | variables.rs:488:13:488:13 | a |
| variables.rs:493:15:493:15 | a | variables.rs:488:13:488:13 | a |
| variables.rs:498:20:498:20 | x | variables.rs:497:9:497:9 | x |
| variables.rs:499:15:499:15 | x | variables.rs:497:9:497:9 | x |
| variables.rs:502:20:502:20 | z | variables.rs:501:9:501:9 | z |
| variables.rs:517:3:517:3 | a | variables.rs:516:11:516:11 | a |
| variables.rs:519:13:519:13 | a | variables.rs:516:11:516:11 | a |
variableWriteAccess
| variables.rs:23:5:23:6 | x2 | variables.rs:21:13:21:14 | x2 |
| variables.rs:30:5:30:5 | x | variables.rs:28:13:28:13 | x |
@@ -258,9 +263,10 @@ variableWriteAccess
| variables.rs:289:9:289:10 | b4 | variables.rs:280:13:280:14 | b4 |
| variables.rs:290:9:290:11 | a10 | variables.rs:279:13:279:15 | a10 |
| variables.rs:421:9:421:9 | y | variables.rs:418:13:418:13 | y |
| variables.rs:440:9:440:9 | x | variables.rs:436:13:436:13 | x |
| variables.rs:444:9:444:9 | x | variables.rs:436:13:436:13 | x |
| variables.rs:482:5:482:5 | a | variables.rs:478:13:478:13 | a |
| variables.rs:438:9:438:9 | i | variables.rs:436:13:436:13 | i |
| variables.rs:450:9:450:9 | x | variables.rs:446:13:446:13 | x |
| variables.rs:454:9:454:9 | x | variables.rs:446:13:446:13 | x |
| variables.rs:492:5:492:5 | a | variables.rs:488:13:488:13 | a |
variableReadAccess
| variables.rs:4:20:4:20 | s | variables.rs:3:14:3:14 | s |
| variables.rs:8:20:8:20 | i | variables.rs:7:14:7:14 | i |
@@ -374,27 +380,29 @@ variableReadAccess
| variables.rs:429:9:429:9 | z | variables.rs:426:13:426:13 | z |
| variables.rs:431:5:431:12 | closure3 | variables.rs:428:13:428:20 | closure3 |
| variables.rs:432:15:432:15 | z | variables.rs:426:13:426:13 | z |
| variables.rs:437:15:437:15 | x | variables.rs:436:13:436:13 | x |
| variables.rs:438:15:438:15 | x | variables.rs:436:13:436:13 | x |
| variables.rs:439:8:439:8 | b | variables.rs:435:8:435:8 | b |
| variables.rs:441:19:441:19 | x | variables.rs:436:13:436:13 | x |
| variables.rs:442:19:442:19 | x | variables.rs:436:13:436:13 | x |
| variables.rs:445:19:445:19 | x | variables.rs:436:13:436:13 | x |
| variables.rs:446:19:446:19 | x | variables.rs:436:13:436:13 | x |
| variables.rs:448:15:448:15 | x | variables.rs:436:13:436:13 | x |
| variables.rs:453:8:453:9 | b1 | variables.rs:451:13:451:14 | b1 |
| variables.rs:454:19:454:19 | x | variables.rs:452:9:452:9 | x |
| variables.rs:456:19:456:19 | x | variables.rs:452:9:452:9 | x |
| variables.rs:459:8:459:9 | b2 | variables.rs:451:24:451:25 | b2 |
| variables.rs:460:19:460:19 | x | variables.rs:452:9:452:9 | x |
| variables.rs:462:19:462:19 | x | variables.rs:452:9:452:9 | x |
| variables.rs:479:15:479:15 | a | variables.rs:478:13:478:13 | a |
| variables.rs:480:5:480:5 | a | variables.rs:478:13:478:13 | a |
| variables.rs:481:15:481:15 | a | variables.rs:478:13:478:13 | a |
| variables.rs:483:15:483:15 | a | variables.rs:478:13:478:13 | a |
| variables.rs:489:15:489:15 | x | variables.rs:487:9:487:9 | x |
| variables.rs:507:3:507:3 | a | variables.rs:506:11:506:11 | a |
| variables.rs:509:13:509:13 | a | variables.rs:506:11:506:11 | a |
| variables.rs:441:5:441:9 | block | variables.rs:437:9:437:13 | block |
| variables.rs:442:15:442:15 | i | variables.rs:436:13:436:13 | i |
| variables.rs:447:15:447:15 | x | variables.rs:446:13:446:13 | x |
| variables.rs:448:15:448:15 | x | variables.rs:446:13:446:13 | x |
| variables.rs:449:8:449:8 | b | variables.rs:445:8:445:8 | b |
| variables.rs:451:19:451:19 | x | variables.rs:446:13:446:13 | x |
| variables.rs:452:19:452:19 | x | variables.rs:446:13:446:13 | x |
| variables.rs:455:19:455:19 | x | variables.rs:446:13:446:13 | x |
| variables.rs:456:19:456:19 | x | variables.rs:446:13:446:13 | x |
| variables.rs:458:15:458:15 | x | variables.rs:446:13:446:13 | x |
| variables.rs:463:8:463:9 | b1 | variables.rs:461:13:461:14 | b1 |
| variables.rs:464:19:464:19 | x | variables.rs:462:9:462:9 | x |
| variables.rs:466:19:466:19 | x | variables.rs:462:9:462:9 | x |
| variables.rs:469:8:469:9 | b2 | variables.rs:461:24:461:25 | b2 |
| variables.rs:470:19:470:19 | x | variables.rs:462:9:462:9 | x |
| variables.rs:472:19:472:19 | x | variables.rs:462:9:462:9 | x |
| variables.rs:489:15:489:15 | a | variables.rs:488:13:488:13 | a |
| variables.rs:490:5:490:5 | a | variables.rs:488:13:488:13 | a |
| variables.rs:491:15:491:15 | a | variables.rs:488:13:488:13 | a |
| variables.rs:493:15:493:15 | a | variables.rs:488:13:488:13 | a |
| variables.rs:499:15:499:15 | x | variables.rs:497:9:497:9 | x |
| variables.rs:517:3:517:3 | a | variables.rs:516:11:516:11 | a |
| variables.rs:519:13:519:13 | a | variables.rs:516:11:516:11 | a |
variableInitializer
| variables.rs:16:9:16:10 | x1 | variables.rs:16:14:16:16 | "a" |
| variables.rs:21:13:21:14 | x2 | variables.rs:21:18:21:18 | 4 |
@@ -438,19 +446,23 @@ variableInitializer
| variables.rs:420:13:420:20 | closure2 | variables.rs:420:24:422:5 | ClosureExpr |
| variables.rs:426:13:426:13 | z | variables.rs:426:17:426:17 | 2 |
| variables.rs:428:13:428:20 | closure3 | variables.rs:428:24:430:5 | ClosureExpr |
| variables.rs:436:13:436:13 | x | variables.rs:436:17:436:17 | 1 |
| variables.rs:452:9:452:9 | x | variables.rs:452:13:452:13 | 1 |
| variables.rs:478:13:478:13 | a | variables.rs:478:17:478:35 | RecordExpr |
| variables.rs:487:9:487:9 | x | variables.rs:487:13:487:14 | 16 |
| variables.rs:491:9:491:9 | z | variables.rs:491:13:491:14 | 17 |
| variables.rs:506:11:506:11 | a | variables.rs:506:15:506:33 | RecordExpr |
| variables.rs:436:13:436:13 | i | variables.rs:436:22:436:22 | 0 |
| variables.rs:437:9:437:13 | block | variables.rs:437:17:439:5 | BlockExpr |
| variables.rs:446:13:446:13 | x | variables.rs:446:17:446:17 | 1 |
| variables.rs:462:9:462:9 | x | variables.rs:462:13:462:13 | 1 |
| variables.rs:488:13:488:13 | a | variables.rs:488:17:488:35 | RecordExpr |
| variables.rs:497:9:497:9 | x | variables.rs:497:13:497:14 | 16 |
| variables.rs:501:9:501:9 | z | variables.rs:501:13:501:14 | 17 |
| variables.rs:516:11:516:11 | a | variables.rs:516:15:516:33 | RecordExpr |
capturedVariable
| variables.rs:400:9:400:9 | x |
| variables.rs:410:13:410:13 | x |
| variables.rs:418:13:418:13 | y |
| variables.rs:426:13:426:13 | z |
| variables.rs:436:13:436:13 | i |
capturedAccess
| variables.rs:403:19:403:19 | x |
| variables.rs:413:19:413:19 | x |
| variables.rs:421:9:421:9 | y |
| variables.rs:429:9:429:9 | z |
| variables.rs:438:9:438:9 | i |

View File

@@ -432,6 +432,16 @@ fn capture_mut() {
print_i64(z); // $ read_access=z
}
async fn async_block_capture() {
let mut i: i64 = 0; // i
let block = async {
i = 1; // $ write_access=i
};
// The await below causes write to `i`
block.await; // $ read_access=block
print_i64(i); // $ read_access=i
}
fn phi(b : bool) {
let mut x = 1; // x
print_i64(x); // $ read_access=x
@@ -539,6 +549,7 @@ fn main() {
alias();
capture_mut();
capture_immut();
async_block_capture();
structs();
ref_arg();
ref_methodcall_receiver();

View File

@@ -18,5 +18,3 @@
| more.rs:44:9:44:14 | a_ptr4 | Variable $@ is assigned a value that is never used. | more.rs:44:9:44:14 | a_ptr4 | a_ptr4 |
| more.rs:59:9:59:13 | d_ptr | Variable $@ is assigned a value that is never used. | more.rs:59:9:59:13 | d_ptr | d_ptr |
| more.rs:65:9:65:17 | f_ptr | Variable $@ is assigned a value that is never used. | more.rs:65:13:65:17 | f_ptr | f_ptr |
| unreachable.rs:292:9:292:15 | for_ten | Variable $@ is assigned a value that is never used. | unreachable.rs:292:9:292:15 | for_ten | for_ten |
| unreachable.rs:299:9:299:16 | for_ever | Variable $@ is assigned a value that is never used. | unreachable.rs:299:9:299:16 | for_ever | for_ever |

View File

@@ -289,14 +289,14 @@ pub fn unreachable_loop() {
async fn do_something_async() {}
pub async fn unreachable_loop_async() {
let for_ten = async { // $ SPURIOUS: Alert[rust/unused-value]
let for_ten = async {
for _ in 1..10 {
do_something_async().await;
}
do_something();
};
let for_ever = async { // $ SPURIOUS: Alert[rust/unused-value]
let for_ever = async {
loop {
do_something_async().await;
}