diff --git a/go/ql/lib/change-notes/2025-02-26-location-info-changed.md b/go/ql/lib/change-notes/2025-02-26-location-info-changed.md new file mode 100644 index 000000000000..e644eafc6722 --- /dev/null +++ b/go/ql/lib/change-notes/2025-02-26-location-info-changed.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The location info for the following classes has been changed slightly to match a location that is in the database: `BasicBlock`, `ControlFlow::EntryNode`, `ControlFlow::ExitNode`, `ControlFlow::ConditionGuardNode`, `IR::ImplicitLiteralElementIndexInstruction`, `IR::EvalImplicitTrueInstruction`, `SsaImplicitDefinition`, `SsaPhiNode`. diff --git a/go/ql/lib/semmle/go/controlflow/BasicBlocks.qll b/go/ql/lib/semmle/go/controlflow/BasicBlocks.qll index 128aecdfa969..22484117242a 100644 --- a/go/ql/lib/semmle/go/controlflow/BasicBlocks.qll +++ b/go/ql/lib/semmle/go/controlflow/BasicBlocks.qll @@ -124,8 +124,7 @@ class BasicBlock extends TControlFlowNode { predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - this.getFirstNode().hasLocationInfo(filepath, startline, startcolumn, _, _) and - this.getLastNode().hasLocationInfo(_, _, _, endline, endcolumn) + this.getFirstNode().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } } diff --git a/go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll b/go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll index eeaed8ed2f75..6bbdbd989603 100644 --- a/go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll +++ b/go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll @@ -247,9 +247,7 @@ module ControlFlow { override predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - cond.hasLocationInfo(filepath, _, _, startline, startcolumn) and - endline = startline and - endcolumn = startcolumn + cond.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } } diff --git a/go/ql/lib/semmle/go/controlflow/ControlFlowGraphImpl.qll b/go/ql/lib/semmle/go/controlflow/ControlFlowGraphImpl.qll index 7c2769562f63..4ca790a2cdd8 100644 --- a/go/ql/lib/semmle/go/controlflow/ControlFlowGraphImpl.qll +++ b/go/ql/lib/semmle/go/controlflow/ControlFlowGraphImpl.qll @@ -440,9 +440,7 @@ class EntryNode extends ControlFlow::Node, MkEntryNode { override predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - root.hasLocationInfo(filepath, startline, startcolumn, _, _) and - endline = startline and - endcolumn = startcolumn + root.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } } @@ -461,9 +459,7 @@ class ExitNode extends ControlFlow::Node, MkExitNode { override predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - root.hasLocationInfo(filepath, _, _, endline, endcolumn) and - endline = startline and - endcolumn = startcolumn + root.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } } diff --git a/go/ql/lib/semmle/go/controlflow/IR.qll b/go/ql/lib/semmle/go/controlflow/IR.qll index addd85a36c4c..c401b661643f 100644 --- a/go/ql/lib/semmle/go/controlflow/IR.qll +++ b/go/ql/lib/semmle/go/controlflow/IR.qll @@ -647,9 +647,7 @@ module IR { override predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - elt.hasLocationInfo(filepath, startline, startcolumn, _, _) and - endline = startline and - endcolumn = startcolumn + elt.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } } @@ -1231,9 +1229,7 @@ module IR { override predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - stmt.hasLocationInfo(filepath, startline, startcolumn, _, _) and - endline = startline and - endcolumn = startcolumn + stmt.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } } diff --git a/go/ql/lib/semmle/go/dataflow/SSA.qll b/go/ql/lib/semmle/go/dataflow/SSA.qll index 97a9ac4e0697..ae0d267cace6 100644 --- a/go/ql/lib/semmle/go/dataflow/SSA.qll +++ b/go/ql/lib/semmle/go/dataflow/SSA.qll @@ -217,9 +217,7 @@ abstract class SsaImplicitDefinition extends SsaDefinition { override predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - endline = startline and - endcolumn = startcolumn and - this.getBasicBlock().hasLocationInfo(filepath, startline, startcolumn, _, _) + this.getBasicBlock().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } } @@ -296,9 +294,7 @@ class SsaPhiNode extends SsaPseudoDefinition, TPhi { override predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - endline = startline and - endcolumn = startcolumn and - this.getBasicBlock().hasLocationInfo(filepath, startline, startcolumn, _, _) + this.getBasicBlock().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } } diff --git a/go/ql/test/extractor-tests/go1.17/CFG.expected b/go/ql/test/extractor-tests/go1.17/CFG.expected index a918d87337c8..55c46adec789 100644 --- a/go/ql/test/extractor-tests/go1.17/CFG.expected +++ b/go/ql/test/extractor-tests/go1.17/CFG.expected @@ -2,13 +2,13 @@ nodes edges | conversions.go:0:0:0:0 | entry | conversions.go:3:1:3:15 | skip | | conversions.go:3:1:3:15 | skip | conversions.go:5:6:5:8 | skip | -| conversions.go:5:1:5:1 | entry | conversions.go:5:10:5:10 | argument corresponding to _ | +| conversions.go:5:1:5:29 | entry | conversions.go:5:10:5:10 | argument corresponding to _ | | conversions.go:5:1:5:29 | function declaration | conversions.go:7:6:7:9 | skip | | conversions.go:5:6:5:8 | skip | conversions.go:5:1:5:29 | function declaration | | conversions.go:5:10:5:10 | argument corresponding to _ | conversions.go:5:10:5:10 | initialization of _ | | conversions.go:5:10:5:10 | initialization of _ | conversions.go:5:28:5:29 | skip | -| conversions.go:5:28:5:29 | skip | conversions.go:5:29:5:29 | exit | -| conversions.go:7:1:7:1 | entry | conversions.go:8:6:8:6 | skip | +| conversions.go:5:28:5:29 | skip | conversions.go:5:1:5:29 | exit | +| conversions.go:7:1:26:1 | entry | conversions.go:8:6:8:6 | skip | | conversions.go:7:1:26:1 | function declaration | conversions.go:0:0:0:0 | exit | | conversions.go:7:6:7:9 | skip | conversions.go:7:1:26:1 | function declaration | | conversions.go:8:6:8:6 | assignment to a | conversions.go:10:2:10:2 | skip | @@ -21,8 +21,8 @@ edges | conversions.go:10:18:10:18 | a | conversions.go:10:21:10:22 | 10 | | conversions.go:10:21:10:22 | 10 | conversions.go:10:7:10:23 | call to Add | | conversions.go:11:2:11:4 | use | conversions.go:11:6:11:6 | b | +| conversions.go:11:2:11:7 | call to use | conversions.go:7:1:26:1 | exit | | conversions.go:11:2:11:7 | call to use | conversions.go:13:6:13:8 | skip | -| conversions.go:11:2:11:7 | call to use | conversions.go:26:1:26:1 | exit | | conversions.go:11:6:11:6 | b | conversions.go:11:2:11:7 | call to use | | conversions.go:13:6:13:8 | assignment to arr | conversions.go:14:2:14:6 | skip | | conversions.go:13:6:13:8 | skip | conversions.go:13:6:13:8 | zero value for arr | @@ -35,12 +35,12 @@ edges | conversions.go:14:29:14:30 | 20 | conversions.go:14:11:14:31 | call to Slice | | conversions.go:17:2:17:4 | assignment to ptr | conversions.go:18:2:18:4 | use | | conversions.go:17:2:17:4 | skip | conversions.go:17:20:17:24 | slice | +| conversions.go:17:9:17:25 | type conversion | conversions.go:7:1:26:1 | exit | | conversions.go:17:9:17:25 | type conversion | conversions.go:17:2:17:4 | assignment to ptr | -| conversions.go:17:9:17:25 | type conversion | conversions.go:26:1:26:1 | exit | | conversions.go:17:20:17:24 | slice | conversions.go:17:9:17:25 | type conversion | | conversions.go:18:2:18:4 | use | conversions.go:18:6:18:8 | ptr | +| conversions.go:18:2:18:9 | call to use | conversions.go:7:1:26:1 | exit | | conversions.go:18:2:18:9 | call to use | conversions.go:21:2:21:4 | skip | -| conversions.go:18:2:18:9 | call to use | conversions.go:26:1:26:1 | exit | | conversions.go:18:6:18:8 | ptr | conversions.go:18:2:18:9 | call to use | | conversions.go:21:2:21:4 | assignment to str | conversions.go:22:2:22:6 | skip | | conversions.go:21:2:21:4 | skip | conversions.go:21:9:21:18 | "a string" | @@ -50,15 +50,15 @@ edges | conversions.go:22:11:22:21 | type conversion | conversions.go:22:2:22:6 | assignment to bytes | | conversions.go:22:18:22:20 | str | conversions.go:22:11:22:21 | type conversion | | conversions.go:23:2:23:4 | use | conversions.go:23:6:23:10 | bytes | +| conversions.go:23:2:23:11 | call to use | conversions.go:7:1:26:1 | exit | | conversions.go:23:2:23:11 | call to use | conversions.go:24:2:24:6 | skip | -| conversions.go:23:2:23:11 | call to use | conversions.go:26:1:26:1 | exit | | conversions.go:23:6:23:10 | bytes | conversions.go:23:2:23:11 | call to use | | conversions.go:24:2:24:6 | assignment to runes | conversions.go:25:2:25:4 | use | | conversions.go:24:2:24:6 | skip | conversions.go:24:18:24:20 | str | | conversions.go:24:11:24:21 | type conversion | conversions.go:24:2:24:6 | assignment to runes | | conversions.go:24:18:24:20 | str | conversions.go:24:11:24:21 | type conversion | | conversions.go:25:2:25:4 | use | conversions.go:25:6:25:10 | runes | -| conversions.go:25:2:25:11 | call to use | conversions.go:26:1:26:1 | exit | +| conversions.go:25:2:25:11 | call to use | conversions.go:7:1:26:1 | exit | | conversions.go:25:6:25:10 | runes | conversions.go:25:2:25:11 | call to use | #select | | diff --git a/go/ql/test/library-tests/semmle/go/controlflow/ControlFlowGraph/ControlFlowNode_getASuccessor.expected b/go/ql/test/library-tests/semmle/go/controlflow/ControlFlowGraph/ControlFlowNode_getASuccessor.expected index e3be0409d713..f3d27b4bf388 100644 --- a/go/ql/test/library-tests/semmle/go/controlflow/ControlFlowGraph/ControlFlowNode_getASuccessor.expected +++ b/go/ql/test/library-tests/semmle/go/controlflow/ControlFlowGraph/ControlFlowNode_getASuccessor.expected @@ -1,43 +1,43 @@ | DuplicateSwitchCase.go:0:0:0:0 | entry | DuplicateSwitchCase.go:3:6:3:15 | skip | -| DuplicateSwitchCase.go:3:1:3:1 | entry | DuplicateSwitchCase.go:3:17:3:19 | argument corresponding to msg | +| DuplicateSwitchCase.go:3:1:12:1 | entry | DuplicateSwitchCase.go:3:17:3:19 | argument corresponding to msg | | DuplicateSwitchCase.go:3:1:12:1 | function declaration | DuplicateSwitchCase.go:14:6:14:10 | skip | | DuplicateSwitchCase.go:3:6:3:15 | skip | DuplicateSwitchCase.go:3:1:12:1 | function declaration | | DuplicateSwitchCase.go:3:17:3:19 | argument corresponding to msg | DuplicateSwitchCase.go:3:17:3:19 | initialization of msg | -| DuplicateSwitchCase.go:3:17:3:19 | initialization of msg | DuplicateSwitchCase.go:4:2:4:2 | true | -| DuplicateSwitchCase.go:4:2:4:2 | true | DuplicateSwitchCase.go:5:7:5:9 | msg | +| DuplicateSwitchCase.go:3:17:3:19 | initialization of msg | DuplicateSwitchCase.go:4:2:11:2 | true | +| DuplicateSwitchCase.go:4:2:11:2 | true | DuplicateSwitchCase.go:5:7:5:9 | msg | | DuplicateSwitchCase.go:5:7:5:9 | msg | DuplicateSwitchCase.go:5:14:5:20 | "start" | | DuplicateSwitchCase.go:5:7:5:20 | ...==... | DuplicateSwitchCase.go:5:7:5:20 | case ...==... | -| DuplicateSwitchCase.go:5:7:5:20 | case ...==... | DuplicateSwitchCase.go:5:20:5:20 | ...==... is false | -| DuplicateSwitchCase.go:5:7:5:20 | case ...==... | DuplicateSwitchCase.go:5:20:5:20 | ...==... is true | +| DuplicateSwitchCase.go:5:7:5:20 | ...==... is false | DuplicateSwitchCase.go:7:7:7:9 | msg | +| DuplicateSwitchCase.go:5:7:5:20 | ...==... is true | DuplicateSwitchCase.go:6:3:6:7 | start | +| DuplicateSwitchCase.go:5:7:5:20 | case ...==... | DuplicateSwitchCase.go:5:7:5:20 | ...==... is false | +| DuplicateSwitchCase.go:5:7:5:20 | case ...==... | DuplicateSwitchCase.go:5:7:5:20 | ...==... is true | | DuplicateSwitchCase.go:5:14:5:20 | "start" | DuplicateSwitchCase.go:5:7:5:20 | ...==... | -| DuplicateSwitchCase.go:5:20:5:20 | ...==... is false | DuplicateSwitchCase.go:7:7:7:9 | msg | -| DuplicateSwitchCase.go:5:20:5:20 | ...==... is true | DuplicateSwitchCase.go:6:3:6:7 | start | | DuplicateSwitchCase.go:6:3:6:7 | start | DuplicateSwitchCase.go:6:3:6:9 | call to start | -| DuplicateSwitchCase.go:6:3:6:9 | call to start | DuplicateSwitchCase.go:12:1:12:1 | exit | +| DuplicateSwitchCase.go:6:3:6:9 | call to start | DuplicateSwitchCase.go:3:1:12:1 | exit | | DuplicateSwitchCase.go:7:7:7:9 | msg | DuplicateSwitchCase.go:7:14:7:20 | "start" | | DuplicateSwitchCase.go:7:7:7:20 | ...==... | DuplicateSwitchCase.go:7:7:7:20 | case ...==... | -| DuplicateSwitchCase.go:7:7:7:20 | case ...==... | DuplicateSwitchCase.go:7:20:7:20 | ...==... is false | -| DuplicateSwitchCase.go:7:7:7:20 | case ...==... | DuplicateSwitchCase.go:7:20:7:20 | ...==... is true | +| DuplicateSwitchCase.go:7:7:7:20 | ...==... is false | DuplicateSwitchCase.go:10:3:10:7 | panic | +| DuplicateSwitchCase.go:7:7:7:20 | ...==... is true | DuplicateSwitchCase.go:8:3:8:6 | stop | +| DuplicateSwitchCase.go:7:7:7:20 | case ...==... | DuplicateSwitchCase.go:7:7:7:20 | ...==... is false | +| DuplicateSwitchCase.go:7:7:7:20 | case ...==... | DuplicateSwitchCase.go:7:7:7:20 | ...==... is true | | DuplicateSwitchCase.go:7:14:7:20 | "start" | DuplicateSwitchCase.go:7:7:7:20 | ...==... | -| DuplicateSwitchCase.go:7:20:7:20 | ...==... is false | DuplicateSwitchCase.go:10:3:10:7 | panic | -| DuplicateSwitchCase.go:7:20:7:20 | ...==... is true | DuplicateSwitchCase.go:8:3:8:6 | stop | | DuplicateSwitchCase.go:8:3:8:6 | stop | DuplicateSwitchCase.go:8:3:8:8 | call to stop | -| DuplicateSwitchCase.go:8:3:8:8 | call to stop | DuplicateSwitchCase.go:12:1:12:1 | exit | +| DuplicateSwitchCase.go:8:3:8:8 | call to stop | DuplicateSwitchCase.go:3:1:12:1 | exit | | DuplicateSwitchCase.go:10:3:10:7 | panic | DuplicateSwitchCase.go:10:9:10:33 | "Message not understood." | -| DuplicateSwitchCase.go:10:3:10:34 | call to panic | DuplicateSwitchCase.go:12:1:12:1 | exit | +| DuplicateSwitchCase.go:10:3:10:34 | call to panic | DuplicateSwitchCase.go:3:1:12:1 | exit | | DuplicateSwitchCase.go:10:9:10:33 | "Message not understood." | DuplicateSwitchCase.go:10:3:10:34 | call to panic | -| DuplicateSwitchCase.go:14:1:14:1 | entry | DuplicateSwitchCase.go:14:14:14:15 | skip | +| DuplicateSwitchCase.go:14:1:14:15 | entry | DuplicateSwitchCase.go:14:14:14:15 | skip | | DuplicateSwitchCase.go:14:1:14:15 | function declaration | DuplicateSwitchCase.go:16:6:16:9 | skip | | DuplicateSwitchCase.go:14:6:14:10 | skip | DuplicateSwitchCase.go:14:1:14:15 | function declaration | -| DuplicateSwitchCase.go:14:14:14:15 | skip | DuplicateSwitchCase.go:14:15:14:15 | exit | -| DuplicateSwitchCase.go:16:1:16:1 | entry | DuplicateSwitchCase.go:16:13:16:14 | skip | +| DuplicateSwitchCase.go:14:14:14:15 | skip | DuplicateSwitchCase.go:14:1:14:15 | exit | +| DuplicateSwitchCase.go:16:1:16:14 | entry | DuplicateSwitchCase.go:16:13:16:14 | skip | | DuplicateSwitchCase.go:16:1:16:14 | function declaration | DuplicateSwitchCase.go:0:0:0:0 | exit | | DuplicateSwitchCase.go:16:6:16:9 | skip | DuplicateSwitchCase.go:16:1:16:14 | function declaration | -| DuplicateSwitchCase.go:16:13:16:14 | skip | DuplicateSwitchCase.go:16:14:16:14 | exit | +| DuplicateSwitchCase.go:16:13:16:14 | skip | DuplicateSwitchCase.go:16:1:16:14 | exit | | equalitytests.go:0:0:0:0 | entry | equalitytests.go:3:1:5:1 | skip | | equalitytests.go:3:1:5:1 | skip | equalitytests.go:7:1:9:1 | skip | | equalitytests.go:7:1:9:1 | skip | equalitytests.go:11:6:11:18 | skip | -| equalitytests.go:11:1:11:1 | entry | equalitytests.go:11:20:11:21 | argument corresponding to i1 | +| equalitytests.go:11:1:13:1 | entry | equalitytests.go:11:20:11:21 | argument corresponding to i1 | | equalitytests.go:11:1:13:1 | function declaration | equalitytests.go:0:0:0:0 | exit | | equalitytests.go:11:6:11:18 | skip | equalitytests.go:11:1:13:1 | function declaration | | equalitytests.go:11:20:11:21 | argument corresponding to i1 | equalitytests.go:11:20:11:21 | initialization of i1 | @@ -64,49 +64,49 @@ | equalitytests.go:11:184:11:185 | initialization of a3 | equalitytests.go:11:195:11:196 | argument corresponding to a4 | | equalitytests.go:11:195:11:196 | argument corresponding to a4 | equalitytests.go:11:195:11:196 | initialization of a4 | | equalitytests.go:11:195:11:196 | initialization of a4 | equalitytests.go:12:9:12:10 | i1 | -| equalitytests.go:12:2:12:76 | return statement | equalitytests.go:13:1:13:1 | exit | +| equalitytests.go:12:2:12:76 | return statement | equalitytests.go:11:1:13:1 | exit | | equalitytests.go:12:9:12:10 | i1 | equalitytests.go:12:15:12:16 | i2 | -| equalitytests.go:12:9:12:16 | ...==... | equalitytests.go:12:16:12:16 | ...==... is false | -| equalitytests.go:12:9:12:16 | ...==... | equalitytests.go:12:16:12:16 | ...==... is true | +| equalitytests.go:12:9:12:16 | ...==... | equalitytests.go:12:9:12:16 | ...==... is false | +| equalitytests.go:12:9:12:16 | ...==... | equalitytests.go:12:9:12:16 | ...==... is true | +| equalitytests.go:12:9:12:16 | ...==... is false | equalitytests.go:12:9:12:28 | ...&&... is false | +| equalitytests.go:12:9:12:16 | ...==... is true | equalitytests.go:12:21:12:22 | e1 | +| equalitytests.go:12:9:12:28 | ...&&... is false | equalitytests.go:12:9:12:40 | ...&&... is false | +| equalitytests.go:12:9:12:28 | ...&&... is true | equalitytests.go:12:33:12:34 | s1 | +| equalitytests.go:12:9:12:40 | ...&&... is false | equalitytests.go:12:9:12:52 | ...&&... is false | +| equalitytests.go:12:9:12:40 | ...&&... is true | equalitytests.go:12:45:12:46 | s3 | +| equalitytests.go:12:9:12:52 | ...&&... is false | equalitytests.go:12:9:12:64 | ...&&... is false | +| equalitytests.go:12:9:12:52 | ...&&... is true | equalitytests.go:12:57:12:58 | a1 | +| equalitytests.go:12:9:12:64 | ...&&... is false | equalitytests.go:12:9:12:76 | ...&&... | +| equalitytests.go:12:9:12:64 | ...&&... is true | equalitytests.go:12:69:12:70 | a3 | | equalitytests.go:12:9:12:76 | ...&&... | equalitytests.go:12:2:12:76 | return statement | | equalitytests.go:12:15:12:16 | i2 | equalitytests.go:12:9:12:16 | ...==... | -| equalitytests.go:12:16:12:16 | ...==... is false | equalitytests.go:12:28:12:28 | ...&&... is false | -| equalitytests.go:12:16:12:16 | ...==... is true | equalitytests.go:12:21:12:22 | e1 | | equalitytests.go:12:21:12:22 | e1 | equalitytests.go:12:27:12:28 | e2 | -| equalitytests.go:12:21:12:28 | ...==... | equalitytests.go:12:28:12:28 | ...&&... is false | -| equalitytests.go:12:21:12:28 | ...==... | equalitytests.go:12:28:12:28 | ...&&... is true | -| equalitytests.go:12:21:12:28 | ...==... | equalitytests.go:13:1:13:1 | exit | +| equalitytests.go:12:21:12:28 | ...==... | equalitytests.go:11:1:13:1 | exit | +| equalitytests.go:12:21:12:28 | ...==... | equalitytests.go:12:9:12:28 | ...&&... is false | +| equalitytests.go:12:21:12:28 | ...==... | equalitytests.go:12:9:12:28 | ...&&... is true | | equalitytests.go:12:27:12:28 | e2 | equalitytests.go:12:21:12:28 | ...==... | -| equalitytests.go:12:28:12:28 | ...&&... is false | equalitytests.go:12:40:12:40 | ...&&... is false | -| equalitytests.go:12:28:12:28 | ...&&... is true | equalitytests.go:12:33:12:34 | s1 | | equalitytests.go:12:33:12:34 | s1 | equalitytests.go:12:39:12:40 | s2 | -| equalitytests.go:12:33:12:40 | ...==... | equalitytests.go:12:40:12:40 | ...&&... is false | -| equalitytests.go:12:33:12:40 | ...==... | equalitytests.go:12:40:12:40 | ...&&... is true | -| equalitytests.go:12:33:12:40 | ...==... | equalitytests.go:13:1:13:1 | exit | +| equalitytests.go:12:33:12:40 | ...==... | equalitytests.go:11:1:13:1 | exit | +| equalitytests.go:12:33:12:40 | ...==... | equalitytests.go:12:9:12:40 | ...&&... is false | +| equalitytests.go:12:33:12:40 | ...==... | equalitytests.go:12:9:12:40 | ...&&... is true | | equalitytests.go:12:39:12:40 | s2 | equalitytests.go:12:33:12:40 | ...==... | -| equalitytests.go:12:40:12:40 | ...&&... is false | equalitytests.go:12:52:12:52 | ...&&... is false | -| equalitytests.go:12:40:12:40 | ...&&... is true | equalitytests.go:12:45:12:46 | s3 | | equalitytests.go:12:45:12:46 | s3 | equalitytests.go:12:51:12:52 | s4 | -| equalitytests.go:12:45:12:52 | ...==... | equalitytests.go:12:52:12:52 | ...&&... is false | -| equalitytests.go:12:45:12:52 | ...==... | equalitytests.go:12:52:12:52 | ...&&... is true | -| equalitytests.go:12:45:12:52 | ...==... | equalitytests.go:13:1:13:1 | exit | +| equalitytests.go:12:45:12:52 | ...==... | equalitytests.go:11:1:13:1 | exit | +| equalitytests.go:12:45:12:52 | ...==... | equalitytests.go:12:9:12:52 | ...&&... is false | +| equalitytests.go:12:45:12:52 | ...==... | equalitytests.go:12:9:12:52 | ...&&... is true | | equalitytests.go:12:51:12:52 | s4 | equalitytests.go:12:45:12:52 | ...==... | -| equalitytests.go:12:52:12:52 | ...&&... is false | equalitytests.go:12:64:12:64 | ...&&... is false | -| equalitytests.go:12:52:12:52 | ...&&... is true | equalitytests.go:12:57:12:58 | a1 | | equalitytests.go:12:57:12:58 | a1 | equalitytests.go:12:63:12:64 | a2 | -| equalitytests.go:12:57:12:64 | ...==... | equalitytests.go:12:64:12:64 | ...&&... is false | -| equalitytests.go:12:57:12:64 | ...==... | equalitytests.go:12:64:12:64 | ...&&... is true | -| equalitytests.go:12:57:12:64 | ...==... | equalitytests.go:13:1:13:1 | exit | +| equalitytests.go:12:57:12:64 | ...==... | equalitytests.go:11:1:13:1 | exit | +| equalitytests.go:12:57:12:64 | ...==... | equalitytests.go:12:9:12:64 | ...&&... is false | +| equalitytests.go:12:57:12:64 | ...==... | equalitytests.go:12:9:12:64 | ...&&... is true | | equalitytests.go:12:63:12:64 | a2 | equalitytests.go:12:57:12:64 | ...==... | -| equalitytests.go:12:64:12:64 | ...&&... is false | equalitytests.go:12:9:12:76 | ...&&... | -| equalitytests.go:12:64:12:64 | ...&&... is true | equalitytests.go:12:69:12:70 | a3 | | equalitytests.go:12:69:12:70 | a3 | equalitytests.go:12:75:12:76 | a4 | +| equalitytests.go:12:69:12:76 | ...==... | equalitytests.go:11:1:13:1 | exit | | equalitytests.go:12:69:12:76 | ...==... | equalitytests.go:12:9:12:76 | ...&&... | -| equalitytests.go:12:69:12:76 | ...==... | equalitytests.go:13:1:13:1 | exit | | equalitytests.go:12:75:12:76 | a4 | equalitytests.go:12:69:12:76 | ...==... | | exprs.go:0:0:0:0 | entry | exprs.go:3:1:3:29 | skip | | exprs.go:3:1:3:29 | skip | exprs.go:5:6:5:9 | skip | -| exprs.go:5:1:5:1 | entry | exprs.go:6:6:6:6 | skip | +| exprs.go:5:1:26:1 | entry | exprs.go:6:6:6:6 | skip | | exprs.go:5:1:26:1 | function declaration | exprs.go:28:6:28:10 | skip | | exprs.go:5:6:5:9 | skip | exprs.go:5:1:26:1 | function declaration | | exprs.go:6:6:6:6 | assignment to i | exprs.go:6:9:6:9 | assignment to j | @@ -130,7 +130,7 @@ | exprs.go:8:23:8:23 | k | exprs.go:8:16:8:24 | type conversion | | exprs.go:9:2:9:3 | assignment to fn | exprs.go:10:2:10:8 | skip | | exprs.go:9:2:9:3 | skip | exprs.go:9:8:9:61 | function literal | -| exprs.go:9:8:9:8 | entry | exprs.go:9:13:9:13 | argument corresponding to a | +| exprs.go:9:8:9:61 | entry | exprs.go:9:13:9:13 | argument corresponding to a | | exprs.go:9:8:9:61 | function literal | exprs.go:9:2:9:3 | assignment to fn | | exprs.go:9:13:9:13 | argument corresponding to a | exprs.go:9:13:9:13 | initialization of a | | exprs.go:9:13:9:13 | initialization of a | exprs.go:9:16:9:16 | argument corresponding to b | @@ -138,7 +138,7 @@ | exprs.go:9:16:9:16 | initialization of b | exprs.go:9:23:9:23 | argument corresponding to z | | exprs.go:9:23:9:23 | argument corresponding to z | exprs.go:9:23:9:23 | initialization of z | | exprs.go:9:23:9:23 | initialization of z | exprs.go:9:48:9:48 | a | -| exprs.go:9:41:9:59 | return statement | exprs.go:9:61:9:61 | exit | +| exprs.go:9:41:9:59 | return statement | exprs.go:9:8:9:61 | exit | | exprs.go:9:48:9:48 | a | exprs.go:9:50:9:50 | b | | exprs.go:9:48:9:50 | ...*... | exprs.go:9:58:9:58 | z | | exprs.go:9:48:9:59 | ...<... | exprs.go:9:41:9:59 | return statement | @@ -154,8 +154,8 @@ | exprs.go:14:4:14:4 | init of k | exprs.go:14:7:14:8 | fn | | exprs.go:14:4:14:4 | k | exprs.go:14:4:14:4 | init of k | | exprs.go:14:7:14:8 | fn | exprs.go:14:10:14:10 | i | +| exprs.go:14:7:14:20 | call to fn | exprs.go:5:1:26:1 | exit | | exprs.go:14:7:14:20 | call to fn | exprs.go:14:7:14:20 | init of call to fn | -| exprs.go:14:7:14:20 | call to fn | exprs.go:26:1:26:1 | exit | | exprs.go:14:7:14:20 | init of call to fn | exprs.go:11:2:11:8 | assignment to struct2 | | exprs.go:14:10:14:10 | i | exprs.go:14:13:14:13 | j | | exprs.go:14:13:14:13 | j | exprs.go:14:16:14:19 | .../... | @@ -171,23 +171,23 @@ | exprs.go:15:49:15:57 | selection of x | exprs.go:15:46:15:57 | init of key-value pair | | exprs.go:16:2:16:5 | assignment to arr1 | exprs.go:17:2:17:5 | skip | | exprs.go:16:2:16:5 | skip | exprs.go:16:10:16:26 | array literal | -| exprs.go:16:10:16:26 | array literal | exprs.go:16:17:16:17 | element index | -| exprs.go:16:17:16:17 | element index | exprs.go:16:17:16:23 | struct3 | +| exprs.go:16:10:16:26 | array literal | exprs.go:16:17:16:25 | element index | | exprs.go:16:17:16:23 | struct3 | exprs.go:16:17:16:25 | selection of x | +| exprs.go:16:17:16:25 | element index | exprs.go:16:17:16:23 | struct3 | | exprs.go:16:17:16:25 | init of selection of x | exprs.go:16:2:16:5 | assignment to arr1 | | exprs.go:16:17:16:25 | selection of x | exprs.go:16:17:16:25 | init of selection of x | | exprs.go:17:2:17:5 | assignment to arr2 | exprs.go:18:2:18:4 | skip | | exprs.go:17:2:17:5 | skip | exprs.go:17:10:17:40 | array literal | -| exprs.go:17:10:17:40 | array literal | exprs.go:17:19:17:19 | element index | -| exprs.go:17:19:17:19 | element index | exprs.go:17:19:17:25 | struct3 | +| exprs.go:17:10:17:40 | array literal | exprs.go:17:19:17:27 | element index | | exprs.go:17:19:17:25 | struct3 | exprs.go:17:19:17:27 | selection of x | +| exprs.go:17:19:17:27 | element index | exprs.go:17:19:17:25 | struct3 | | exprs.go:17:19:17:27 | init of selection of x | exprs.go:17:30:17:30 | 2 | | exprs.go:17:19:17:27 | selection of x | exprs.go:17:19:17:27 | init of selection of x | | exprs.go:17:30:17:30 | 2 | exprs.go:17:33:17:36 | arr1 | | exprs.go:17:30:17:39 | init of key-value pair | exprs.go:17:2:17:5 | assignment to arr2 | | exprs.go:17:33:17:36 | arr1 | exprs.go:17:38:17:38 | 0 | +| exprs.go:17:33:17:39 | index expression | exprs.go:5:1:26:1 | exit | | exprs.go:17:33:17:39 | index expression | exprs.go:17:30:17:39 | init of key-value pair | -| exprs.go:17:33:17:39 | index expression | exprs.go:26:1:26:1 | exit | | exprs.go:17:38:17:38 | 0 | exprs.go:17:33:17:39 | index expression | | exprs.go:18:2:18:4 | assignment to slc | exprs.go:19:2:19:3 | skip | | exprs.go:18:2:18:4 | skip | exprs.go:18:9:18:22 | slice literal | @@ -202,19 +202,19 @@ | exprs.go:19:2:19:3 | skip | exprs.go:19:8:19:38 | map literal | | exprs.go:19:8:19:38 | map literal | exprs.go:19:23:19:25 | slc | | exprs.go:19:23:19:25 | slc | exprs.go:19:27:19:27 | 0 | +| exprs.go:19:23:19:28 | index expression | exprs.go:5:1:26:1 | exit | | exprs.go:19:23:19:28 | index expression | exprs.go:19:31:19:34 | arr2 | -| exprs.go:19:23:19:28 | index expression | exprs.go:26:1:26:1 | exit | | exprs.go:19:23:19:37 | init of key-value pair | exprs.go:19:2:19:3 | assignment to mp | | exprs.go:19:27:19:27 | 0 | exprs.go:19:23:19:28 | index expression | | exprs.go:19:31:19:34 | arr2 | exprs.go:19:36:19:36 | 1 | +| exprs.go:19:31:19:37 | index expression | exprs.go:5:1:26:1 | exit | | exprs.go:19:31:19:37 | index expression | exprs.go:19:23:19:37 | init of key-value pair | -| exprs.go:19:31:19:37 | index expression | exprs.go:26:1:26:1 | exit | | exprs.go:19:36:19:36 | 1 | exprs.go:19:31:19:37 | index expression | | exprs.go:20:2:20:5 | assignment to slc2 | exprs.go:21:2:21:5 | skip | | exprs.go:20:2:20:5 | skip | exprs.go:20:10:20:12 | slc | | exprs.go:20:10:20:12 | slc | exprs.go:20:14:20:14 | 1 | +| exprs.go:20:10:20:19 | slice expression | exprs.go:5:1:26:1 | exit | | exprs.go:20:10:20:19 | slice expression | exprs.go:20:2:20:5 | assignment to slc2 | -| exprs.go:20:10:20:19 | slice expression | exprs.go:26:1:26:1 | exit | | exprs.go:20:14:20:14 | 1 | exprs.go:20:16:20:16 | 2 | | exprs.go:20:16:20:16 | 2 | exprs.go:20:18:20:18 | 3 | | exprs.go:20:18:20:18 | 3 | exprs.go:20:10:20:19 | slice expression | @@ -222,16 +222,16 @@ | exprs.go:21:2:21:5 | skip | exprs.go:21:10:21:13 | slc2 | | exprs.go:21:10:21:13 | slc2 | exprs.go:21:10:21:19 | 0 | | exprs.go:21:10:21:19 | 0 | exprs.go:21:16:21:16 | 2 | +| exprs.go:21:10:21:19 | slice expression | exprs.go:5:1:26:1 | exit | | exprs.go:21:10:21:19 | slice expression | exprs.go:21:2:21:5 | assignment to slc3 | -| exprs.go:21:10:21:19 | slice expression | exprs.go:26:1:26:1 | exit | | exprs.go:21:16:21:16 | 2 | exprs.go:21:18:21:18 | 3 | | exprs.go:21:18:21:18 | 3 | exprs.go:21:10:21:19 | slice expression | | exprs.go:22:2:22:5 | assignment to slc4 | exprs.go:23:2:23:5 | skip | | exprs.go:22:2:22:5 | skip | exprs.go:22:10:22:13 | slc3 | | exprs.go:22:10:22:13 | slc3 | exprs.go:22:15:22:15 | 0 | | exprs.go:22:10:22:18 | cap | exprs.go:22:10:22:18 | slice expression | +| exprs.go:22:10:22:18 | slice expression | exprs.go:5:1:26:1 | exit | | exprs.go:22:10:22:18 | slice expression | exprs.go:22:2:22:5 | assignment to slc4 | -| exprs.go:22:10:22:18 | slice expression | exprs.go:26:1:26:1 | exit | | exprs.go:22:15:22:15 | 0 | exprs.go:22:17:22:17 | 2 | | exprs.go:22:17:22:17 | 2 | exprs.go:22:10:22:18 | cap | | exprs.go:23:2:23:5 | assignment to slc5 | exprs.go:24:2:24:5 | skip | @@ -239,42 +239,42 @@ | exprs.go:23:10:23:13 | slc4 | exprs.go:23:15:23:15 | 0 | | exprs.go:23:10:23:17 | cap | exprs.go:23:10:23:17 | slice expression | | exprs.go:23:10:23:17 | len | exprs.go:23:10:23:17 | cap | +| exprs.go:23:10:23:17 | slice expression | exprs.go:5:1:26:1 | exit | | exprs.go:23:10:23:17 | slice expression | exprs.go:23:2:23:5 | assignment to slc5 | -| exprs.go:23:10:23:17 | slice expression | exprs.go:26:1:26:1 | exit | | exprs.go:23:15:23:15 | 0 | exprs.go:23:10:23:17 | len | | exprs.go:24:2:24:5 | assignment to slc6 | exprs.go:25:9:25:34 | struct literal | | exprs.go:24:2:24:5 | skip | exprs.go:24:10:24:13 | slc5 | | exprs.go:24:10:24:13 | slc5 | exprs.go:24:10:24:17 | 0 | | exprs.go:24:10:24:17 | 0 | exprs.go:24:16:24:16 | 2 | | exprs.go:24:10:24:17 | cap | exprs.go:24:10:24:17 | slice expression | +| exprs.go:24:10:24:17 | slice expression | exprs.go:5:1:26:1 | exit | | exprs.go:24:10:24:17 | slice expression | exprs.go:24:2:24:5 | assignment to slc6 | -| exprs.go:24:10:24:17 | slice expression | exprs.go:26:1:26:1 | exit | | exprs.go:24:16:24:16 | 2 | exprs.go:24:10:24:17 | cap | -| exprs.go:25:2:25:34 | return statement | exprs.go:26:1:26:1 | exit | +| exprs.go:25:2:25:34 | return statement | exprs.go:5:1:26:1 | exit | | exprs.go:25:9:25:34 | struct literal | exprs.go:25:15:25:16 | mp | | exprs.go:25:15:25:16 | mp | exprs.go:25:18:25:18 | s | +| exprs.go:25:15:25:19 | index expression | exprs.go:5:1:26:1 | exit | | exprs.go:25:15:25:19 | index expression | exprs.go:25:15:25:19 | init of index expression | -| exprs.go:25:15:25:19 | index expression | exprs.go:26:1:26:1 | exit | | exprs.go:25:15:25:19 | init of index expression | exprs.go:25:22:25:24 | len | | exprs.go:25:18:25:18 | s | exprs.go:25:15:25:19 | index expression | | exprs.go:25:22:25:24 | len | exprs.go:25:26:25:29 | slc6 | | exprs.go:25:22:25:33 | call to len | exprs.go:25:22:25:33 | init of call to len | | exprs.go:25:22:25:33 | init of call to len | exprs.go:25:2:25:34 | return statement | | exprs.go:25:26:25:29 | slc6 | exprs.go:25:31:25:31 | 0 | +| exprs.go:25:26:25:32 | index expression | exprs.go:5:1:26:1 | exit | | exprs.go:25:26:25:32 | index expression | exprs.go:25:22:25:33 | call to len | -| exprs.go:25:26:25:32 | index expression | exprs.go:26:1:26:1 | exit | | exprs.go:25:31:25:31 | 0 | exprs.go:25:26:25:32 | index expression | -| exprs.go:28:1:28:1 | entry | exprs.go:28:12:28:14 | argument corresponding to arg | +| exprs.go:28:1:30:1 | entry | exprs.go:28:12:28:14 | argument corresponding to arg | | exprs.go:28:1:30:1 | function declaration | exprs.go:32:6:32:10 | skip | | exprs.go:28:6:28:10 | skip | exprs.go:28:1:30:1 | function declaration | | exprs.go:28:12:28:14 | argument corresponding to arg | exprs.go:28:12:28:14 | initialization of arg | | exprs.go:28:12:28:14 | initialization of arg | exprs.go:29:9:29:11 | arg | -| exprs.go:29:2:29:21 | return statement | exprs.go:30:1:30:1 | exit | +| exprs.go:29:2:29:21 | return statement | exprs.go:28:1:30:1 | exit | | exprs.go:29:9:29:11 | arg | exprs.go:29:9:29:19 | type assertion | +| exprs.go:29:9:29:19 | type assertion | exprs.go:28:1:30:1 | exit | | exprs.go:29:9:29:19 | type assertion | exprs.go:29:9:29:21 | selection of x | -| exprs.go:29:9:29:19 | type assertion | exprs.go:30:1:30:1 | exit | | exprs.go:29:9:29:21 | selection of x | exprs.go:29:2:29:21 | return statement | -| exprs.go:32:1:32:1 | entry | exprs.go:32:12:32:14 | argument corresponding to arg | +| exprs.go:32:1:37:1 | entry | exprs.go:32:12:32:14 | argument corresponding to arg | | exprs.go:32:1:37:1 | function declaration | exprs.go:39:6:39:10 | skip | | exprs.go:32:6:32:10 | skip | exprs.go:32:1:37:1 | function declaration | | exprs.go:32:12:32:14 | argument corresponding to arg | exprs.go:32:12:32:14 | initialization of arg | @@ -287,16 +287,16 @@ | exprs.go:33:8:33:9 | skip | exprs.go:33:14:33:16 | arg | | exprs.go:33:14:33:16 | arg | exprs.go:33:14:33:24 | type assertion | | exprs.go:33:14:33:24 | type assertion | exprs.go:33:5:33:24 | ... := ...[0] | -| exprs.go:33:27:33:28 | ok | exprs.go:33:28:33:28 | ok is false | -| exprs.go:33:27:33:28 | ok | exprs.go:33:28:33:28 | ok is true | -| exprs.go:33:28:33:28 | ok is false | exprs.go:36:9:36:10 | -... | -| exprs.go:33:28:33:28 | ok is true | exprs.go:34:10:34:10 | p | -| exprs.go:34:3:34:12 | return statement | exprs.go:37:1:37:1 | exit | +| exprs.go:33:27:33:28 | ok | exprs.go:33:27:33:28 | ok is false | +| exprs.go:33:27:33:28 | ok | exprs.go:33:27:33:28 | ok is true | +| exprs.go:33:27:33:28 | ok is false | exprs.go:36:9:36:10 | -... | +| exprs.go:33:27:33:28 | ok is true | exprs.go:34:10:34:10 | p | +| exprs.go:34:3:34:12 | return statement | exprs.go:32:1:37:1 | exit | | exprs.go:34:10:34:10 | p | exprs.go:34:10:34:12 | selection of x | | exprs.go:34:10:34:12 | selection of x | exprs.go:34:3:34:12 | return statement | -| exprs.go:36:2:36:10 | return statement | exprs.go:37:1:37:1 | exit | +| exprs.go:36:2:36:10 | return statement | exprs.go:32:1:37:1 | exit | | exprs.go:36:9:36:10 | -... | exprs.go:36:2:36:10 | return statement | -| exprs.go:39:1:39:1 | entry | exprs.go:39:12:39:14 | argument corresponding to arg | +| exprs.go:39:1:47:1 | entry | exprs.go:39:12:39:14 | argument corresponding to arg | | exprs.go:39:1:47:1 | function declaration | exprs.go:49:6:49:8 | skip | | exprs.go:39:6:39:10 | skip | exprs.go:39:1:47:1 | function declaration | | exprs.go:39:12:39:14 | argument corresponding to arg | exprs.go:39:12:39:14 | initialization of arg | @@ -315,34 +315,34 @@ | exprs.go:42:5:42:6 | skip | exprs.go:42:10:42:12 | arg | | exprs.go:42:10:42:12 | arg | exprs.go:42:10:42:20 | type assertion | | exprs.go:42:10:42:20 | type assertion | exprs.go:42:2:42:20 | ... = ...[0] | -| exprs.go:43:5:43:6 | ok | exprs.go:43:6:43:6 | ok is false | -| exprs.go:43:5:43:6 | ok | exprs.go:43:6:43:6 | ok is true | -| exprs.go:43:6:43:6 | ok is false | exprs.go:46:9:46:10 | -... | -| exprs.go:43:6:43:6 | ok is true | exprs.go:44:10:44:10 | p | -| exprs.go:44:3:44:12 | return statement | exprs.go:47:1:47:1 | exit | +| exprs.go:43:5:43:6 | ok | exprs.go:43:5:43:6 | ok is false | +| exprs.go:43:5:43:6 | ok | exprs.go:43:5:43:6 | ok is true | +| exprs.go:43:5:43:6 | ok is false | exprs.go:46:9:46:10 | -... | +| exprs.go:43:5:43:6 | ok is true | exprs.go:44:10:44:10 | p | +| exprs.go:44:3:44:12 | return statement | exprs.go:39:1:47:1 | exit | | exprs.go:44:10:44:10 | p | exprs.go:44:10:44:12 | selection of x | | exprs.go:44:10:44:12 | selection of x | exprs.go:44:3:44:12 | return statement | -| exprs.go:46:2:46:10 | return statement | exprs.go:47:1:47:1 | exit | +| exprs.go:46:2:46:10 | return statement | exprs.go:39:1:47:1 | exit | | exprs.go:46:9:46:10 | -... | exprs.go:46:2:46:10 | return statement | -| exprs.go:49:1:49:1 | entry | exprs.go:49:10:49:11 | argument corresponding to xs | +| exprs.go:49:1:54:1 | entry | exprs.go:49:10:49:11 | argument corresponding to xs | | exprs.go:49:1:54:1 | function declaration | exprs.go:56:6:56:9 | skip | | exprs.go:49:6:49:8 | skip | exprs.go:49:1:54:1 | function declaration | | exprs.go:49:10:49:11 | argument corresponding to xs | exprs.go:49:10:49:11 | initialization of xs | | exprs.go:49:10:49:11 | initialization of xs | exprs.go:49:21:49:23 | zero value for res | -| exprs.go:49:21:49:23 | implicit read of res | exprs.go:54:1:54:1 | exit | +| exprs.go:49:21:49:23 | implicit read of res | exprs.go:49:1:54:1 | exit | | exprs.go:49:21:49:23 | initialization of res | exprs.go:50:6:50:6 | skip | | exprs.go:49:21:49:23 | zero value for res | exprs.go:49:21:49:23 | initialization of res | | exprs.go:50:6:50:6 | assignment to i | exprs.go:50:14:50:14 | i | | exprs.go:50:6:50:6 | skip | exprs.go:50:11:50:11 | 0 | | exprs.go:50:11:50:11 | 0 | exprs.go:50:6:50:6 | assignment to i | | exprs.go:50:14:50:14 | i | exprs.go:50:18:50:20 | len | -| exprs.go:50:14:50:24 | ...<... | exprs.go:50:24:50:24 | ...<... is false | -| exprs.go:50:14:50:24 | ...<... | exprs.go:50:24:50:24 | ...<... is true | +| exprs.go:50:14:50:24 | ...<... | exprs.go:50:14:50:24 | ...<... is false | +| exprs.go:50:14:50:24 | ...<... | exprs.go:50:14:50:24 | ...<... is true | +| exprs.go:50:14:50:24 | ...<... is false | exprs.go:53:2:53:7 | return statement | +| exprs.go:50:14:50:24 | ...<... is true | exprs.go:51:3:51:5 | res | | exprs.go:50:18:50:20 | len | exprs.go:50:22:50:23 | xs | | exprs.go:50:18:50:24 | call to len | exprs.go:50:14:50:24 | ...<... | | exprs.go:50:22:50:23 | xs | exprs.go:50:18:50:24 | call to len | -| exprs.go:50:24:50:24 | ...<... is false | exprs.go:53:2:53:7 | return statement | -| exprs.go:50:24:50:24 | ...<... is true | exprs.go:51:3:51:5 | res | | exprs.go:50:27:50:27 | i | exprs.go:50:27:50:29 | 1 | | exprs.go:50:27:50:29 | 1 | exprs.go:50:27:50:29 | rhs of increment statement | | exprs.go:50:27:50:29 | increment statement | exprs.go:50:14:50:14 | i | @@ -351,24 +351,24 @@ | exprs.go:51:3:51:5 | res | exprs.go:51:10:51:11 | xs | | exprs.go:51:3:51:14 | ... += ... | exprs.go:51:3:51:5 | assignment to res | | exprs.go:51:10:51:11 | xs | exprs.go:51:13:51:13 | i | +| exprs.go:51:10:51:14 | index expression | exprs.go:49:1:54:1 | exit | | exprs.go:51:10:51:14 | index expression | exprs.go:51:3:51:14 | ... += ... | -| exprs.go:51:10:51:14 | index expression | exprs.go:54:1:54:1 | exit | | exprs.go:51:13:51:13 | i | exprs.go:51:10:51:14 | index expression | | exprs.go:53:2:53:7 | return statement | exprs.go:49:21:49:23 | implicit read of res | -| exprs.go:56:1:56:1 | entry | exprs.go:56:11:56:12 | argument corresponding to xs | +| exprs.go:56:1:58:1 | entry | exprs.go:56:11:56:12 | argument corresponding to xs | | exprs.go:56:1:58:1 | function declaration | exprs.go:60:6:60:9 | skip | | exprs.go:56:6:56:9 | skip | exprs.go:56:1:58:1 | function declaration | | exprs.go:56:11:56:12 | argument corresponding to xs | exprs.go:56:11:56:12 | initialization of xs | | exprs.go:56:11:56:12 | initialization of xs | exprs.go:57:9:57:11 | sum | -| exprs.go:57:2:57:15 | return statement | exprs.go:58:1:58:1 | exit | +| exprs.go:57:2:57:15 | return statement | exprs.go:56:1:58:1 | exit | | exprs.go:57:9:57:11 | sum | exprs.go:57:13:57:14 | xs | +| exprs.go:57:9:57:15 | call to sum | exprs.go:56:1:58:1 | exit | | exprs.go:57:9:57:15 | call to sum | exprs.go:57:2:57:15 | return statement | -| exprs.go:57:9:57:15 | call to sum | exprs.go:58:1:58:1 | exit | | exprs.go:57:13:57:14 | xs | exprs.go:57:9:57:15 | call to sum | -| exprs.go:60:1:60:1 | entry | exprs.go:61:9:61:22 | slice literal | +| exprs.go:60:1:62:1 | entry | exprs.go:61:9:61:22 | slice literal | | exprs.go:60:1:62:1 | function declaration | exprs.go:64:5:64:5 | skip | | exprs.go:60:6:60:9 | skip | exprs.go:60:1:62:1 | function declaration | -| exprs.go:61:2:61:22 | return statement | exprs.go:62:1:62:1 | exit | +| exprs.go:61:2:61:22 | return statement | exprs.go:60:1:62:1 | exit | | exprs.go:61:9:61:22 | slice literal | exprs.go:61:15:61:15 | element index | | exprs.go:61:15:61:15 | 1 | exprs.go:61:15:61:15 | init of 1 | | exprs.go:61:15:61:15 | element index | exprs.go:61:15:61:15 | 1 | @@ -395,21 +395,21 @@ | exprs.go:65:15:65:18 | ints | exprs.go:65:15:65:20 | call to ints | | exprs.go:65:15:65:20 | call to ints | exprs.go:0:0:0:0 | exit | | exprs.go:65:15:65:20 | call to ints | exprs.go:65:10:65:24 | call to sum2 | -| exprs.go:67:1:67:1 | entry | exprs.go:67:10:67:10 | argument corresponding to x | +| exprs.go:67:1:69:1 | entry | exprs.go:67:10:67:10 | argument corresponding to x | | exprs.go:67:1:69:1 | function declaration | exprs.go:71:6:71:8 | skip | | exprs.go:67:6:67:8 | skip | exprs.go:67:1:69:1 | function declaration | | exprs.go:67:10:67:10 | argument corresponding to x | exprs.go:67:10:67:10 | initialization of x | | exprs.go:67:10:67:10 | initialization of x | exprs.go:67:13:67:13 | argument corresponding to y | | exprs.go:67:13:67:13 | argument corresponding to y | exprs.go:67:13:67:13 | initialization of y | | exprs.go:67:13:67:13 | initialization of y | exprs.go:68:9:68:9 | x | -| exprs.go:68:2:68:13 | return statement | exprs.go:69:1:69:1 | exit | +| exprs.go:68:2:68:13 | return statement | exprs.go:67:1:69:1 | exit | | exprs.go:68:9:68:9 | x | exprs.go:68:13:68:13 | y | | exprs.go:68:9:68:13 | ...+... | exprs.go:68:2:68:13 | return statement | | exprs.go:68:13:68:13 | y | exprs.go:68:9:68:13 | ...+... | -| exprs.go:71:1:71:1 | entry | exprs.go:72:9:72:9 | 1 | +| exprs.go:71:1:73:1 | entry | exprs.go:72:9:72:9 | 1 | | exprs.go:71:1:73:1 | function declaration | exprs.go:75:5:75:6 | skip | | exprs.go:71:6:71:8 | skip | exprs.go:71:1:73:1 | function declaration | -| exprs.go:72:2:72:12 | return statement | exprs.go:73:1:73:1 | exit | +| exprs.go:72:2:72:12 | return statement | exprs.go:71:1:73:1 | exit | | exprs.go:72:9:72:9 | 1 | exprs.go:72:12:72:12 | 2 | | exprs.go:72:12:72:12 | 2 | exprs.go:72:2:72:12 | return statement | | exprs.go:75:5:75:6 | assignment to s3 | exprs.go:77:6:77:10 | skip | @@ -422,7 +422,7 @@ | exprs.go:75:14:75:16 | gen | exprs.go:75:14:75:18 | call to gen | | exprs.go:75:14:75:18 | call to gen | exprs.go:0:0:0:0 | exit | | exprs.go:75:14:75:18 | call to gen | exprs.go:75:10:75:19 | call to add[0] | -| exprs.go:77:1:77:1 | entry | exprs.go:77:12:77:12 | argument corresponding to x | +| exprs.go:77:1:79:1 | entry | exprs.go:77:12:77:12 | argument corresponding to x | | exprs.go:77:1:79:1 | function declaration | exprs.go:81:6:81:16 | skip | | exprs.go:77:6:77:10 | skip | exprs.go:77:1:79:1 | function declaration | | exprs.go:77:12:77:12 | argument corresponding to x | exprs.go:77:12:77:12 | initialization of x | @@ -431,9 +431,11 @@ | exprs.go:77:15:77:15 | initialization of y | exprs.go:77:18:77:18 | argument corresponding to z | | exprs.go:77:18:77:18 | argument corresponding to z | exprs.go:77:18:77:18 | initialization of z | | exprs.go:77:18:77:18 | initialization of z | exprs.go:78:11:78:11 | x | -| exprs.go:78:2:78:22 | return statement | exprs.go:79:1:79:1 | exit | -| exprs.go:78:9:78:17 | !... | exprs.go:78:17:78:17 | !... is false | -| exprs.go:78:9:78:17 | !... | exprs.go:78:17:78:17 | !... is true | +| exprs.go:78:2:78:22 | return statement | exprs.go:77:1:79:1 | exit | +| exprs.go:78:9:78:17 | !... | exprs.go:78:9:78:17 | !... is false | +| exprs.go:78:9:78:17 | !... | exprs.go:78:9:78:17 | !... is true | +| exprs.go:78:9:78:17 | !... is false | exprs.go:78:22:78:22 | z | +| exprs.go:78:9:78:17 | !... is true | exprs.go:78:9:78:22 | ...\|\|... | | exprs.go:78:9:78:22 | ...\|\|... | exprs.go:78:2:78:22 | return statement | | exprs.go:78:11:78:11 | x | exprs.go:78:11:78:11 | x is false | | exprs.go:78:11:78:11 | x | exprs.go:78:11:78:11 | x is true | @@ -441,10 +443,8 @@ | exprs.go:78:11:78:11 | x is true | exprs.go:78:16:78:16 | y | | exprs.go:78:11:78:16 | ...&&... | exprs.go:78:9:78:17 | !... | | exprs.go:78:16:78:16 | y | exprs.go:78:11:78:16 | ...&&... | -| exprs.go:78:17:78:17 | !... is false | exprs.go:78:22:78:22 | z | -| exprs.go:78:17:78:17 | !... is true | exprs.go:78:9:78:22 | ...\|\|... | | exprs.go:78:22:78:22 | z | exprs.go:78:9:78:22 | ...\|\|... | -| exprs.go:81:1:81:1 | entry | exprs.go:81:18:81:19 | argument corresponding to ch | +| exprs.go:81:1:87:1 | entry | exprs.go:81:18:81:19 | argument corresponding to ch | | exprs.go:81:1:87:1 | function declaration | exprs.go:89:7:89:9 | skip | | exprs.go:81:6:81:16 | skip | exprs.go:81:1:87:1 | function declaration | | exprs.go:81:18:81:19 | argument corresponding to ch | exprs.go:81:18:81:19 | initialization of ch | @@ -457,14 +457,14 @@ | exprs.go:82:7:82:8 | skip | exprs.go:82:15:82:16 | ch | | exprs.go:82:13:82:16 | <-... | exprs.go:82:2:82:16 | ... := ...[0] | | exprs.go:82:15:82:16 | ch | exprs.go:82:13:82:16 | <-... | -| exprs.go:83:5:83:6 | ok | exprs.go:83:6:83:6 | ok is false | -| exprs.go:83:5:83:6 | ok | exprs.go:83:6:83:6 | ok is true | -| exprs.go:83:6:83:6 | ok is false | exprs.go:86:2:86:6 | panic | -| exprs.go:83:6:83:6 | ok is true | exprs.go:84:10:84:12 | val | -| exprs.go:84:3:84:12 | return statement | exprs.go:87:1:87:1 | exit | +| exprs.go:83:5:83:6 | ok | exprs.go:83:5:83:6 | ok is false | +| exprs.go:83:5:83:6 | ok | exprs.go:83:5:83:6 | ok is true | +| exprs.go:83:5:83:6 | ok is false | exprs.go:86:2:86:6 | panic | +| exprs.go:83:5:83:6 | ok is true | exprs.go:84:10:84:12 | val | +| exprs.go:84:3:84:12 | return statement | exprs.go:81:1:87:1 | exit | | exprs.go:84:10:84:12 | val | exprs.go:84:3:84:12 | return statement | | exprs.go:86:2:86:6 | panic | exprs.go:86:8:86:17 | "No value" | -| exprs.go:86:2:86:18 | call to panic | exprs.go:87:1:87:1 | exit | +| exprs.go:86:2:86:18 | call to panic | exprs.go:81:1:87:1 | exit | | exprs.go:86:8:86:17 | "No value" | exprs.go:86:2:86:18 | call to panic | | exprs.go:89:7:89:9 | assignment to one | exprs.go:91:5:91:5 | skip | | exprs.go:89:7:89:9 | skip | exprs.go:89:13:89:13 | 1 | @@ -475,7 +475,7 @@ | exprs.go:91:15:91:21 | ...+... | exprs.go:91:24:91:24 | 2 | | exprs.go:91:15:91:24 | init of key-value pair | exprs.go:91:5:91:5 | assignment to a | | exprs.go:91:24:91:24 | 2 | exprs.go:91:15:91:24 | init of key-value pair | -| exprs.go:93:1:93:1 | entry | exprs.go:93:13:93:13 | argument corresponding to x | +| exprs.go:93:1:95:1 | entry | exprs.go:93:13:93:13 | argument corresponding to x | | exprs.go:93:1:95:1 | function declaration | exprs.go:0:0:0:0 | exit | | exprs.go:93:6:93:11 | skip | exprs.go:93:1:95:1 | function declaration | | exprs.go:93:13:93:13 | argument corresponding to x | exprs.go:93:13:93:13 | initialization of x | @@ -484,56 +484,56 @@ | exprs.go:93:16:93:16 | initialization of y | exprs.go:93:19:93:19 | argument corresponding to z | | exprs.go:93:19:93:19 | argument corresponding to z | exprs.go:93:19:93:19 | initialization of z | | exprs.go:93:19:93:19 | initialization of z | exprs.go:94:10:94:10 | x | -| exprs.go:94:2:94:21 | return statement | exprs.go:95:1:95:1 | exit | +| exprs.go:94:2:94:21 | return statement | exprs.go:93:1:95:1 | exit | +| exprs.go:94:9:94:16 | (...) is false | exprs.go:94:21:94:21 | z | +| exprs.go:94:9:94:16 | (...) is true | exprs.go:94:9:94:21 | ...\|\|... | | exprs.go:94:9:94:21 | ...\|\|... | exprs.go:94:2:94:21 | return statement | | exprs.go:94:10:94:10 | x | exprs.go:94:10:94:10 | x is false | | exprs.go:94:10:94:10 | x | exprs.go:94:10:94:10 | x is true | -| exprs.go:94:10:94:10 | x is false | exprs.go:94:16:94:16 | (...) is false | +| exprs.go:94:10:94:10 | x is false | exprs.go:94:9:94:16 | (...) is false | | exprs.go:94:10:94:10 | x is true | exprs.go:94:15:94:15 | y | -| exprs.go:94:15:94:15 | y | exprs.go:94:16:94:16 | (...) is false | -| exprs.go:94:15:94:15 | y | exprs.go:94:16:94:16 | (...) is true | -| exprs.go:94:16:94:16 | (...) is false | exprs.go:94:21:94:21 | z | -| exprs.go:94:16:94:16 | (...) is true | exprs.go:94:9:94:21 | ...\|\|... | +| exprs.go:94:15:94:15 | y | exprs.go:94:9:94:16 | (...) is false | +| exprs.go:94:15:94:15 | y | exprs.go:94:9:94:16 | (...) is true | | exprs.go:94:21:94:21 | z | exprs.go:94:9:94:21 | ...\|\|... | | generic.go:0:0:0:0 | entry | generic.go:3:1:5:1 | skip | | generic.go:3:1:5:1 | skip | generic.go:7:28:7:35 | skip | -| generic.go:7:1:7:1 | entry | generic.go:7:7:7:7 | argument corresponding to g | +| generic.go:7:1:7:55 | entry | generic.go:7:7:7:7 | argument corresponding to g | | generic.go:7:1:7:55 | function declaration | generic.go:9:1:12:1 | skip | | generic.go:7:7:7:7 | argument corresponding to g | generic.go:7:7:7:7 | initialization of g | | generic.go:7:7:7:7 | initialization of g | generic.go:7:37:7:37 | argument corresponding to u | | generic.go:7:28:7:35 | skip | generic.go:7:1:7:55 | function declaration | | generic.go:7:37:7:37 | argument corresponding to u | generic.go:7:37:7:37 | initialization of u | | generic.go:7:37:7:37 | initialization of u | generic.go:7:53:7:53 | u | -| generic.go:7:46:7:53 | return statement | generic.go:7:55:7:55 | exit | +| generic.go:7:46:7:53 | return statement | generic.go:7:1:7:55 | exit | | generic.go:7:53:7:53 | u | generic.go:7:46:7:53 | return statement | | generic.go:9:1:12:1 | skip | generic.go:14:31:14:39 | skip | -| generic.go:14:1:14:1 | entry | generic.go:14:7:14:7 | argument corresponding to g | +| generic.go:14:1:14:59 | entry | generic.go:14:7:14:7 | argument corresponding to g | | generic.go:14:1:14:59 | function declaration | generic.go:16:6:16:21 | skip | | generic.go:14:7:14:7 | argument corresponding to g | generic.go:14:7:14:7 | initialization of g | | generic.go:14:7:14:7 | initialization of g | generic.go:14:41:14:41 | argument corresponding to u | | generic.go:14:31:14:39 | skip | generic.go:14:1:14:59 | function declaration | | generic.go:14:41:14:41 | argument corresponding to u | generic.go:14:41:14:41 | initialization of u | | generic.go:14:41:14:41 | initialization of u | generic.go:14:57:14:57 | u | -| generic.go:14:50:14:57 | return statement | generic.go:14:59:14:59 | exit | +| generic.go:14:50:14:57 | return statement | generic.go:14:1:14:59 | exit | | generic.go:14:57:14:57 | u | generic.go:14:50:14:57 | return statement | -| generic.go:16:1:16:1 | entry | generic.go:16:30:16:30 | argument corresponding to t | +| generic.go:16:1:18:1 | entry | generic.go:16:30:16:30 | argument corresponding to t | | generic.go:16:1:18:1 | function declaration | generic.go:20:6:20:21 | skip | | generic.go:16:6:16:21 | skip | generic.go:16:1:18:1 | function declaration | | generic.go:16:30:16:30 | argument corresponding to t | generic.go:16:30:16:30 | initialization of t | | generic.go:16:30:16:30 | initialization of t | generic.go:17:9:17:9 | t | -| generic.go:17:2:17:9 | return statement | generic.go:18:1:18:1 | exit | +| generic.go:17:2:17:9 | return statement | generic.go:16:1:18:1 | exit | | generic.go:17:9:17:9 | t | generic.go:17:2:17:9 | return statement | -| generic.go:20:1:20:1 | entry | generic.go:20:33:20:33 | argument corresponding to s | +| generic.go:20:1:22:1 | entry | generic.go:20:33:20:33 | argument corresponding to s | | generic.go:20:1:22:1 | function declaration | generic.go:24:6:24:12 | skip | | generic.go:20:6:20:21 | skip | generic.go:20:1:22:1 | function declaration | | generic.go:20:33:20:33 | argument corresponding to s | generic.go:20:33:20:33 | initialization of s | | generic.go:20:33:20:33 | initialization of s | generic.go:20:38:20:38 | argument corresponding to t | | generic.go:20:38:20:38 | argument corresponding to t | generic.go:20:38:20:38 | initialization of t | | generic.go:20:38:20:38 | initialization of t | generic.go:21:9:21:9 | s | -| generic.go:21:2:21:12 | return statement | generic.go:22:1:22:1 | exit | +| generic.go:21:2:21:12 | return statement | generic.go:20:1:22:1 | exit | | generic.go:21:9:21:9 | s | generic.go:21:12:21:12 | t | | generic.go:21:12:21:12 | t | generic.go:21:2:21:12 | return statement | -| generic.go:24:1:24:1 | entry | generic.go:25:2:25:4 | skip | +| generic.go:24:1:35:1 | entry | generic.go:25:2:25:4 | skip | | generic.go:24:1:35:1 | function declaration | generic.go:0:0:0:0 | exit | | generic.go:24:6:24:12 | skip | generic.go:24:1:35:1 | function declaration | | generic.go:25:2:25:4 | assignment to gs1 | generic.go:26:2:26:2 | skip | @@ -545,8 +545,8 @@ | generic.go:26:2:26:2 | skip | generic.go:26:7:26:9 | gs1 | | generic.go:26:7:26:9 | gs1 | generic.go:26:7:26:18 | selection of Identity | | generic.go:26:7:26:18 | selection of Identity | generic.go:26:20:26:26 | "hello" | +| generic.go:26:7:26:27 | call to Identity | generic.go:24:1:35:1 | exit | | generic.go:26:7:26:27 | call to Identity | generic.go:26:2:26:2 | assignment to a | -| generic.go:26:7:26:27 | call to Identity | generic.go:35:1:35:1 | exit | | generic.go:26:20:26:26 | "hello" | generic.go:26:7:26:27 | call to Identity | | generic.go:27:2:27:4 | assignment to gs2 | generic.go:28:2:28:2 | skip | | generic.go:27:2:27:4 | skip | generic.go:27:9:27:48 | struct literal | @@ -559,20 +559,20 @@ | generic.go:28:2:28:2 | skip | generic.go:28:7:28:9 | gs2 | | generic.go:28:7:28:9 | gs2 | generic.go:28:7:28:19 | selection of Identity1 | | generic.go:28:7:28:19 | selection of Identity1 | generic.go:28:21:28:21 | a | +| generic.go:28:7:28:22 | call to Identity1 | generic.go:24:1:35:1 | exit | | generic.go:28:7:28:22 | call to Identity1 | generic.go:28:2:28:2 | assignment to b | -| generic.go:28:7:28:22 | call to Identity1 | generic.go:35:1:35:1 | exit | | generic.go:28:21:28:21 | a | generic.go:28:7:28:22 | call to Identity1 | | generic.go:29:2:29:2 | assignment to c | generic.go:30:2:30:2 | skip | | generic.go:29:2:29:2 | skip | generic.go:29:7:29:22 | genericIdentity1 | | generic.go:29:7:29:22 | genericIdentity1 | generic.go:29:32:29:32 | b | +| generic.go:29:7:29:33 | call to genericIdentity1 | generic.go:24:1:35:1 | exit | | generic.go:29:7:29:33 | call to genericIdentity1 | generic.go:29:2:29:2 | assignment to c | -| generic.go:29:7:29:33 | call to genericIdentity1 | generic.go:35:1:35:1 | exit | | generic.go:29:32:29:32 | b | generic.go:29:7:29:33 | call to genericIdentity1 | | generic.go:30:2:30:2 | assignment to d | generic.go:31:2:31:2 | skip | | generic.go:30:2:30:2 | skip | generic.go:30:7:30:22 | genericIdentity1 | | generic.go:30:7:30:22 | genericIdentity1 | generic.go:30:24:30:24 | c | +| generic.go:30:7:30:25 | call to genericIdentity1 | generic.go:24:1:35:1 | exit | | generic.go:30:7:30:25 | call to genericIdentity1 | generic.go:30:2:30:2 | assignment to d | -| generic.go:30:7:30:25 | call to genericIdentity1 | generic.go:35:1:35:1 | exit | | generic.go:30:24:30:24 | c | generic.go:30:7:30:25 | call to genericIdentity1 | | generic.go:31:2:31:2 | assignment to e | generic.go:31:2:31:53 | ... := ...[1] | | generic.go:31:2:31:2 | skip | generic.go:31:5:31:5 | skip | @@ -581,8 +581,8 @@ | generic.go:31:5:31:5 | assignment to f | generic.go:32:2:32:2 | skip | | generic.go:31:5:31:5 | skip | generic.go:31:10:31:25 | genericIdentity2 | | generic.go:31:10:31:25 | genericIdentity2 | generic.go:31:43:31:43 | d | +| generic.go:31:10:31:53 | call to genericIdentity2 | generic.go:24:1:35:1 | exit | | generic.go:31:10:31:53 | call to genericIdentity2 | generic.go:31:2:31:53 | ... := ...[0] | -| generic.go:31:10:31:53 | call to genericIdentity2 | generic.go:35:1:35:1 | exit | | generic.go:31:43:31:43 | d | generic.go:31:46:31:52 | "hello" | | generic.go:31:46:31:52 | "hello" | generic.go:31:10:31:53 | call to genericIdentity2 | | generic.go:32:2:32:2 | assignment to g | generic.go:32:2:32:31 | ... := ...[1] | @@ -592,37 +592,37 @@ | generic.go:32:5:32:5 | assignment to h | generic.go:33:2:33:2 | skip | | generic.go:32:5:32:5 | skip | generic.go:32:10:32:25 | genericIdentity2 | | generic.go:32:10:32:25 | genericIdentity2 | generic.go:32:27:32:27 | e | +| generic.go:32:10:32:31 | call to genericIdentity2 | generic.go:24:1:35:1 | exit | | generic.go:32:10:32:31 | call to genericIdentity2 | generic.go:32:2:32:31 | ... := ...[0] | -| generic.go:32:10:32:31 | call to genericIdentity2 | generic.go:35:1:35:1 | exit | | generic.go:32:27:32:27 | e | generic.go:32:30:32:30 | f | | generic.go:32:30:32:30 | f | generic.go:32:10:32:31 | call to genericIdentity2 | | generic.go:33:2:33:2 | skip | generic.go:33:6:33:6 | g | | generic.go:33:6:33:6 | g | generic.go:34:2:34:2 | skip | | generic.go:34:2:34:2 | skip | generic.go:34:6:34:6 | h | -| generic.go:34:6:34:6 | h | generic.go:35:1:35:1 | exit | +| generic.go:34:6:34:6 | h | generic.go:24:1:35:1 | exit | | hello.go:0:0:0:0 | entry | hello.go:3:1:3:12 | skip | | hello.go:3:1:3:12 | skip | hello.go:5:7:5:13 | skip | | hello.go:5:7:5:13 | assignment to message | hello.go:7:6:7:13 | skip | | hello.go:5:7:5:13 | skip | hello.go:5:17:5:31 | "Hello, world!" | | hello.go:5:17:5:31 | "Hello, world!" | hello.go:5:7:5:13 | assignment to message | -| hello.go:7:1:7:1 | entry | hello.go:8:2:8:12 | selection of Println | +| hello.go:7:1:9:1 | entry | hello.go:8:2:8:12 | selection of Println | | hello.go:7:1:9:1 | function declaration | hello.go:0:0:0:0 | exit | | hello.go:7:6:7:13 | skip | hello.go:7:1:9:1 | function declaration | | hello.go:8:2:8:12 | selection of Println | hello.go:8:14:8:20 | message | -| hello.go:8:2:8:21 | call to Println | hello.go:9:1:9:1 | exit | +| hello.go:8:2:8:21 | call to Println | hello.go:7:1:9:1 | exit | | hello.go:8:14:8:20 | message | hello.go:8:2:8:21 | call to Println | | main.go:0:0:0:0 | entry | main.go:3:1:6:1 | skip | | main.go:3:1:6:1 | skip | main.go:8:6:8:9 | skip | -| main.go:8:1:8:1 | entry | main.go:9:9:9:20 | selection of Float64 | +| main.go:8:1:10:1 | entry | main.go:9:9:9:20 | selection of Float64 | | main.go:8:1:10:1 | function declaration | main.go:12:6:12:9 | skip | | main.go:8:6:8:9 | skip | main.go:8:1:10:1 | function declaration | -| main.go:9:2:9:29 | return statement | main.go:10:1:10:1 | exit | +| main.go:9:2:9:29 | return statement | main.go:8:1:10:1 | exit | | main.go:9:9:9:20 | selection of Float64 | main.go:9:9:9:22 | call to Float64 | +| main.go:9:9:9:22 | call to Float64 | main.go:8:1:10:1 | exit | | main.go:9:9:9:22 | call to Float64 | main.go:9:27:9:29 | 0.5 | -| main.go:9:9:9:22 | call to Float64 | main.go:10:1:10:1 | exit | | main.go:9:9:9:29 | ...>=... | main.go:9:2:9:29 | return statement | | main.go:9:27:9:29 | 0.5 | main.go:9:9:9:29 | ...>=... | -| main.go:12:1:12:1 | entry | main.go:13:6:13:6 | skip | +| main.go:12:1:24:1 | entry | main.go:13:6:13:6 | skip | | main.go:12:1:24:1 | function declaration | main.go:26:6:26:8 | skip | | main.go:12:6:12:9 | skip | main.go:12:1:24:1 | function declaration | | main.go:13:6:13:6 | assignment to x | main.go:14:2:14:2 | skip | @@ -632,39 +632,39 @@ | main.go:14:2:14:2 | skip | main.go:14:7:14:8 | 23 | | main.go:14:7:14:8 | 23 | main.go:14:2:14:2 | assignment to y | | main.go:15:2:15:10 | selection of Print | main.go:15:12:15:12 | x | +| main.go:15:2:15:16 | call to Print | main.go:12:1:24:1 | exit | | main.go:15:2:15:16 | call to Print | main.go:16:5:16:8 | cond | -| main.go:15:2:15:16 | call to Print | main.go:24:1:24:1 | exit | | main.go:15:12:15:12 | x | main.go:15:15:15:15 | y | | main.go:15:15:15:15 | y | main.go:15:2:15:16 | call to Print | | main.go:16:5:16:8 | cond | main.go:16:5:16:10 | call to cond | -| main.go:16:5:16:10 | call to cond | main.go:16:10:16:10 | call to cond is false | -| main.go:16:5:16:10 | call to cond | main.go:16:10:16:10 | call to cond is true | -| main.go:16:5:16:10 | call to cond | main.go:24:1:24:1 | exit | -| main.go:16:10:16:10 | call to cond is false | main.go:19:2:19:10 | selection of Print | -| main.go:16:10:16:10 | call to cond is true | main.go:17:3:17:3 | y | +| main.go:16:5:16:10 | call to cond | main.go:12:1:24:1 | exit | +| main.go:16:5:16:10 | call to cond | main.go:16:5:16:10 | call to cond is false | +| main.go:16:5:16:10 | call to cond | main.go:16:5:16:10 | call to cond is true | +| main.go:16:5:16:10 | call to cond is false | main.go:19:2:19:10 | selection of Print | +| main.go:16:5:16:10 | call to cond is true | main.go:17:3:17:3 | y | | main.go:17:3:17:3 | assignment to y | main.go:19:2:19:10 | selection of Print | | main.go:17:3:17:3 | y | main.go:17:8:17:9 | 19 | | main.go:17:3:17:9 | ... += ... | main.go:17:3:17:3 | assignment to y | | main.go:17:8:17:9 | 19 | main.go:17:3:17:9 | ... += ... | | main.go:19:2:19:10 | selection of Print | main.go:19:12:19:12 | x | +| main.go:19:2:19:16 | call to Print | main.go:12:1:24:1 | exit | | main.go:19:2:19:16 | call to Print | main.go:20:5:20:8 | cond | -| main.go:19:2:19:16 | call to Print | main.go:24:1:24:1 | exit | | main.go:19:12:19:12 | x | main.go:19:15:19:15 | y | | main.go:19:15:19:15 | y | main.go:19:2:19:16 | call to Print | | main.go:20:5:20:8 | cond | main.go:20:5:20:10 | call to cond | -| main.go:20:5:20:10 | call to cond | main.go:20:10:20:10 | call to cond is false | -| main.go:20:5:20:10 | call to cond | main.go:20:10:20:10 | call to cond is true | -| main.go:20:5:20:10 | call to cond | main.go:24:1:24:1 | exit | -| main.go:20:10:20:10 | call to cond is false | main.go:23:2:23:10 | selection of Print | -| main.go:20:10:20:10 | call to cond is true | main.go:21:3:21:3 | skip | +| main.go:20:5:20:10 | call to cond | main.go:12:1:24:1 | exit | +| main.go:20:5:20:10 | call to cond | main.go:20:5:20:10 | call to cond is false | +| main.go:20:5:20:10 | call to cond | main.go:20:5:20:10 | call to cond is true | +| main.go:20:5:20:10 | call to cond is false | main.go:23:2:23:10 | selection of Print | +| main.go:20:5:20:10 | call to cond is true | main.go:21:3:21:3 | skip | | main.go:21:3:21:3 | assignment to x | main.go:23:2:23:10 | selection of Print | | main.go:21:3:21:3 | skip | main.go:21:7:21:7 | y | | main.go:21:7:21:7 | y | main.go:21:3:21:3 | assignment to x | | main.go:23:2:23:10 | selection of Print | main.go:23:12:23:12 | x | -| main.go:23:2:23:16 | call to Print | main.go:24:1:24:1 | exit | +| main.go:23:2:23:16 | call to Print | main.go:12:1:24:1 | exit | | main.go:23:12:23:12 | x | main.go:23:15:23:15 | y | | main.go:23:15:23:15 | y | main.go:23:2:23:16 | call to Print | -| main.go:26:1:26:1 | entry | main.go:26:10:26:10 | argument corresponding to x | +| main.go:26:1:32:1 | entry | main.go:26:10:26:10 | argument corresponding to x | | main.go:26:1:32:1 | function declaration | main.go:34:6:34:9 | skip | | main.go:26:6:26:8 | skip | main.go:26:1:32:1 | function declaration | | main.go:26:10:26:10 | argument corresponding to x | main.go:26:10:26:10 | initialization of x | @@ -676,32 +676,32 @@ | main.go:27:10:27:10 | x | main.go:27:13:27:13 | 0 | | main.go:27:13:27:13 | 0 | main.go:27:2:27:2 | assignment to a | | main.go:28:5:28:8 | cond | main.go:28:5:28:10 | call to cond | -| main.go:28:5:28:10 | call to cond | main.go:28:10:28:10 | call to cond is false | -| main.go:28:5:28:10 | call to cond | main.go:28:10:28:10 | call to cond is true | -| main.go:28:5:28:10 | call to cond | main.go:32:1:32:1 | exit | -| main.go:28:10:28:10 | call to cond is false | main.go:31:9:31:9 | a | -| main.go:28:10:28:10 | call to cond is true | main.go:29:3:29:3 | skip | +| main.go:28:5:28:10 | call to cond | main.go:26:1:32:1 | exit | +| main.go:28:5:28:10 | call to cond | main.go:28:5:28:10 | call to cond is false | +| main.go:28:5:28:10 | call to cond | main.go:28:5:28:10 | call to cond is true | +| main.go:28:5:28:10 | call to cond is false | main.go:31:9:31:9 | a | +| main.go:28:5:28:10 | call to cond is true | main.go:29:3:29:3 | skip | | main.go:29:3:29:3 | assignment to a | main.go:29:6:29:6 | assignment to b | | main.go:29:3:29:3 | skip | main.go:29:6:29:6 | skip | | main.go:29:6:29:6 | assignment to b | main.go:31:9:31:9 | a | | main.go:29:6:29:6 | skip | main.go:29:10:29:10 | b | | main.go:29:10:29:10 | b | main.go:29:13:29:13 | a | | main.go:29:13:29:13 | a | main.go:29:3:29:3 | assignment to a | -| main.go:31:2:31:12 | return statement | main.go:32:1:32:1 | exit | +| main.go:31:2:31:12 | return statement | main.go:26:1:32:1 | exit | | main.go:31:9:31:9 | a | main.go:31:12:31:12 | b | | main.go:31:12:31:12 | b | main.go:31:2:31:12 | return statement | -| main.go:34:1:34:1 | entry | main.go:34:11:34:11 | argument corresponding to x | +| main.go:34:1:36:1 | entry | main.go:34:11:34:11 | argument corresponding to x | | main.go:34:1:36:1 | function declaration | main.go:38:6:38:8 | skip | | main.go:34:6:34:9 | skip | main.go:34:1:36:1 | function declaration | | main.go:34:11:34:11 | argument corresponding to x | main.go:34:11:34:11 | initialization of x | | main.go:34:11:34:11 | initialization of x | main.go:35:3:35:3 | x | -| main.go:35:2:35:3 | assignment to star expression | main.go:36:1:36:1 | exit | +| main.go:35:2:35:3 | assignment to star expression | main.go:34:1:36:1 | exit | +| main.go:35:2:35:3 | star expression | main.go:34:1:36:1 | exit | | main.go:35:2:35:3 | star expression | main.go:35:8:35:9 | 19 | -| main.go:35:2:35:3 | star expression | main.go:36:1:36:1 | exit | | main.go:35:2:35:9 | ... += ... | main.go:35:2:35:3 | assignment to star expression | | main.go:35:3:35:3 | x | main.go:35:2:35:3 | star expression | | main.go:35:8:35:9 | 19 | main.go:35:2:35:9 | ... += ... | -| main.go:38:1:38:1 | entry | main.go:39:2:39:2 | skip | +| main.go:38:1:45:1 | entry | main.go:39:2:39:2 | skip | | main.go:38:1:45:1 | function declaration | main.go:47:6:47:8 | skip | | main.go:38:6:38:8 | skip | main.go:38:1:45:1 | function declaration | | main.go:39:2:39:2 | assignment to x | main.go:40:2:40:4 | skip | @@ -712,53 +712,53 @@ | main.go:40:9:40:10 | &... | main.go:40:2:40:4 | assignment to ptr | | main.go:40:10:40:10 | x | main.go:40:9:40:10 | &... | | main.go:41:5:41:8 | cond | main.go:41:5:41:10 | call to cond | -| main.go:41:5:41:10 | call to cond | main.go:41:10:41:10 | call to cond is false | -| main.go:41:5:41:10 | call to cond | main.go:41:10:41:10 | call to cond is true | -| main.go:41:5:41:10 | call to cond | main.go:45:1:45:1 | exit | -| main.go:41:10:41:10 | call to cond is false | main.go:44:2:44:10 | selection of Print | -| main.go:41:10:41:10 | call to cond is true | main.go:42:3:42:6 | bump | +| main.go:41:5:41:10 | call to cond | main.go:38:1:45:1 | exit | +| main.go:41:5:41:10 | call to cond | main.go:41:5:41:10 | call to cond is false | +| main.go:41:5:41:10 | call to cond | main.go:41:5:41:10 | call to cond is true | +| main.go:41:5:41:10 | call to cond is false | main.go:44:2:44:10 | selection of Print | +| main.go:41:5:41:10 | call to cond is true | main.go:42:3:42:6 | bump | | main.go:42:3:42:6 | bump | main.go:42:8:42:10 | ptr | +| main.go:42:3:42:11 | call to bump | main.go:38:1:45:1 | exit | | main.go:42:3:42:11 | call to bump | main.go:44:2:44:10 | selection of Print | -| main.go:42:3:42:11 | call to bump | main.go:45:1:45:1 | exit | | main.go:42:8:42:10 | ptr | main.go:42:3:42:11 | call to bump | | main.go:44:2:44:10 | selection of Print | main.go:44:12:44:12 | x | -| main.go:44:2:44:13 | call to Print | main.go:45:1:45:1 | exit | +| main.go:44:2:44:13 | call to Print | main.go:38:1:45:1 | exit | | main.go:44:12:44:12 | x | main.go:44:2:44:13 | call to Print | -| main.go:47:1:47:1 | entry | main.go:47:13:47:18 | zero value for result | +| main.go:47:1:50:1 | entry | main.go:47:13:47:18 | zero value for result | | main.go:47:1:50:1 | function declaration | main.go:52:6:52:9 | skip | | main.go:47:6:47:8 | skip | main.go:47:1:50:1 | function declaration | -| main.go:47:13:47:18 | implicit read of result | main.go:50:1:50:1 | exit | +| main.go:47:13:47:18 | implicit read of result | main.go:47:1:50:1 | exit | | main.go:47:13:47:18 | initialization of result | main.go:48:2:48:7 | skip | | main.go:47:13:47:18 | zero value for result | main.go:47:13:47:18 | initialization of result | | main.go:48:2:48:7 | assignment to result | main.go:49:2:49:7 | return statement | | main.go:48:2:48:7 | skip | main.go:48:11:48:12 | 42 | | main.go:48:11:48:12 | 42 | main.go:48:2:48:7 | assignment to result | | main.go:49:2:49:7 | return statement | main.go:47:13:47:18 | implicit read of result | -| main.go:52:1:52:1 | entry | main.go:52:14:52:19 | zero value for result | +| main.go:52:1:54:1 | entry | main.go:52:14:52:19 | zero value for result | | main.go:52:1:54:1 | function declaration | main.go:56:6:56:10 | skip | | main.go:52:6:52:9 | skip | main.go:52:1:54:1 | function declaration | -| main.go:52:14:52:19 | implicit read of result | main.go:54:1:54:1 | exit | +| main.go:52:14:52:19 | implicit read of result | main.go:52:1:54:1 | exit | | main.go:52:14:52:19 | initialization of result | main.go:53:2:53:7 | return statement | | main.go:52:14:52:19 | zero value for result | main.go:52:14:52:19 | initialization of result | | main.go:53:2:53:7 | return statement | main.go:52:14:52:19 | implicit read of result | -| main.go:56:1:56:1 | entry | main.go:57:6:57:6 | skip | +| main.go:56:1:80:1 | entry | main.go:57:6:57:6 | skip | | main.go:56:1:80:1 | function declaration | main.go:82:6:82:13 | skip | | main.go:56:6:56:10 | skip | main.go:56:1:80:1 | function declaration | | main.go:57:6:57:6 | assignment to x | main.go:58:6:58:9 | cond | | main.go:57:6:57:6 | skip | main.go:57:6:57:6 | zero value for x | | main.go:57:6:57:6 | zero value for x | main.go:57:6:57:6 | assignment to x | | main.go:58:6:58:9 | cond | main.go:58:6:58:11 | call to cond | -| main.go:58:6:58:11 | call to cond | main.go:58:11:58:11 | call to cond is false | -| main.go:58:6:58:11 | call to cond | main.go:58:11:58:11 | call to cond is true | -| main.go:58:6:58:11 | call to cond | main.go:80:1:80:1 | exit | -| main.go:58:11:58:11 | call to cond is false | main.go:61:2:61:10 | selection of Print | -| main.go:58:11:58:11 | call to cond is true | main.go:59:3:59:3 | skip | +| main.go:58:6:58:11 | call to cond | main.go:56:1:80:1 | exit | +| main.go:58:6:58:11 | call to cond | main.go:58:6:58:11 | call to cond is false | +| main.go:58:6:58:11 | call to cond | main.go:58:6:58:11 | call to cond is true | +| main.go:58:6:58:11 | call to cond is false | main.go:61:2:61:10 | selection of Print | +| main.go:58:6:58:11 | call to cond is true | main.go:59:3:59:3 | skip | | main.go:59:3:59:3 | assignment to x | main.go:58:6:58:9 | cond | | main.go:59:3:59:3 | skip | main.go:59:7:59:7 | 2 | | main.go:59:7:59:7 | 2 | main.go:59:3:59:3 | assignment to x | | main.go:61:2:61:10 | selection of Print | main.go:61:12:61:12 | x | +| main.go:61:2:61:13 | call to Print | main.go:56:1:80:1 | exit | | main.go:61:2:61:13 | call to Print | main.go:63:2:63:2 | skip | -| main.go:61:2:61:13 | call to Print | main.go:80:1:80:1 | exit | | main.go:61:12:61:12 | x | main.go:61:2:61:13 | call to Print | | main.go:63:2:63:2 | assignment to y | main.go:64:6:64:6 | skip | | main.go:63:2:63:2 | skip | main.go:63:7:63:7 | 1 | @@ -771,18 +771,18 @@ | main.go:64:16:64:18 | increment statement | main.go:65:6:65:9 | cond | | main.go:64:16:64:18 | rhs of increment statement | main.go:64:16:64:18 | increment statement | | main.go:65:6:65:9 | cond | main.go:65:6:65:11 | call to cond | -| main.go:65:6:65:11 | call to cond | main.go:65:11:65:11 | call to cond is false | -| main.go:65:6:65:11 | call to cond | main.go:65:11:65:11 | call to cond is true | -| main.go:65:6:65:11 | call to cond | main.go:80:1:80:1 | exit | -| main.go:65:11:65:11 | call to cond is false | main.go:68:3:68:3 | skip | -| main.go:65:11:65:11 | call to cond is true | main.go:66:4:66:8 | skip | +| main.go:65:6:65:11 | call to cond | main.go:56:1:80:1 | exit | +| main.go:65:6:65:11 | call to cond | main.go:65:6:65:11 | call to cond is false | +| main.go:65:6:65:11 | call to cond | main.go:65:6:65:11 | call to cond is true | +| main.go:65:6:65:11 | call to cond is false | main.go:68:3:68:3 | skip | +| main.go:65:6:65:11 | call to cond is true | main.go:66:4:66:8 | skip | | main.go:66:4:66:8 | skip | main.go:70:2:70:10 | selection of Print | | main.go:68:3:68:3 | assignment to y | main.go:64:16:64:16 | i | | main.go:68:3:68:3 | skip | main.go:68:7:68:7 | 2 | | main.go:68:7:68:7 | 2 | main.go:68:3:68:3 | assignment to y | | main.go:70:2:70:10 | selection of Print | main.go:70:12:70:12 | y | +| main.go:70:2:70:13 | call to Print | main.go:56:1:80:1 | exit | | main.go:70:2:70:13 | call to Print | main.go:72:2:72:2 | skip | -| main.go:70:2:70:13 | call to Print | main.go:80:1:80:1 | exit | | main.go:70:12:70:12 | y | main.go:70:2:70:13 | call to Print | | main.go:72:2:72:2 | assignment to z | main.go:73:6:73:6 | skip | | main.go:72:2:72:2 | skip | main.go:72:7:72:7 | 1 | @@ -798,22 +798,22 @@ | main.go:74:3:74:3 | skip | main.go:74:7:74:7 | 2 | | main.go:74:7:74:7 | 2 | main.go:74:3:74:3 | assignment to z | | main.go:75:6:75:9 | cond | main.go:75:6:75:11 | call to cond | -| main.go:75:6:75:11 | call to cond | main.go:75:11:75:11 | call to cond is false | -| main.go:75:6:75:11 | call to cond | main.go:75:11:75:11 | call to cond is true | -| main.go:75:6:75:11 | call to cond | main.go:80:1:80:1 | exit | -| main.go:75:11:75:11 | call to cond is false | main.go:73:16:73:16 | i | -| main.go:75:11:75:11 | call to cond is true | main.go:76:4:76:8 | skip | +| main.go:75:6:75:11 | call to cond | main.go:56:1:80:1 | exit | +| main.go:75:6:75:11 | call to cond | main.go:75:6:75:11 | call to cond is false | +| main.go:75:6:75:11 | call to cond | main.go:75:6:75:11 | call to cond is true | +| main.go:75:6:75:11 | call to cond is false | main.go:73:16:73:16 | i | +| main.go:75:6:75:11 | call to cond is true | main.go:76:4:76:8 | skip | | main.go:76:4:76:8 | skip | main.go:79:2:79:10 | selection of Print | | main.go:79:2:79:10 | selection of Print | main.go:79:12:79:12 | z | -| main.go:79:2:79:13 | call to Print | main.go:80:1:80:1 | exit | +| main.go:79:2:79:13 | call to Print | main.go:56:1:80:1 | exit | | main.go:79:12:79:12 | z | main.go:79:2:79:13 | call to Print | -| main.go:82:1:82:1 | entry | main.go:82:18:82:18 | zero value for a | +| main.go:82:1:86:1 | entry | main.go:82:18:82:18 | zero value for a | | main.go:82:1:86:1 | function declaration | main.go:88:6:88:23 | skip | | main.go:82:6:82:13 | skip | main.go:82:1:86:1 | function declaration | | main.go:82:18:82:18 | implicit read of a | main.go:82:25:82:25 | implicit read of b | | main.go:82:18:82:18 | initialization of a | main.go:82:25:82:25 | zero value for b | | main.go:82:18:82:18 | zero value for a | main.go:82:18:82:18 | initialization of a | -| main.go:82:25:82:25 | implicit read of b | main.go:86:1:86:1 | exit | +| main.go:82:25:82:25 | implicit read of b | main.go:82:1:86:1 | exit | | main.go:82:25:82:25 | initialization of b | main.go:83:2:83:2 | skip | | main.go:82:25:82:25 | zero value for b | main.go:82:25:82:25 | initialization of b | | main.go:83:2:83:2 | assignment to x | main.go:84:2:84:2 | skip | @@ -828,7 +828,7 @@ | main.go:84:11:84:12 | 19 | main.go:84:9:84:12 | ...+... | | main.go:84:15:84:15 | x | main.go:84:2:84:2 | assignment to x | | main.go:85:2:85:7 | return statement | main.go:82:18:82:18 | implicit read of a | -| main.go:88:1:88:1 | entry | main.go:88:25:88:25 | argument corresponding to x | +| main.go:88:1:96:1 | entry | main.go:88:25:88:25 | argument corresponding to x | | main.go:88:1:96:1 | function declaration | main.go:0:0:0:0 | exit | | main.go:88:6:88:23 | skip | main.go:88:1:96:1 | function declaration | | main.go:88:25:88:25 | argument corresponding to x | main.go:88:25:88:25 | initialization of x | @@ -840,11 +840,11 @@ | main.go:89:10:89:10 | x | main.go:89:13:89:13 | 0 | | main.go:89:13:89:13 | 0 | main.go:89:2:89:2 | assignment to a | | main.go:90:5:90:8 | cond | main.go:90:5:90:10 | call to cond | -| main.go:90:5:90:10 | call to cond | main.go:90:10:90:10 | call to cond is false | -| main.go:90:5:90:10 | call to cond | main.go:90:10:90:10 | call to cond is true | -| main.go:90:5:90:10 | call to cond | main.go:96:1:96:1 | exit | -| main.go:90:10:90:10 | call to cond is false | main.go:93:3:93:3 | skip | -| main.go:90:10:90:10 | call to cond is true | main.go:91:3:91:3 | skip | +| main.go:90:5:90:10 | call to cond | main.go:88:1:96:1 | exit | +| main.go:90:5:90:10 | call to cond | main.go:90:5:90:10 | call to cond is false | +| main.go:90:5:90:10 | call to cond | main.go:90:5:90:10 | call to cond is true | +| main.go:90:5:90:10 | call to cond is false | main.go:93:3:93:3 | skip | +| main.go:90:5:90:10 | call to cond is true | main.go:91:3:91:3 | skip | | main.go:91:3:91:3 | assignment to a | main.go:95:9:95:9 | a | | main.go:91:3:91:3 | skip | main.go:91:6:91:6 | skip | | main.go:91:6:91:6 | skip | main.go:91:10:91:10 | b | @@ -855,64 +855,64 @@ | main.go:93:6:93:6 | skip | main.go:93:10:93:10 | b | | main.go:93:10:93:10 | b | main.go:93:13:93:13 | a | | main.go:93:13:93:13 | a | main.go:93:6:93:6 | assignment to b | -| main.go:95:2:95:12 | return statement | main.go:96:1:96:1 | exit | +| main.go:95:2:95:12 | return statement | main.go:88:1:96:1 | exit | | main.go:95:9:95:9 | a | main.go:95:12:95:12 | b | | main.go:95:12:95:12 | b | main.go:95:2:95:12 | return statement | | noretfunctions.go:0:0:0:0 | entry | noretfunctions.go:3:1:6:1 | skip | | noretfunctions.go:3:1:6:1 | skip | noretfunctions.go:8:6:8:12 | skip | -| noretfunctions.go:8:1:8:1 | entry | noretfunctions.go:9:2:9:8 | selection of Exit | +| noretfunctions.go:8:1:10:1 | entry | noretfunctions.go:9:2:9:8 | selection of Exit | | noretfunctions.go:8:1:10:1 | function declaration | noretfunctions.go:12:6:12:11 | skip | | noretfunctions.go:8:6:8:12 | skip | noretfunctions.go:8:1:10:1 | function declaration | | noretfunctions.go:9:2:9:8 | selection of Exit | noretfunctions.go:9:10:9:10 | 1 | -| noretfunctions.go:9:2:9:11 | call to Exit | noretfunctions.go:10:1:10:1 | exit | +| noretfunctions.go:9:2:9:11 | call to Exit | noretfunctions.go:8:1:10:1 | exit | | noretfunctions.go:9:10:9:10 | 1 | noretfunctions.go:9:2:9:11 | call to Exit | -| noretfunctions.go:12:1:12:1 | entry | noretfunctions.go:12:13:12:13 | argument corresponding to x | +| noretfunctions.go:12:1:16:1 | entry | noretfunctions.go:12:13:12:13 | argument corresponding to x | | noretfunctions.go:12:1:16:1 | function declaration | noretfunctions.go:18:6:18:12 | skip | | noretfunctions.go:12:6:12:11 | skip | noretfunctions.go:12:1:16:1 | function declaration | | noretfunctions.go:12:13:12:13 | argument corresponding to x | noretfunctions.go:12:13:12:13 | initialization of x | | noretfunctions.go:12:13:12:13 | initialization of x | noretfunctions.go:13:5:13:5 | x | | noretfunctions.go:13:5:13:5 | x | noretfunctions.go:13:10:13:10 | 0 | -| noretfunctions.go:13:5:13:10 | ...!=... | noretfunctions.go:13:10:13:10 | ...!=... is false | -| noretfunctions.go:13:5:13:10 | ...!=... | noretfunctions.go:13:10:13:10 | ...!=... is true | +| noretfunctions.go:13:5:13:10 | ...!=... | noretfunctions.go:13:5:13:10 | ...!=... is false | +| noretfunctions.go:13:5:13:10 | ...!=... | noretfunctions.go:13:5:13:10 | ...!=... is true | +| noretfunctions.go:13:5:13:10 | ...!=... is false | noretfunctions.go:12:1:16:1 | exit | +| noretfunctions.go:13:5:13:10 | ...!=... is true | noretfunctions.go:14:3:14:9 | selection of Exit | | noretfunctions.go:13:10:13:10 | 0 | noretfunctions.go:13:5:13:10 | ...!=... | -| noretfunctions.go:13:10:13:10 | ...!=... is false | noretfunctions.go:16:1:16:1 | exit | -| noretfunctions.go:13:10:13:10 | ...!=... is true | noretfunctions.go:14:3:14:9 | selection of Exit | | noretfunctions.go:14:3:14:9 | selection of Exit | noretfunctions.go:14:11:14:11 | x | -| noretfunctions.go:14:3:14:12 | call to Exit | noretfunctions.go:16:1:16:1 | exit | +| noretfunctions.go:14:3:14:12 | call to Exit | noretfunctions.go:12:1:16:1 | exit | | noretfunctions.go:14:11:14:11 | x | noretfunctions.go:14:3:14:12 | call to Exit | -| noretfunctions.go:18:1:18:1 | entry | noretfunctions.go:18:16:18:17 | skip | +| noretfunctions.go:18:1:18:17 | entry | noretfunctions.go:18:16:18:17 | skip | | noretfunctions.go:18:1:18:17 | function declaration | noretfunctions.go:20:6:20:22 | skip | | noretfunctions.go:18:6:18:12 | skip | noretfunctions.go:18:1:18:17 | function declaration | -| noretfunctions.go:18:16:18:17 | skip | noretfunctions.go:18:17:18:17 | exit | -| noretfunctions.go:20:1:20:1 | entry | noretfunctions.go:21:2:21:10 | selection of Fatal | +| noretfunctions.go:18:16:18:17 | skip | noretfunctions.go:18:1:18:17 | exit | +| noretfunctions.go:20:1:22:1 | entry | noretfunctions.go:21:2:21:10 | selection of Fatal | | noretfunctions.go:20:1:22:1 | function declaration | noretfunctions.go:24:6:24:23 | skip | | noretfunctions.go:20:6:20:22 | skip | noretfunctions.go:20:1:22:1 | function declaration | | noretfunctions.go:21:2:21:10 | selection of Fatal | noretfunctions.go:21:12:21:18 | "Oh no" | -| noretfunctions.go:21:2:21:19 | call to Fatal | noretfunctions.go:22:1:22:1 | exit | +| noretfunctions.go:21:2:21:19 | call to Fatal | noretfunctions.go:20:1:22:1 | exit | | noretfunctions.go:21:12:21:18 | "Oh no" | noretfunctions.go:21:2:21:19 | call to Fatal | -| noretfunctions.go:24:1:24:1 | entry | noretfunctions.go:25:2:25:11 | selection of Fatalf | +| noretfunctions.go:24:1:26:1 | entry | noretfunctions.go:25:2:25:11 | selection of Fatalf | | noretfunctions.go:24:1:26:1 | function declaration | noretfunctions.go:0:0:0:0 | exit | | noretfunctions.go:24:6:24:23 | skip | noretfunctions.go:24:1:26:1 | function declaration | | noretfunctions.go:25:2:25:11 | selection of Fatalf | noretfunctions.go:25:13:25:30 | "It's as I feared" | -| noretfunctions.go:25:2:25:31 | call to Fatalf | noretfunctions.go:26:1:26:1 | exit | +| noretfunctions.go:25:2:25:31 | call to Fatalf | noretfunctions.go:24:1:26:1 | exit | | noretfunctions.go:25:13:25:30 | "It's as I feared" | noretfunctions.go:25:2:25:31 | call to Fatalf | | stmts2.go:0:0:0:0 | entry | stmts2.go:3:6:3:11 | skip | -| stmts2.go:3:1:3:1 | entry | stmts2.go:4:2:4:2 | skip | +| stmts2.go:3:1:7:1 | entry | stmts2.go:4:2:4:2 | skip | | stmts2.go:3:1:7:1 | function declaration | stmts2.go:9:6:9:11 | skip | | stmts2.go:3:6:3:11 | skip | stmts2.go:3:1:7:1 | function declaration | | stmts2.go:4:2:4:2 | skip | stmts2.go:4:6:4:10 | test7 | | stmts2.go:4:6:4:10 | test7 | stmts2.go:4:12:4:12 | 0 | +| stmts2.go:4:6:4:13 | call to test7 | stmts2.go:3:1:7:1 | exit | | stmts2.go:4:6:4:13 | call to test7 | stmts2.go:5:6:5:6 | skip | -| stmts2.go:4:6:4:13 | call to test7 | stmts2.go:7:1:7:1 | exit | | stmts2.go:4:12:4:12 | 0 | stmts2.go:4:6:4:13 | call to test7 | | stmts2.go:5:6:5:6 | skip | stmts2.go:5:10:5:14 | test7 | | stmts2.go:5:10:5:14 | test7 | stmts2.go:5:16:5:16 | 1 | +| stmts2.go:5:10:5:17 | call to test7 | stmts2.go:3:1:7:1 | exit | | stmts2.go:5:10:5:17 | call to test7 | stmts2.go:6:9:6:9 | 2 | -| stmts2.go:5:10:5:17 | call to test7 | stmts2.go:7:1:7:1 | exit | | stmts2.go:5:16:5:16 | 1 | stmts2.go:5:10:5:17 | call to test7 | -| stmts2.go:6:2:6:9 | return statement | stmts2.go:7:1:7:1 | exit | +| stmts2.go:6:2:6:9 | return statement | stmts2.go:3:1:7:1 | exit | | stmts2.go:6:9:6:9 | 2 | stmts2.go:6:2:6:9 | return statement | -| stmts2.go:9:1:9:1 | entry | stmts2.go:10:2:10:2 | skip | +| stmts2.go:9:1:13:1 | entry | stmts2.go:10:2:10:2 | skip | | stmts2.go:9:1:13:1 | function declaration | stmts2.go:15:6:15:11 | skip | | stmts2.go:9:6:9:11 | skip | stmts2.go:9:1:13:1 | function declaration | | stmts2.go:10:2:10:2 | skip | stmts2.go:10:5:10:5 | skip | @@ -921,21 +921,21 @@ | stmts2.go:10:5:10:5 | assignment to x | stmts2.go:11:6:11:6 | skip | | stmts2.go:10:5:10:5 | skip | stmts2.go:10:10:10:12 | gen | | stmts2.go:10:10:10:12 | gen | stmts2.go:10:10:10:14 | call to gen | +| stmts2.go:10:10:10:14 | call to gen | stmts2.go:9:1:13:1 | exit | | stmts2.go:10:10:10:14 | call to gen | stmts2.go:10:2:10:14 | ... := ...[0] | -| stmts2.go:10:10:10:14 | call to gen | stmts2.go:13:1:13:1 | exit | | stmts2.go:11:6:11:6 | skip | stmts2.go:11:9:11:9 | skip | | stmts2.go:11:6:11:17 | value declaration specifier[0] | stmts2.go:11:6:11:17 | value declaration specifier[1] | | stmts2.go:11:6:11:17 | value declaration specifier[1] | stmts2.go:11:9:11:9 | assignment to y | | stmts2.go:11:9:11:9 | assignment to y | stmts2.go:12:9:12:9 | x | | stmts2.go:11:9:11:9 | skip | stmts2.go:11:13:11:15 | gen | | stmts2.go:11:13:11:15 | gen | stmts2.go:11:13:11:17 | call to gen | +| stmts2.go:11:13:11:17 | call to gen | stmts2.go:9:1:13:1 | exit | | stmts2.go:11:13:11:17 | call to gen | stmts2.go:11:6:11:17 | value declaration specifier[0] | -| stmts2.go:11:13:11:17 | call to gen | stmts2.go:13:1:13:1 | exit | -| stmts2.go:12:2:12:13 | return statement | stmts2.go:13:1:13:1 | exit | +| stmts2.go:12:2:12:13 | return statement | stmts2.go:9:1:13:1 | exit | | stmts2.go:12:9:12:9 | x | stmts2.go:12:13:12:13 | y | | stmts2.go:12:9:12:13 | ...+... | stmts2.go:12:2:12:13 | return statement | | stmts2.go:12:13:12:13 | y | stmts2.go:12:9:12:13 | ...+... | -| stmts2.go:15:1:15:1 | entry | stmts2.go:15:13:15:14 | argument corresponding to ch | +| stmts2.go:15:1:28:1 | entry | stmts2.go:15:13:15:14 | argument corresponding to ch | | stmts2.go:15:1:28:1 | function declaration | stmts2.go:30:6:30:12 | skip | | stmts2.go:15:6:15:11 | skip | stmts2.go:15:1:28:1 | function declaration | | stmts2.go:15:13:15:14 | argument corresponding to ch | stmts2.go:15:13:15:14 | initialization of ch | @@ -955,7 +955,7 @@ | stmts2.go:18:10:18:10 | skip | stmts2.go:18:7:18:18 | ... := ...[0] | | stmts2.go:18:15:18:18 | <-... | stmts2.go:18:7:18:7 | skip | | stmts2.go:18:17:18:18 | ch | stmts2.go:20:17:20:18 | ch | -| stmts2.go:19:3:19:10 | return statement | stmts2.go:28:1:28:1 | exit | +| stmts2.go:19:3:19:10 | return statement | stmts2.go:15:1:28:1 | exit | | stmts2.go:19:10:19:10 | x | stmts2.go:19:3:19:10 | return statement | | stmts2.go:20:7:20:7 | skip | stmts2.go:20:10:20:10 | skip | | stmts2.go:20:7:20:18 | ... := ...[0] | stmts2.go:20:7:20:18 | ... := ...[1] | @@ -969,7 +969,7 @@ | stmts2.go:21:6:21:6 | y is false | stmts2.go:24:10:24:10 | 0 | | stmts2.go:21:6:21:6 | y is true | stmts2.go:22:4:22:8 | skip | | stmts2.go:22:4:22:8 | skip | stmts2.go:27:9:27:9 | 1 | -| stmts2.go:24:3:24:10 | return statement | stmts2.go:28:1:28:1 | exit | +| stmts2.go:24:3:24:10 | return statement | stmts2.go:15:1:28:1 | exit | | stmts2.go:24:10:24:10 | 0 | stmts2.go:24:3:24:10 | return statement | | stmts2.go:25:2:25:18 | skip | stmts2.go:27:9:27:9 | 1 | | stmts2.go:25:7:25:7 | skip | stmts2.go:25:10:25:10 | skip | @@ -978,9 +978,9 @@ | stmts2.go:25:10:25:10 | skip | stmts2.go:25:7:25:17 | ... = ...[0] | | stmts2.go:25:14:25:17 | <-... | stmts2.go:25:7:25:7 | skip | | stmts2.go:25:16:25:17 | ch | stmts2.go:16:2:26:2 | select statement | -| stmts2.go:27:2:27:9 | return statement | stmts2.go:28:1:28:1 | exit | +| stmts2.go:27:2:27:9 | return statement | stmts2.go:15:1:28:1 | exit | | stmts2.go:27:9:27:9 | 1 | stmts2.go:27:2:27:9 | return statement | -| stmts2.go:30:1:30:1 | entry | stmts2.go:31:2:31:2 | skip | +| stmts2.go:30:1:34:1 | entry | stmts2.go:31:2:31:2 | skip | | stmts2.go:30:1:34:1 | function declaration | stmts2.go:0:0:0:0 | exit | | stmts2.go:30:6:30:12 | skip | stmts2.go:30:1:34:1 | function declaration | | stmts2.go:31:2:31:2 | assignment to x | stmts2.go:31:2:31:14 | ... := ...[1] | @@ -989,23 +989,23 @@ | stmts2.go:31:2:31:14 | ... := ...[1] | stmts2.go:32:6:32:6 | skip | | stmts2.go:31:5:31:5 | skip | stmts2.go:31:10:31:12 | gen | | stmts2.go:31:10:31:12 | gen | stmts2.go:31:10:31:14 | call to gen | +| stmts2.go:31:10:31:14 | call to gen | stmts2.go:30:1:34:1 | exit | | stmts2.go:31:10:31:14 | call to gen | stmts2.go:31:2:31:14 | ... := ...[0] | -| stmts2.go:31:10:31:14 | call to gen | stmts2.go:34:1:34:1 | exit | | stmts2.go:32:6:32:6 | assignment to y | stmts2.go:32:6:32:17 | value declaration specifier[1] | | stmts2.go:32:6:32:6 | skip | stmts2.go:32:9:32:9 | skip | | stmts2.go:32:6:32:17 | value declaration specifier[0] | stmts2.go:32:6:32:6 | assignment to y | | stmts2.go:32:6:32:17 | value declaration specifier[1] | stmts2.go:33:9:33:9 | x | | stmts2.go:32:9:32:9 | skip | stmts2.go:32:13:32:15 | gen | | stmts2.go:32:13:32:15 | gen | stmts2.go:32:13:32:17 | call to gen | +| stmts2.go:32:13:32:17 | call to gen | stmts2.go:30:1:34:1 | exit | | stmts2.go:32:13:32:17 | call to gen | stmts2.go:32:6:32:17 | value declaration specifier[0] | -| stmts2.go:32:13:32:17 | call to gen | stmts2.go:34:1:34:1 | exit | -| stmts2.go:33:2:33:13 | return statement | stmts2.go:34:1:34:1 | exit | +| stmts2.go:33:2:33:13 | return statement | stmts2.go:30:1:34:1 | exit | | stmts2.go:33:9:33:9 | x | stmts2.go:33:13:33:13 | y | | stmts2.go:33:9:33:13 | ...+... | stmts2.go:33:2:33:13 | return statement | | stmts2.go:33:13:33:13 | y | stmts2.go:33:9:33:13 | ...+... | | stmts3.go:0:0:0:0 | entry | stmts3.go:3:1:3:13 | skip | | stmts3.go:3:1:3:13 | skip | stmts3.go:5:6:5:11 | skip | -| stmts3.go:5:1:5:1 | entry | stmts3.go:7:3:7:5 | skip | +| stmts3.go:5:1:12:1 | entry | stmts3.go:7:3:7:5 | skip | | stmts3.go:5:1:12:1 | function declaration | stmts3.go:14:6:14:11 | skip | | stmts3.go:5:6:5:11 | skip | stmts3.go:5:1:12:1 | function declaration | | stmts3.go:7:3:7:5 | assignment to red | stmts3.go:8:3:8:7 | skip | @@ -1017,26 +1017,26 @@ | stmts3.go:9:3:9:6 | assignment to blue | stmts3.go:11:9:11:26 | ...-... | | stmts3.go:9:3:9:6 | skip | stmts3.go:9:3:9:6 | zero value for blue | | stmts3.go:9:3:9:6 | zero value for blue | stmts3.go:9:3:9:6 | assignment to blue | -| stmts3.go:11:2:11:26 | return statement | stmts3.go:12:1:12:1 | exit | +| stmts3.go:11:2:11:26 | return statement | stmts3.go:5:1:12:1 | exit | | stmts3.go:11:9:11:26 | ...-... | stmts3.go:11:2:11:26 | return statement | -| stmts3.go:14:1:14:1 | entry | stmts3.go:14:13:14:13 | argument corresponding to x | +| stmts3.go:14:1:16:1 | entry | stmts3.go:14:13:14:13 | argument corresponding to x | | stmts3.go:14:1:16:1 | function declaration | stmts3.go:18:6:18:11 | skip | | stmts3.go:14:6:14:11 | skip | stmts3.go:14:1:16:1 | function declaration | | stmts3.go:14:13:14:13 | argument corresponding to x | stmts3.go:14:13:14:13 | initialization of x | | stmts3.go:14:13:14:13 | initialization of x | stmts3.go:15:3:15:3 | x | -| stmts3.go:15:2:15:3 | assignment to star expression | stmts3.go:16:1:16:1 | exit | +| stmts3.go:15:2:15:3 | assignment to star expression | stmts3.go:14:1:16:1 | exit | +| stmts3.go:15:2:15:3 | skip | stmts3.go:14:1:16:1 | exit | | stmts3.go:15:2:15:3 | skip | stmts3.go:15:7:15:8 | 42 | -| stmts3.go:15:2:15:3 | skip | stmts3.go:16:1:16:1 | exit | | stmts3.go:15:3:15:3 | x | stmts3.go:15:2:15:3 | skip | | stmts3.go:15:7:15:8 | 42 | stmts3.go:15:2:15:3 | assignment to star expression | -| stmts3.go:18:1:18:1 | entry | stmts3.go:19:2:19:11 | skip | +| stmts3.go:18:1:20:1 | entry | stmts3.go:19:2:19:11 | skip | | stmts3.go:18:1:20:1 | function declaration | stmts3.go:0:0:0:0 | exit | | stmts3.go:18:6:18:11 | skip | stmts3.go:18:1:20:1 | function declaration | -| stmts3.go:19:2:19:11 | assignment to Usage | stmts3.go:20:1:20:1 | exit | +| stmts3.go:19:2:19:11 | assignment to Usage | stmts3.go:18:1:20:1 | exit | | stmts3.go:19:2:19:11 | skip | stmts3.go:19:15:19:23 | function literal | -| stmts3.go:19:15:19:15 | entry | stmts3.go:19:22:19:23 | skip | +| stmts3.go:19:15:19:23 | entry | stmts3.go:19:22:19:23 | skip | | stmts3.go:19:15:19:23 | function literal | stmts3.go:19:2:19:11 | assignment to Usage | -| stmts3.go:19:22:19:23 | skip | stmts3.go:19:23:19:23 | exit | +| stmts3.go:19:22:19:23 | skip | stmts3.go:19:15:19:23 | exit | | stmts4.go:0:0:0:0 | entry | stmts4.go:3:5:3:5 | skip | | stmts4.go:3:5:3:5 | skip | stmts4.go:3:5:3:5 | zero value for _ | | stmts4.go:3:5:3:5 | zero value for _ | stmts4.go:5:6:5:11 | skip | @@ -1044,7 +1044,7 @@ | stmts4.go:5:6:5:11 | skip | stmts4.go:5:1:5:26 | function declaration | | stmts5.go:0:0:0:0 | entry | stmts5.go:3:1:5:1 | skip | | stmts5.go:3:1:5:1 | skip | stmts5.go:7:17:7:20 | skip | -| stmts5.go:7:1:7:1 | entry | stmts5.go:7:7:7:8 | argument corresponding to me | +| stmts5.go:7:1:9:1 | entry | stmts5.go:7:7:7:8 | argument corresponding to me | | stmts5.go:7:1:9:1 | function declaration | stmts5.go:11:14:11:16 | skip | | stmts5.go:7:7:7:8 | argument corresponding to me | stmts5.go:7:7:7:8 | initialization of me | | stmts5.go:7:7:7:8 | initialization of me | stmts5.go:7:22:7:26 | argument corresponding to other | @@ -1052,27 +1052,27 @@ | stmts5.go:7:22:7:26 | argument corresponding to other | stmts5.go:7:22:7:26 | initialization of other | | stmts5.go:7:22:7:26 | initialization of other | stmts5.go:8:2:8:3 | me | | stmts5.go:8:2:8:3 | me | stmts5.go:8:2:8:7 | selection of val | -| stmts5.go:8:2:8:7 | assignment to field val | stmts5.go:9:1:9:1 | exit | +| stmts5.go:8:2:8:7 | assignment to field val | stmts5.go:7:1:9:1 | exit | | stmts5.go:8:2:8:7 | selection of val | stmts5.go:8:12:8:16 | other | | stmts5.go:8:2:8:16 | ... += ... | stmts5.go:8:2:8:7 | assignment to field val | | stmts5.go:8:12:8:16 | other | stmts5.go:8:2:8:16 | ... += ... | -| stmts5.go:11:1:11:1 | entry | stmts5.go:11:20:12:1 | skip | +| stmts5.go:11:1:12:1 | entry | stmts5.go:11:20:12:1 | skip | | stmts5.go:11:1:12:1 | function declaration | stmts5.go:0:0:0:0 | exit | | stmts5.go:11:14:11:16 | skip | stmts5.go:11:1:12:1 | function declaration | -| stmts5.go:11:20:12:1 | skip | stmts5.go:12:1:12:1 | exit | +| stmts5.go:11:20:12:1 | skip | stmts5.go:11:1:12:1 | exit | | stmts6.go:0:0:0:0 | entry | stmts6.go:3:6:3:11 | skip | -| stmts6.go:3:1:3:1 | entry | stmts6.go:4:5:4:8 | true | +| stmts6.go:3:1:8:1 | entry | stmts6.go:4:5:4:8 | true | | stmts6.go:3:1:8:1 | function declaration | stmts6.go:0:0:0:0 | exit | | stmts6.go:3:6:3:11 | skip | stmts6.go:3:1:8:1 | function declaration | -| stmts6.go:4:5:4:8 | true | stmts6.go:4:8:4:8 | true is true | -| stmts6.go:4:8:4:8 | true is false | stmts6.go:7:9:7:10 | 23 | -| stmts6.go:4:8:4:8 | true is true | stmts6.go:5:10:5:11 | 42 | -| stmts6.go:5:3:5:11 | return statement | stmts6.go:8:1:8:1 | exit | +| stmts6.go:4:5:4:8 | true | stmts6.go:4:5:4:8 | true is true | +| stmts6.go:4:5:4:8 | true is false | stmts6.go:7:9:7:10 | 23 | +| stmts6.go:4:5:4:8 | true is true | stmts6.go:5:10:5:11 | 42 | +| stmts6.go:5:3:5:11 | return statement | stmts6.go:3:1:8:1 | exit | | stmts6.go:5:10:5:11 | 42 | stmts6.go:5:3:5:11 | return statement | | stmts6.go:7:9:7:10 | 23 | stmts6.go:7:2:7:10 | return statement | | stmts7.go:0:0:0:0 | entry | stmts7.go:3:1:3:12 | skip | | stmts7.go:3:1:3:12 | skip | stmts7.go:5:6:5:17 | skip | -| stmts7.go:5:1:5:1 | entry | stmts7.go:6:2:6:5 | skip | +| stmts7.go:5:1:8:1 | entry | stmts7.go:6:2:6:5 | skip | | stmts7.go:5:1:8:1 | function declaration | stmts7.go:10:6:10:15 | skip | | stmts7.go:5:6:5:17 | skip | stmts7.go:5:1:8:1 | function declaration | | stmts7.go:6:2:6:5 | assignment to blah | stmts7.go:7:2:7:12 | selection of Println | @@ -1080,30 +1080,30 @@ | stmts7.go:6:10:6:16 | recover | stmts7.go:6:10:6:18 | call to recover | | stmts7.go:6:10:6:18 | call to recover | stmts7.go:6:2:6:5 | assignment to blah | | stmts7.go:7:2:7:12 | selection of Println | stmts7.go:7:14:7:26 | "recovered: " | -| stmts7.go:7:2:7:33 | call to Println | stmts7.go:8:1:8:1 | exit | +| stmts7.go:7:2:7:33 | call to Println | stmts7.go:5:1:8:1 | exit | | stmts7.go:7:14:7:26 | "recovered: " | stmts7.go:7:29:7:32 | blah | | stmts7.go:7:29:7:32 | blah | stmts7.go:7:2:7:33 | call to Println | -| stmts7.go:10:1:10:1 | entry | stmts7.go:11:8:11:19 | recoverPanic | +| stmts7.go:10:1:13:1 | entry | stmts7.go:11:8:11:19 | recoverPanic | | stmts7.go:10:1:13:1 | function declaration | stmts7.go:15:1:17:1 | skip | | stmts7.go:10:6:10:15 | skip | stmts7.go:10:1:13:1 | function declaration | | stmts7.go:11:2:11:21 | defer statement | stmts7.go:12:2:12:6 | panic | | stmts7.go:11:8:11:19 | recoverPanic | stmts7.go:11:2:11:21 | defer statement | -| stmts7.go:11:8:11:21 | call to recoverPanic | stmts7.go:13:1:13:1 | exit | +| stmts7.go:11:8:11:21 | call to recoverPanic | stmts7.go:10:1:13:1 | exit | | stmts7.go:12:2:12:6 | panic | stmts7.go:12:8:12:9 | "" | | stmts7.go:12:2:12:10 | call to panic | stmts7.go:11:8:11:21 | call to recoverPanic | | stmts7.go:12:8:12:9 | "" | stmts7.go:12:2:12:10 | call to panic | | stmts7.go:15:1:17:1 | skip | stmts7.go:19:26:19:28 | skip | -| stmts7.go:19:1:19:1 | entry | stmts7.go:19:7:19:13 | argument corresponding to methods | +| stmts7.go:19:1:21:1 | entry | stmts7.go:19:7:19:13 | argument corresponding to methods | | stmts7.go:19:1:21:1 | function declaration | stmts7.go:23:6:23:14 | skip | | stmts7.go:19:7:19:13 | argument corresponding to methods | stmts7.go:19:7:19:13 | initialization of methods | | stmts7.go:19:7:19:13 | initialization of methods | stmts7.go:20:2:20:8 | methods | | stmts7.go:19:26:19:28 | skip | stmts7.go:19:1:21:1 | function declaration | +| stmts7.go:20:2:20:8 | implicit dereference | stmts7.go:19:1:21:1 | exit | | stmts7.go:20:2:20:8 | implicit dereference | stmts7.go:20:2:20:11 | selection of fn | -| stmts7.go:20:2:20:8 | implicit dereference | stmts7.go:21:1:21:1 | exit | | stmts7.go:20:2:20:8 | methods | stmts7.go:20:2:20:8 | implicit dereference | | stmts7.go:20:2:20:11 | selection of fn | stmts7.go:20:2:20:13 | call to fn | -| stmts7.go:20:2:20:13 | call to fn | stmts7.go:21:1:21:1 | exit | -| stmts7.go:23:1:23:1 | entry | stmts7.go:23:16:23:23 | argument corresponding to callback | +| stmts7.go:20:2:20:13 | call to fn | stmts7.go:19:1:21:1 | exit | +| stmts7.go:23:1:28:1 | entry | stmts7.go:23:16:23:23 | argument corresponding to callback | | stmts7.go:23:1:28:1 | function declaration | stmts7.go:0:0:0:0 | exit | | stmts7.go:23:6:23:14 | skip | stmts7.go:23:1:28:1 | function declaration | | stmts7.go:23:16:23:23 | argument corresponding to callback | stmts7.go:23:16:23:23 | initialization of callback | @@ -1111,7 +1111,7 @@ | stmts7.go:24:2:24:20 | defer statement | stmts7.go:25:10:25:17 | callback | | stmts7.go:24:8:24:15 | callback | stmts7.go:24:8:24:18 | selection of fn | | stmts7.go:24:8:24:18 | selection of fn | stmts7.go:24:2:24:20 | defer statement | -| stmts7.go:24:8:24:20 | call to fn | stmts7.go:28:1:28:1 | exit | +| stmts7.go:24:8:24:20 | call to fn | stmts7.go:23:1:28:1 | exit | | stmts7.go:25:2:25:23 | defer statement | stmts7.go:26:2:26:12 | selection of Println | | stmts7.go:25:8:25:18 | implicit dereference | stmts7.go:24:8:24:20 | call to fn | | stmts7.go:25:8:25:18 | implicit dereference | stmts7.go:25:8:25:21 | selection of fn | @@ -1126,7 +1126,7 @@ | stmts7.go:27:2:27:13 | return statement | stmts7.go:25:8:25:23 | call to fn | | stmts7.go:27:9:27:13 | false | stmts7.go:27:2:27:13 | return statement | | stmts8.go:0:0:0:0 | entry | stmts8.go:3:6:3:11 | skip | -| stmts8.go:3:1:3:1 | entry | stmts8.go:3:13:3:13 | argument corresponding to x | +| stmts8.go:3:1:7:1 | entry | stmts8.go:3:13:3:13 | argument corresponding to x | | stmts8.go:3:1:7:1 | function declaration | stmts8.go:9:6:9:12 | skip | | stmts8.go:3:6:3:11 | skip | stmts8.go:3:1:7:1 | function declaration | | stmts8.go:3:13:3:13 | argument corresponding to x | stmts8.go:3:13:3:13 | initialization of x | @@ -1141,53 +1141,53 @@ | stmts8.go:5:7:5:7 | x | stmts8.go:5:12:5:12 | 1 | | stmts8.go:5:7:5:13 | ...%... | stmts8.go:5:2:5:2 | assignment to z | | stmts8.go:5:12:5:12 | 1 | stmts8.go:5:7:5:13 | ...%... | -| stmts8.go:6:2:6:17 | return statement | stmts8.go:7:1:7:1 | exit | +| stmts8.go:6:2:6:17 | return statement | stmts8.go:3:1:7:1 | exit | | stmts8.go:6:9:6:9 | z | stmts8.go:6:12:6:12 | y | | stmts8.go:6:12:6:12 | y | stmts8.go:6:16:6:17 | 13 | | stmts8.go:6:12:6:17 | ...%... | stmts8.go:6:2:6:17 | return statement | | stmts8.go:6:16:6:17 | 13 | stmts8.go:6:12:6:17 | ...%... | -| stmts8.go:9:1:9:1 | entry | stmts8.go:10:5:10:9 | linux | +| stmts8.go:9:1:14:1 | entry | stmts8.go:10:5:10:9 | linux | | stmts8.go:9:1:14:1 | function declaration | stmts8.go:0:0:0:0 | exit | | stmts8.go:9:6:9:12 | skip | stmts8.go:9:1:14:1 | function declaration | -| stmts8.go:10:5:10:9 | linux | stmts8.go:10:9:10:9 | linux is false | -| stmts8.go:10:5:10:9 | linux | stmts8.go:10:9:10:9 | linux is true | -| stmts8.go:10:9:10:9 | linux is false | stmts8.go:13:9:13:13 | false | -| stmts8.go:10:9:10:9 | linux is true | stmts8.go:11:10:11:13 | true | -| stmts8.go:11:3:11:13 | return statement | stmts8.go:14:1:14:1 | exit | +| stmts8.go:10:5:10:9 | linux | stmts8.go:10:5:10:9 | linux is false | +| stmts8.go:10:5:10:9 | linux | stmts8.go:10:5:10:9 | linux is true | +| stmts8.go:10:5:10:9 | linux is false | stmts8.go:13:9:13:13 | false | +| stmts8.go:10:5:10:9 | linux is true | stmts8.go:11:10:11:13 | true | +| stmts8.go:11:3:11:13 | return statement | stmts8.go:9:1:14:1 | exit | | stmts8.go:11:10:11:13 | true | stmts8.go:11:3:11:13 | return statement | -| stmts8.go:13:2:13:13 | return statement | stmts8.go:14:1:14:1 | exit | +| stmts8.go:13:2:13:13 | return statement | stmts8.go:9:1:14:1 | exit | | stmts8.go:13:9:13:13 | false | stmts8.go:13:2:13:13 | return statement | | stmts.go:0:0:0:0 | entry | stmts.go:3:1:3:12 | skip | | stmts.go:3:1:3:12 | skip | stmts.go:10:6:10:10 | skip | -| stmts.go:10:1:10:1 | entry | stmts.go:10:12:10:12 | argument corresponding to b | +| stmts.go:10:1:43:1 | entry | stmts.go:10:12:10:12 | argument corresponding to b | | stmts.go:10:1:43:1 | function declaration | stmts.go:46:6:46:10 | skip | | stmts.go:10:6:10:10 | skip | stmts.go:10:1:43:1 | function declaration | | stmts.go:10:12:10:12 | argument corresponding to b | stmts.go:10:12:10:12 | initialization of b | | stmts.go:10:12:10:12 | initialization of b | stmts.go:12:7:12:7 | b | -| stmts.go:12:6:12:7 | !... | stmts.go:12:7:12:7 | !... is false | -| stmts.go:12:6:12:7 | !... | stmts.go:12:7:12:7 | !... is true | -| stmts.go:12:7:12:7 | !... is false | stmts.go:15:3:16:3 | skip | -| stmts.go:12:7:12:7 | !... is true | stmts.go:13:4:13:13 | skip | +| stmts.go:12:6:12:7 | !... | stmts.go:12:6:12:7 | !... is false | +| stmts.go:12:6:12:7 | !... | stmts.go:12:6:12:7 | !... is true | +| stmts.go:12:6:12:7 | !... is false | stmts.go:15:3:16:3 | skip | +| stmts.go:12:6:12:7 | !... is true | stmts.go:13:4:13:13 | skip | | stmts.go:12:7:12:7 | b | stmts.go:12:6:12:7 | !... | | stmts.go:13:4:13:13 | skip | stmts.go:23:6:23:9 | true | | stmts.go:15:3:16:3 | skip | stmts.go:17:3:17:3 | skip | | stmts.go:17:3:17:3 | skip | stmts.go:20:2:20:12 | selection of Println | | stmts.go:20:2:20:12 | selection of Println | stmts.go:20:14:20:17 | "Hi" | +| stmts.go:20:2:20:18 | call to Println | stmts.go:10:1:43:1 | exit | | stmts.go:20:2:20:18 | call to Println | stmts.go:23:6:23:9 | true | -| stmts.go:20:2:20:18 | call to Println | stmts.go:43:1:43:1 | exit | | stmts.go:20:14:20:17 | "Hi" | stmts.go:20:2:20:18 | call to Println | -| stmts.go:23:6:23:9 | true | stmts.go:23:9:23:9 | true is true | -| stmts.go:23:9:23:9 | true is false | stmts.go:39:2:39:2 | skip | -| stmts.go:23:9:23:9 | true is true | stmts.go:24:7:24:7 | skip | +| stmts.go:23:6:23:9 | true | stmts.go:23:6:23:9 | true is true | +| stmts.go:23:6:23:9 | true is false | stmts.go:39:2:39:2 | skip | +| stmts.go:23:6:23:9 | true is true | stmts.go:24:7:24:7 | skip | | stmts.go:24:7:24:7 | assignment to i | stmts.go:24:15:24:15 | i | | stmts.go:24:7:24:7 | skip | stmts.go:24:12:24:12 | 0 | | stmts.go:24:12:24:12 | 0 | stmts.go:24:7:24:7 | assignment to i | | stmts.go:24:15:24:15 | i | stmts.go:24:19:24:20 | 10 | -| stmts.go:24:15:24:20 | ...<... | stmts.go:24:20:24:20 | ...<... is false | -| stmts.go:24:15:24:20 | ...<... | stmts.go:24:20:24:20 | ...<... is true | +| stmts.go:24:15:24:20 | ...<... | stmts.go:24:15:24:20 | ...<... is false | +| stmts.go:24:15:24:20 | ...<... | stmts.go:24:15:24:20 | ...<... is true | +| stmts.go:24:15:24:20 | ...<... is false | stmts.go:23:6:23:9 | true | +| stmts.go:24:15:24:20 | ...<... is true | stmts.go:25:7:25:7 | skip | | stmts.go:24:19:24:20 | 10 | stmts.go:24:15:24:20 | ...<... | -| stmts.go:24:20:24:20 | ...<... is false | stmts.go:23:6:23:9 | true | -| stmts.go:24:20:24:20 | ...<... is true | stmts.go:25:7:25:7 | skip | | stmts.go:24:23:24:23 | i | stmts.go:24:23:24:25 | 1 | | stmts.go:24:23:24:25 | 1 | stmts.go:24:23:24:25 | rhs of increment statement | | stmts.go:24:23:24:25 | increment statement | stmts.go:24:15:24:15 | i | @@ -1198,32 +1198,32 @@ | stmts.go:25:12:25:16 | ...-... | stmts.go:25:7:25:7 | assignment to j | | stmts.go:25:16:25:16 | 1 | stmts.go:25:12:25:16 | ...-... | | stmts.go:25:19:25:19 | j | stmts.go:25:23:25:23 | 5 | -| stmts.go:25:19:25:23 | ...>... | stmts.go:25:23:25:23 | ...>... is false | -| stmts.go:25:19:25:23 | ...>... | stmts.go:25:23:25:23 | ...>... is true | +| stmts.go:25:19:25:23 | ...>... | stmts.go:25:19:25:23 | ...>... is false | +| stmts.go:25:19:25:23 | ...>... | stmts.go:25:19:25:23 | ...>... is true | +| stmts.go:25:19:25:23 | ...>... is false | stmts.go:27:14:27:14 | i | +| stmts.go:25:19:25:23 | ...>... is true | stmts.go:26:5:26:15 | skip | | stmts.go:25:23:25:23 | 5 | stmts.go:25:19:25:23 | ...>... | -| stmts.go:25:23:25:23 | ...>... is false | stmts.go:27:14:27:14 | i | -| stmts.go:25:23:25:23 | ...>... is true | stmts.go:26:5:26:15 | skip | | stmts.go:26:5:26:15 | skip | stmts.go:39:2:39:2 | skip | | stmts.go:27:14:27:14 | i | stmts.go:27:18:27:18 | 3 | -| stmts.go:27:14:27:18 | ...<... | stmts.go:27:18:27:18 | ...<... is false | -| stmts.go:27:14:27:18 | ...<... | stmts.go:27:18:27:18 | ...<... is true | +| stmts.go:27:14:27:18 | ...<... | stmts.go:27:14:27:18 | ...<... is false | +| stmts.go:27:14:27:18 | ...<... | stmts.go:27:14:27:18 | ...<... is true | +| stmts.go:27:14:27:18 | ...<... is false | stmts.go:29:14:29:14 | i | +| stmts.go:27:14:27:18 | ...<... is true | stmts.go:28:5:28:9 | skip | | stmts.go:27:18:27:18 | 3 | stmts.go:27:14:27:18 | ...<... | -| stmts.go:27:18:27:18 | ...<... is false | stmts.go:29:14:29:14 | i | -| stmts.go:27:18:27:18 | ...<... is true | stmts.go:28:5:28:9 | skip | | stmts.go:28:5:28:9 | skip | stmts.go:23:6:23:9 | true | | stmts.go:29:14:29:14 | i | stmts.go:29:19:29:19 | 9 | -| stmts.go:29:14:29:19 | ...!=... | stmts.go:29:19:29:19 | ...!=... is false | -| stmts.go:29:14:29:19 | ...!=... | stmts.go:29:19:29:19 | ...!=... is true | +| stmts.go:29:14:29:19 | ...!=... | stmts.go:29:14:29:19 | ...!=... is false | +| stmts.go:29:14:29:19 | ...!=... | stmts.go:29:14:29:19 | ...!=... is true | +| stmts.go:29:14:29:19 | ...!=... is false | stmts.go:31:14:31:14 | i | +| stmts.go:29:14:29:19 | ...!=... is true | stmts.go:30:5:30:18 | skip | | stmts.go:29:19:29:19 | 9 | stmts.go:29:14:29:19 | ...!=... | -| stmts.go:29:19:29:19 | ...!=... is false | stmts.go:31:14:31:14 | i | -| stmts.go:29:19:29:19 | ...!=... is true | stmts.go:30:5:30:18 | skip | | stmts.go:30:5:30:18 | skip | stmts.go:23:6:23:9 | true | | stmts.go:31:14:31:14 | i | stmts.go:31:19:31:19 | 4 | -| stmts.go:31:14:31:19 | ...>=... | stmts.go:31:19:31:19 | ...>=... is false | -| stmts.go:31:14:31:19 | ...>=... | stmts.go:31:19:31:19 | ...>=... is true | +| stmts.go:31:14:31:19 | ...>=... | stmts.go:31:14:31:19 | ...>=... is false | +| stmts.go:31:14:31:19 | ...>=... | stmts.go:31:14:31:19 | ...>=... is true | +| stmts.go:31:14:31:19 | ...>=... is false | stmts.go:34:5:34:12 | skip | +| stmts.go:31:14:31:19 | ...>=... is true | stmts.go:32:5:32:14 | skip | | stmts.go:31:19:31:19 | 4 | stmts.go:31:14:31:19 | ...>=... | -| stmts.go:31:19:31:19 | ...>=... is false | stmts.go:34:5:34:12 | skip | -| stmts.go:31:19:31:19 | ...>=... is true | stmts.go:32:5:32:14 | skip | | stmts.go:32:5:32:14 | skip | stmts.go:23:6:23:9 | true | | stmts.go:34:5:34:12 | skip | stmts.go:24:23:24:23 | i | | stmts.go:39:2:39:2 | assignment to k | stmts.go:41:3:41:12 | skip | @@ -1234,7 +1234,7 @@ | stmts.go:40:10:40:12 | increment statement | stmts.go:41:3:41:12 | skip | | stmts.go:40:10:40:12 | rhs of increment statement | stmts.go:40:10:40:12 | increment statement | | stmts.go:41:3:41:12 | skip | stmts.go:23:6:23:9 | true | -| stmts.go:46:1:46:1 | entry | stmts.go:46:12:46:14 | argument corresponding to ch1 | +| stmts.go:46:1:62:1 | entry | stmts.go:46:12:46:14 | argument corresponding to ch1 | | stmts.go:46:1:62:1 | function declaration | stmts.go:65:6:65:10 | skip | | stmts.go:46:6:46:10 | skip | stmts.go:46:1:62:1 | function declaration | | stmts.go:46:12:46:14 | argument corresponding to ch1 | stmts.go:46:12:46:14 | initialization of ch1 | @@ -1254,13 +1254,13 @@ | stmts.go:51:7:51:11 | <-... | stmts.go:52:3:52:13 | selection of Println | | stmts.go:51:9:51:11 | ch1 | stmts.go:53:19:53:21 | ch2 | | stmts.go:52:3:52:13 | selection of Println | stmts.go:52:15:52:30 | "Heard from ch1" | +| stmts.go:52:3:52:31 | call to Println | stmts.go:46:1:62:1 | exit | | stmts.go:52:3:52:31 | call to Println | stmts.go:61:2:61:10 | select statement | -| stmts.go:52:3:52:31 | call to Println | stmts.go:62:1:62:1 | exit | | stmts.go:52:15:52:30 | "Heard from ch1" | stmts.go:52:3:52:31 | call to Println | | stmts.go:53:7:53:7 | a | stmts.go:53:9:53:9 | 0 | | stmts.go:53:7:53:10 | assignment to element | stmts.go:53:7:53:21 | ... = ...[1] | +| stmts.go:53:7:53:10 | skip | stmts.go:46:1:62:1 | exit | | stmts.go:53:7:53:10 | skip | stmts.go:53:13:53:13 | skip | -| stmts.go:53:7:53:10 | skip | stmts.go:62:1:62:1 | exit | | stmts.go:53:7:53:21 | ... = ...[0] | stmts.go:53:7:53:10 | assignment to element | | stmts.go:53:7:53:21 | ... = ...[1] | stmts.go:53:13:53:13 | assignment to w | | stmts.go:53:9:53:9 | 0 | stmts.go:53:7:53:10 | skip | @@ -1269,51 +1269,51 @@ | stmts.go:53:17:53:21 | <-... | stmts.go:53:7:53:7 | a | | stmts.go:53:19:53:21 | ch2 | stmts.go:58:7:58:9 | ch1 | | stmts.go:54:3:54:13 | selection of Println | stmts.go:54:15:54:15 | a | +| stmts.go:54:3:54:16 | call to Println | stmts.go:46:1:62:1 | exit | | stmts.go:54:3:54:16 | call to Println | stmts.go:55:3:55:13 | selection of Println | -| stmts.go:54:3:54:16 | call to Println | stmts.go:62:1:62:1 | exit | | stmts.go:54:15:54:15 | a | stmts.go:54:3:54:16 | call to Println | | stmts.go:55:3:55:13 | selection of Println | stmts.go:55:15:55:15 | w | +| stmts.go:55:3:55:16 | call to Println | stmts.go:46:1:62:1 | exit | | stmts.go:55:3:55:16 | call to Println | stmts.go:61:2:61:10 | select statement | -| stmts.go:55:3:55:16 | call to Println | stmts.go:62:1:62:1 | exit | | stmts.go:55:15:55:15 | w | stmts.go:55:3:55:16 | call to Println | | stmts.go:57:3:57:13 | selection of Println | stmts.go:57:3:57:15 | call to Println | +| stmts.go:57:3:57:15 | call to Println | stmts.go:46:1:62:1 | exit | | stmts.go:57:3:57:15 | call to Println | stmts.go:61:2:61:10 | select statement | -| stmts.go:57:3:57:15 | call to Println | stmts.go:62:1:62:1 | exit | | stmts.go:58:2:58:16 | skip | stmts.go:61:2:61:10 | select statement | | stmts.go:58:7:58:9 | ch1 | stmts.go:58:14:58:15 | 42 | +| stmts.go:58:7:58:15 | send statement | stmts.go:46:1:62:1 | exit | | stmts.go:58:7:58:15 | send statement | stmts.go:58:2:58:16 | skip | -| stmts.go:58:7:58:15 | send statement | stmts.go:62:1:62:1 | exit | | stmts.go:58:14:58:15 | 42 | stmts.go:50:2:59:2 | select statement | -| stmts.go:65:1:65:1 | entry | stmts.go:65:12:65:12 | argument corresponding to x | +| stmts.go:65:1:72:1 | entry | stmts.go:65:12:65:12 | argument corresponding to x | | stmts.go:65:1:72:1 | function declaration | stmts.go:75:6:75:10 | skip | | stmts.go:65:6:65:10 | skip | stmts.go:65:1:72:1 | function declaration | | stmts.go:65:12:65:12 | argument corresponding to x | stmts.go:65:12:65:12 | initialization of x | | stmts.go:65:12:65:12 | initialization of x | stmts.go:66:5:66:5 | x | | stmts.go:66:5:66:5 | x | stmts.go:66:9:66:9 | 0 | -| stmts.go:66:5:66:9 | ...>... | stmts.go:66:9:66:9 | ...>... is false | -| stmts.go:66:5:66:9 | ...>... | stmts.go:66:9:66:9 | ...>... is true | +| stmts.go:66:5:66:9 | ...>... | stmts.go:66:5:66:9 | ...>... is false | +| stmts.go:66:5:66:9 | ...>... | stmts.go:66:5:66:9 | ...>... is true | +| stmts.go:66:5:66:9 | ...>... is false | stmts.go:69:9:69:34 | function literal | +| stmts.go:66:5:66:9 | ...>... is true | stmts.go:67:9:67:33 | function literal | | stmts.go:66:9:66:9 | 0 | stmts.go:66:5:66:9 | ...>... | -| stmts.go:66:9:66:9 | ...>... is false | stmts.go:69:9:69:34 | function literal | -| stmts.go:66:9:66:9 | ...>... is true | stmts.go:67:9:67:33 | function literal | | stmts.go:67:3:67:35 | defer statement | stmts.go:71:9:71:10 | 42 | -| stmts.go:67:9:67:9 | entry | stmts.go:67:18:67:28 | selection of Println | +| stmts.go:67:9:67:33 | entry | stmts.go:67:18:67:28 | selection of Println | | stmts.go:67:9:67:33 | function literal | stmts.go:67:3:67:35 | defer statement | -| stmts.go:67:9:67:35 | function call | stmts.go:72:1:72:1 | exit | +| stmts.go:67:9:67:35 | function call | stmts.go:65:1:72:1 | exit | | stmts.go:67:18:67:28 | selection of Println | stmts.go:67:30:67:30 | x | -| stmts.go:67:18:67:31 | call to Println | stmts.go:67:33:67:33 | exit | +| stmts.go:67:18:67:31 | call to Println | stmts.go:67:9:67:33 | exit | | stmts.go:67:30:67:30 | x | stmts.go:67:18:67:31 | call to Println | | stmts.go:69:3:69:36 | defer statement | stmts.go:71:9:71:10 | 42 | -| stmts.go:69:9:69:9 | entry | stmts.go:69:18:69:28 | selection of Println | +| stmts.go:69:9:69:34 | entry | stmts.go:69:18:69:28 | selection of Println | | stmts.go:69:9:69:34 | function literal | stmts.go:69:3:69:36 | defer statement | -| stmts.go:69:9:69:36 | function call | stmts.go:72:1:72:1 | exit | +| stmts.go:69:9:69:36 | function call | stmts.go:65:1:72:1 | exit | | stmts.go:69:18:69:28 | selection of Println | stmts.go:69:31:69:31 | x | -| stmts.go:69:18:69:32 | call to Println | stmts.go:69:34:69:34 | exit | +| stmts.go:69:18:69:32 | call to Println | stmts.go:69:9:69:34 | exit | | stmts.go:69:30:69:31 | -... | stmts.go:69:18:69:32 | call to Println | | stmts.go:69:31:69:31 | x | stmts.go:69:30:69:31 | -... | | stmts.go:71:2:71:10 | return statement | stmts.go:67:9:67:35 | function call | | stmts.go:71:2:71:10 | return statement | stmts.go:69:9:69:36 | function call | | stmts.go:71:9:71:10 | 42 | stmts.go:71:2:71:10 | return statement | -| stmts.go:75:1:75:1 | entry | stmts.go:75:12:75:12 | argument corresponding to x | +| stmts.go:75:1:109:1 | entry | stmts.go:75:12:75:12 | argument corresponding to x | | stmts.go:75:1:109:1 | function declaration | stmts.go:112:6:112:10 | skip | | stmts.go:75:6:75:10 | skip | stmts.go:75:1:109:1 | function declaration | | stmts.go:75:12:75:12 | argument corresponding to x | stmts.go:75:12:75:12 | initialization of x | @@ -1326,7 +1326,7 @@ | stmts.go:79:17:79:22 | ...-... | stmts.go:81:3:81:7 | test5 | | stmts.go:79:21:79:22 | 19 | stmts.go:79:17:79:22 | ...-... | | stmts.go:81:3:81:7 | test5 | stmts.go:81:9:81:13 | false | -| stmts.go:81:3:81:14 | call to test5 | stmts.go:109:1:109:1 | exit | +| stmts.go:81:3:81:14 | call to test5 | stmts.go:75:1:109:1 | exit | | stmts.go:81:9:81:13 | false | stmts.go:81:3:81:14 | call to test5 | | stmts.go:84:9:84:9 | x | stmts.go:85:7:85:7 | 1 | | stmts.go:84:9:84:9 | x | stmts.go:90:9:90:9 | x | @@ -1356,19 +1356,19 @@ | stmts.go:95:3:95:7 | test5 | stmts.go:95:9:95:12 | true | | stmts.go:95:9:95:12 | true | stmts.go:95:3:95:13 | call to test5 | | stmts.go:98:9:98:9 | x | stmts.go:100:7:100:7 | 2 | -| stmts.go:99:2:99:9 | skip | stmts.go:104:2:104:2 | true | +| stmts.go:99:2:99:9 | skip | stmts.go:104:2:108:2 | true | | stmts.go:100:7:100:7 | 2 | stmts.go:100:7:100:7 | case 2 | | stmts.go:100:7:100:7 | case 2 | stmts.go:99:2:99:9 | skip | | stmts.go:100:7:100:7 | case 2 | stmts.go:101:3:101:7 | test5 | | stmts.go:101:3:101:7 | test5 | stmts.go:101:9:101:12 | true | | stmts.go:101:9:101:12 | true | stmts.go:101:3:101:13 | call to test5 | -| stmts.go:104:2:104:2 | true | stmts.go:107:7:107:10 | true | -| stmts.go:107:7:107:10 | case true | stmts.go:107:10:107:10 | true is false | -| stmts.go:107:7:107:10 | case true | stmts.go:107:10:107:10 | true is true | +| stmts.go:104:2:108:2 | true | stmts.go:107:7:107:10 | true | +| stmts.go:107:7:107:10 | case true | stmts.go:107:7:107:10 | true is false | +| stmts.go:107:7:107:10 | case true | stmts.go:107:7:107:10 | true is true | | stmts.go:107:7:107:10 | true | stmts.go:107:7:107:10 | case true | -| stmts.go:107:10:107:10 | true is false | stmts.go:106:3:106:7 | skip | -| stmts.go:107:10:107:10 | true is true | stmts.go:107:2:107:11 | skip | -| stmts.go:112:1:112:1 | entry | stmts.go:112:12:112:12 | argument corresponding to x | +| stmts.go:107:7:107:10 | true is false | stmts.go:106:3:106:7 | skip | +| stmts.go:107:7:107:10 | true is true | stmts.go:107:2:107:11 | skip | +| stmts.go:112:1:137:1 | entry | stmts.go:112:12:112:12 | argument corresponding to x | | stmts.go:112:1:137:1 | function declaration | stmts.go:140:6:140:11 | skip | | stmts.go:112:6:112:10 | skip | stmts.go:112:1:137:1 | function declaration | | stmts.go:112:12:112:12 | argument corresponding to x | stmts.go:112:12:112:12 | initialization of x | @@ -1383,14 +1383,14 @@ | stmts.go:114:14:114:19 | case string | stmts.go:114:2:115:16 | implicit type switch variable declaration | | stmts.go:114:14:114:19 | case string | stmts.go:116:7:116:13 | case float32 | | stmts.go:115:3:115:13 | selection of Println | stmts.go:115:15:115:15 | y | +| stmts.go:115:3:115:16 | call to Println | stmts.go:112:1:137:1 | exit | | stmts.go:115:3:115:16 | call to Println | stmts.go:123:9:123:9 | skip | -| stmts.go:115:3:115:16 | call to Println | stmts.go:137:1:137:1 | exit | | stmts.go:115:15:115:15 | y | stmts.go:115:3:115:16 | call to Println | | stmts.go:116:2:118:14 | implicit type switch variable declaration | stmts.go:117:3:117:7 | test5 | | stmts.go:116:7:116:13 | case float32 | stmts.go:116:2:118:14 | implicit type switch variable declaration | | stmts.go:116:7:116:13 | case float32 | stmts.go:119:2:120:7 | implicit type switch variable declaration | | stmts.go:117:3:117:7 | test5 | stmts.go:117:9:117:12 | true | -| stmts.go:117:3:117:13 | call to test5 | stmts.go:137:1:137:1 | exit | +| stmts.go:117:3:117:13 | call to test5 | stmts.go:112:1:137:1 | exit | | stmts.go:117:9:117:12 | true | stmts.go:117:3:117:13 | call to test5 | | stmts.go:118:3:118:7 | test5 | stmts.go:118:9:118:13 | false | | stmts.go:118:9:118:13 | false | stmts.go:118:3:118:14 | call to test5 | @@ -1407,13 +1407,13 @@ | stmts.go:124:14:124:19 | case string | stmts.go:125:3:125:13 | selection of Println | | stmts.go:124:14:124:19 | case string | stmts.go:126:7:126:13 | case float32 | | stmts.go:125:3:125:13 | selection of Println | stmts.go:125:15:125:15 | y | +| stmts.go:125:3:125:16 | call to Println | stmts.go:112:1:137:1 | exit | | stmts.go:125:3:125:16 | call to Println | stmts.go:133:9:133:9 | skip | -| stmts.go:125:3:125:16 | call to Println | stmts.go:137:1:137:1 | exit | | stmts.go:125:15:125:15 | y | stmts.go:125:3:125:16 | call to Println | | stmts.go:126:7:126:13 | case float32 | stmts.go:127:3:127:7 | test5 | | stmts.go:126:7:126:13 | case float32 | stmts.go:130:3:130:3 | skip | | stmts.go:127:3:127:7 | test5 | stmts.go:127:9:127:12 | true | -| stmts.go:127:3:127:13 | call to test5 | stmts.go:137:1:137:1 | exit | +| stmts.go:127:3:127:13 | call to test5 | stmts.go:112:1:137:1 | exit | | stmts.go:127:9:127:12 | true | stmts.go:127:3:127:13 | call to test5 | | stmts.go:128:3:128:7 | test5 | stmts.go:128:9:128:13 | false | | stmts.go:128:9:128:13 | false | stmts.go:128:3:128:14 | call to test5 | @@ -1425,16 +1425,16 @@ | stmts.go:133:17:133:17 | y | stmts.go:133:17:133:24 | type assertion | | stmts.go:133:17:133:24 | type assertion | stmts.go:135:3:135:7 | test5 | | stmts.go:135:3:135:7 | test5 | stmts.go:135:9:135:13 | false | -| stmts.go:135:3:135:14 | call to test5 | stmts.go:137:1:137:1 | exit | +| stmts.go:135:3:135:14 | call to test5 | stmts.go:112:1:137:1 | exit | | stmts.go:135:9:135:13 | false | stmts.go:135:3:135:14 | call to test5 | -| stmts.go:140:1:140:1 | entry | stmts.go:140:13:140:13 | argument corresponding to f | +| stmts.go:140:1:142:1 | entry | stmts.go:140:13:140:13 | argument corresponding to f | | stmts.go:140:1:142:1 | function declaration | stmts.go:145:6:145:11 | skip | | stmts.go:140:6:140:11 | skip | stmts.go:140:1:142:1 | function declaration | | stmts.go:140:13:140:13 | argument corresponding to f | stmts.go:140:13:140:13 | initialization of f | | stmts.go:140:13:140:13 | initialization of f | stmts.go:141:5:141:5 | f | -| stmts.go:141:2:141:7 | go statement | stmts.go:142:1:142:1 | exit | +| stmts.go:141:2:141:7 | go statement | stmts.go:140:1:142:1 | exit | | stmts.go:141:5:141:5 | f | stmts.go:141:2:141:7 | go statement | -| stmts.go:145:1:145:1 | entry | stmts.go:145:13:145:14 | argument corresponding to xs | +| stmts.go:145:1:159:1 | entry | stmts.go:145:13:145:14 | argument corresponding to xs | | stmts.go:145:1:159:1 | function declaration | stmts.go:0:0:0:0 | exit | | stmts.go:145:6:145:11 | skip | stmts.go:145:1:159:1 | function declaration | | stmts.go:145:13:145:14 | argument corresponding to xs | stmts.go:145:13:145:14 | initialization of xs | @@ -1446,15 +1446,15 @@ | stmts.go:146:17:146:18 | next key-value pair in range | stmts.go:153:20:153:21 | xs | | stmts.go:146:17:146:18 | xs | stmts.go:146:17:146:18 | next key-value pair in range | | stmts.go:147:6:147:6 | x | stmts.go:147:10:147:10 | 5 | -| stmts.go:147:6:147:10 | ...>... | stmts.go:147:10:147:10 | ...>... is false | -| stmts.go:147:6:147:10 | ...>... | stmts.go:147:10:147:10 | ...>... is true | +| stmts.go:147:6:147:10 | ...>... | stmts.go:147:6:147:10 | ...>... is false | +| stmts.go:147:6:147:10 | ...>... | stmts.go:147:6:147:10 | ...>... is true | +| stmts.go:147:6:147:10 | ...>... is false | stmts.go:150:3:150:11 | selection of Print | +| stmts.go:147:6:147:10 | ...>... is true | stmts.go:148:4:148:11 | skip | | stmts.go:147:10:147:10 | 5 | stmts.go:147:6:147:10 | ...>... | -| stmts.go:147:10:147:10 | ...>... is false | stmts.go:150:3:150:11 | selection of Print | -| stmts.go:147:10:147:10 | ...>... is true | stmts.go:148:4:148:11 | skip | | stmts.go:148:4:148:11 | skip | stmts.go:146:17:146:18 | next key-value pair in range | | stmts.go:150:3:150:11 | selection of Print | stmts.go:150:13:150:13 | x | +| stmts.go:150:3:150:14 | call to Print | stmts.go:145:1:159:1 | exit | | stmts.go:150:3:150:14 | call to Print | stmts.go:146:17:146:18 | next key-value pair in range | -| stmts.go:150:3:150:14 | call to Print | stmts.go:159:1:159:1 | exit | | stmts.go:150:13:150:13 | x | stmts.go:150:3:150:14 | call to Print | | stmts.go:153:2:155:2 | range statement[0] | stmts.go:153:2:155:2 | range statement[1] | | stmts.go:153:2:155:2 | range statement[1] | stmts.go:153:6:153:6 | assignment to i | @@ -1466,73 +1466,73 @@ | stmts.go:153:20:153:21 | next key-value pair in range | stmts.go:157:12:157:13 | xs | | stmts.go:153:20:153:21 | xs | stmts.go:153:20:153:21 | next key-value pair in range | | stmts.go:154:3:154:11 | selection of Print | stmts.go:154:13:154:13 | i | +| stmts.go:154:3:154:17 | call to Print | stmts.go:145:1:159:1 | exit | | stmts.go:154:3:154:17 | call to Print | stmts.go:153:20:153:21 | next key-value pair in range | -| stmts.go:154:3:154:17 | call to Print | stmts.go:159:1:159:1 | exit | | stmts.go:154:13:154:13 | i | stmts.go:154:16:154:16 | v | | stmts.go:154:16:154:16 | v | stmts.go:154:3:154:17 | call to Print | +| stmts.go:157:12:157:13 | next key-value pair in range | stmts.go:145:1:159:1 | exit | | stmts.go:157:12:157:13 | next key-value pair in range | stmts.go:157:15:158:2 | skip | -| stmts.go:157:12:157:13 | next key-value pair in range | stmts.go:159:1:159:1 | exit | | stmts.go:157:12:157:13 | xs | stmts.go:157:12:157:13 | next key-value pair in range | | stmts.go:157:15:158:2 | skip | stmts.go:157:12:157:13 | next key-value pair in range | | tst.go:0:0:0:0 | entry | tst.go:3:6:3:10 | skip | -| tst.go:3:1:3:1 | entry | tst.go:3:12:3:12 | argument corresponding to x | +| tst.go:3:1:12:1 | entry | tst.go:3:12:3:12 | argument corresponding to x | | tst.go:3:1:12:1 | function declaration | tst.go:14:6:14:11 | skip | | tst.go:3:6:3:10 | skip | tst.go:3:1:12:1 | function declaration | | tst.go:3:12:3:12 | argument corresponding to x | tst.go:3:12:3:12 | initialization of x | -| tst.go:3:12:3:12 | initialization of x | tst.go:4:2:4:2 | true | -| tst.go:4:2:4:2 | true | tst.go:5:7:5:7 | x | -| tst.go:5:2:5:13 | skip | tst.go:12:1:12:1 | exit | +| tst.go:3:12:3:12 | initialization of x | tst.go:4:2:11:2 | true | +| tst.go:4:2:11:2 | true | tst.go:5:7:5:7 | x | +| tst.go:5:2:5:13 | skip | tst.go:3:1:12:1 | exit | | tst.go:5:7:5:7 | x | tst.go:5:11:5:12 | 23 | | tst.go:5:7:5:12 | ...<... | tst.go:5:7:5:12 | case ...<... | -| tst.go:5:7:5:12 | case ...<... | tst.go:5:12:5:12 | ...<... is false | -| tst.go:5:7:5:12 | case ...<... | tst.go:5:12:5:12 | ...<... is true | +| tst.go:5:7:5:12 | ...<... is false | tst.go:7:7:7:7 | x | +| tst.go:5:7:5:12 | ...<... is true | tst.go:5:2:5:13 | skip | +| tst.go:5:7:5:12 | case ...<... | tst.go:5:7:5:12 | ...<... is false | +| tst.go:5:7:5:12 | case ...<... | tst.go:5:7:5:12 | ...<... is true | | tst.go:5:11:5:12 | 23 | tst.go:5:7:5:12 | ...<... | -| tst.go:5:12:5:12 | ...<... is false | tst.go:7:7:7:7 | x | -| tst.go:5:12:5:12 | ...<... is true | tst.go:5:2:5:13 | skip | -| tst.go:7:2:7:13 | skip | tst.go:12:1:12:1 | exit | +| tst.go:7:2:7:13 | skip | tst.go:3:1:12:1 | exit | | tst.go:7:7:7:7 | x | tst.go:7:11:7:12 | 42 | | tst.go:7:7:7:12 | ...<... | tst.go:7:7:7:12 | case ...<... | -| tst.go:7:7:7:12 | case ...<... | tst.go:7:12:7:12 | ...<... is false | -| tst.go:7:7:7:12 | case ...<... | tst.go:7:12:7:12 | ...<... is true | +| tst.go:7:7:7:12 | ...<... is false | tst.go:9:7:9:7 | x | +| tst.go:7:7:7:12 | ...<... is true | tst.go:7:2:7:13 | skip | +| tst.go:7:7:7:12 | case ...<... | tst.go:7:7:7:12 | ...<... is false | +| tst.go:7:7:7:12 | case ...<... | tst.go:7:7:7:12 | ...<... is true | | tst.go:7:11:7:12 | 42 | tst.go:7:7:7:12 | ...<... | -| tst.go:7:12:7:12 | ...<... is false | tst.go:9:7:9:7 | x | -| tst.go:7:12:7:12 | ...<... is true | tst.go:7:2:7:13 | skip | -| tst.go:9:2:9:13 | skip | tst.go:12:1:12:1 | exit | +| tst.go:9:2:9:13 | skip | tst.go:3:1:12:1 | exit | | tst.go:9:7:9:7 | x | tst.go:9:11:9:12 | 23 | | tst.go:9:7:9:12 | ...<... | tst.go:9:7:9:12 | case ...<... | -| tst.go:9:7:9:12 | case ...<... | tst.go:9:12:9:12 | ...<... is false | -| tst.go:9:7:9:12 | case ...<... | tst.go:9:12:9:12 | ...<... is true | +| tst.go:9:7:9:12 | ...<... is false | tst.go:3:1:12:1 | exit | +| tst.go:9:7:9:12 | ...<... is true | tst.go:9:2:9:13 | skip | +| tst.go:9:7:9:12 | case ...<... | tst.go:9:7:9:12 | ...<... is false | +| tst.go:9:7:9:12 | case ...<... | tst.go:9:7:9:12 | ...<... is true | | tst.go:9:11:9:12 | 23 | tst.go:9:7:9:12 | ...<... | -| tst.go:9:12:9:12 | ...<... is false | tst.go:12:1:12:1 | exit | -| tst.go:9:12:9:12 | ...<... is true | tst.go:9:2:9:13 | skip | -| tst.go:14:1:14:1 | entry | tst.go:14:13:14:17 | argument corresponding to value | +| tst.go:14:1:21:1 | entry | tst.go:14:13:14:17 | argument corresponding to value | | tst.go:14:1:21:1 | function declaration | tst.go:23:6:23:11 | skip | | tst.go:14:6:14:11 | skip | tst.go:14:1:21:1 | function declaration | | tst.go:14:13:14:17 | argument corresponding to value | tst.go:14:13:14:17 | initialization of value | -| tst.go:14:13:14:17 | initialization of value | tst.go:15:2:15:2 | true | -| tst.go:15:2:15:2 | true | tst.go:16:7:16:11 | value | -| tst.go:16:2:16:34 | skip | tst.go:21:1:21:1 | exit | +| tst.go:14:13:14:17 | initialization of value | tst.go:15:2:20:2 | true | +| tst.go:15:2:20:2 | true | tst.go:16:7:16:11 | value | +| tst.go:16:2:16:34 | skip | tst.go:14:1:21:1 | exit | | tst.go:16:7:16:11 | value | tst.go:16:15:16:33 | ...*... | | tst.go:16:7:16:33 | ...<... | tst.go:16:7:16:33 | case ...<... | -| tst.go:16:7:16:33 | case ...<... | tst.go:16:33:16:33 | ...<... is false | -| tst.go:16:7:16:33 | case ...<... | tst.go:16:33:16:33 | ...<... is true | +| tst.go:16:7:16:33 | ...<... is false | tst.go:18:7:18:11 | value | +| tst.go:16:7:16:33 | ...<... is true | tst.go:16:2:16:34 | skip | +| tst.go:16:7:16:33 | case ...<... | tst.go:16:7:16:33 | ...<... is false | +| tst.go:16:7:16:33 | case ...<... | tst.go:16:7:16:33 | ...<... is true | | tst.go:16:15:16:33 | ...*... | tst.go:16:7:16:33 | ...<... | -| tst.go:16:33:16:33 | ...<... is false | tst.go:18:7:18:11 | value | -| tst.go:16:33:16:33 | ...<... is true | tst.go:16:2:16:34 | skip | -| tst.go:18:2:18:39 | skip | tst.go:21:1:21:1 | exit | +| tst.go:18:2:18:39 | skip | tst.go:14:1:21:1 | exit | | tst.go:18:7:18:11 | value | tst.go:18:15:18:38 | ...*... | | tst.go:18:7:18:38 | ...<... | tst.go:18:7:18:38 | case ...<... | -| tst.go:18:7:18:38 | case ...<... | tst.go:18:38:18:38 | ...<... is false | -| tst.go:18:7:18:38 | case ...<... | tst.go:18:38:18:38 | ...<... is true | +| tst.go:18:7:18:38 | ...<... is false | tst.go:14:1:21:1 | exit | +| tst.go:18:7:18:38 | ...<... is true | tst.go:18:2:18:39 | skip | +| tst.go:18:7:18:38 | case ...<... | tst.go:18:7:18:38 | ...<... is false | +| tst.go:18:7:18:38 | case ...<... | tst.go:18:7:18:38 | ...<... is true | | tst.go:18:15:18:38 | ...*... | tst.go:18:7:18:38 | ...<... | -| tst.go:18:38:18:38 | ...<... is false | tst.go:21:1:21:1 | exit | -| tst.go:18:38:18:38 | ...<... is true | tst.go:18:2:18:39 | skip | -| tst.go:23:1:23:1 | entry | tst.go:24:2:24:2 | true | +| tst.go:23:1:26:1 | entry | tst.go:24:2:25:2 | true | | tst.go:23:1:26:1 | function declaration | tst.go:28:6:28:11 | skip | | tst.go:23:6:23:11 | skip | tst.go:23:1:26:1 | function declaration | -| tst.go:24:2:24:2 | true | tst.go:26:1:26:1 | exit | -| tst.go:28:1:28:1 | entry | tst.go:29:2:29:2 | true | +| tst.go:24:2:25:2 | true | tst.go:23:1:26:1 | exit | +| tst.go:28:1:32:1 | entry | tst.go:29:2:31:2 | true | | tst.go:28:1:32:1 | function declaration | tst.go:0:0:0:0 | exit | | tst.go:28:6:28:11 | skip | tst.go:28:1:32:1 | function declaration | -| tst.go:29:2:29:2 | true | tst.go:30:2:30:9 | skip | -| tst.go:30:2:30:9 | skip | tst.go:32:1:32:1 | exit | +| tst.go:29:2:31:2 | true | tst.go:30:2:30:9 | skip | +| tst.go:30:2:30:9 | skip | tst.go:28:1:32:1 | exit | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/FlowSteps/LocalFlowStep.expected b/go/ql/test/library-tests/semmle/go/dataflow/FlowSteps/LocalFlowStep.expected index 928d7a9f3949..c6bfdfdc1d5a 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/FlowSteps/LocalFlowStep.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/FlowSteps/LocalFlowStep.expected @@ -69,7 +69,7 @@ | main.go:14:6:14:10 | function test2 | main.go:34:8:34:12 | test2 | | main.go:14:6:14:10 | function test2 | main.go:34:19:34:23 | test2 | | main.go:15:9:15:9 | 0 | main.go:15:2:15:4 | definition of acc | -| main.go:16:9:16:9 | capture variable acc | main.go:17:3:17:5 | acc | +| main.go:16:9:19:2 | capture variable acc | main.go:17:3:17:5 | acc | | main.go:17:3:17:7 | definition of acc | main.go:18:10:18:12 | acc | | main.go:17:3:17:7 | rhs of increment statement | main.go:17:3:17:7 | definition of acc | | main.go:22:12:22:12 | argument corresponding to b | main.go:22:12:22:12 | definition of b | @@ -95,21 +95,21 @@ | main.go:41:8:41:21 | call to make | main.go:41:2:41:3 | definition of s4 | | main.go:46:13:46:14 | argument corresponding to xs | main.go:46:13:46:14 | definition of xs | | main.go:46:13:46:14 | definition of xs | main.go:47:20:47:21 | xs | -| main.go:46:24:46:27 | definition of keys | main.go:47:20:47:20 | keys = phi(def@46:24, def@49:3) | +| main.go:46:24:46:27 | definition of keys | main.go:47:20:47:21 | keys = phi(def@46:24, def@49:3) | | main.go:46:24:46:27 | zero value for keys | main.go:46:24:46:27 | definition of keys | -| main.go:46:34:46:37 | definition of vals | main.go:47:20:47:20 | vals = phi(def@46:34, def@48:3) | +| main.go:46:34:46:37 | definition of vals | main.go:47:20:47:21 | vals = phi(def@46:34, def@48:3) | | main.go:46:34:46:37 | zero value for vals | main.go:46:34:46:37 | definition of vals | | main.go:47:2:50:2 | range statement[0] | main.go:47:6:47:6 | definition of k | | main.go:47:2:50:2 | range statement[1] | main.go:47:9:47:9 | definition of v | | main.go:47:6:47:6 | definition of k | main.go:49:11:49:11 | k | | main.go:47:9:47:9 | definition of v | main.go:48:11:48:11 | v | -| main.go:47:20:47:20 | keys = phi(def@46:24, def@49:3) | main.go:46:24:46:27 | implicit read of keys | -| main.go:47:20:47:20 | keys = phi(def@46:24, def@49:3) | main.go:49:3:49:6 | keys | -| main.go:47:20:47:20 | vals = phi(def@46:34, def@48:3) | main.go:46:34:46:37 | implicit read of vals | -| main.go:47:20:47:20 | vals = phi(def@46:34, def@48:3) | main.go:48:3:48:6 | vals | -| main.go:48:3:48:6 | definition of vals | main.go:47:20:47:20 | vals = phi(def@46:34, def@48:3) | +| main.go:47:20:47:21 | keys = phi(def@46:24, def@49:3) | main.go:46:24:46:27 | implicit read of keys | +| main.go:47:20:47:21 | keys = phi(def@46:24, def@49:3) | main.go:49:3:49:6 | keys | +| main.go:47:20:47:21 | vals = phi(def@46:34, def@48:3) | main.go:46:34:46:37 | implicit read of vals | +| main.go:47:20:47:21 | vals = phi(def@46:34, def@48:3) | main.go:48:3:48:6 | vals | +| main.go:48:3:48:6 | definition of vals | main.go:47:20:47:21 | vals = phi(def@46:34, def@48:3) | | main.go:48:3:48:11 | ... += ... | main.go:48:3:48:6 | definition of vals | -| main.go:49:3:49:6 | definition of keys | main.go:47:20:47:20 | keys = phi(def@46:24, def@49:3) | +| main.go:49:3:49:6 | definition of keys | main.go:47:20:47:21 | keys = phi(def@46:24, def@49:3) | | main.go:49:3:49:11 | ... += ... | main.go:49:3:49:6 | definition of keys | | main.go:55:6:55:7 | definition of ch | main.go:56:2:56:3 | ch | | main.go:55:6:55:7 | definition of ch | main.go:57:4:57:5 | ch | @@ -147,16 +147,16 @@ | url.go:8:20:8:20 | argument corresponding to s | url.go:8:20:8:20 | definition of s | | url.go:8:20:8:20 | definition of s | url.go:12:46:12:46 | s | | url.go:8:20:8:20 | definition of s | url.go:14:48:14:48 | s | -| url.go:12:3:12:5 | definition of res | url.go:16:5:16:5 | res = phi(def@12:3, def@14:3) | +| url.go:12:3:12:5 | definition of res | url.go:16:5:16:7 | res = phi(def@12:3, def@14:3) | | url.go:12:3:12:48 | ... = ...[0] | url.go:12:3:12:5 | definition of res | | url.go:12:3:12:48 | ... = ...[1] | url.go:12:8:12:10 | definition of err | -| url.go:12:8:12:10 | definition of err | url.go:16:5:16:5 | err = phi(def@12:8, def@14:8) | -| url.go:14:3:14:5 | definition of res | url.go:16:5:16:5 | res = phi(def@12:3, def@14:3) | +| url.go:12:8:12:10 | definition of err | url.go:16:5:16:7 | err = phi(def@12:8, def@14:8) | +| url.go:14:3:14:5 | definition of res | url.go:16:5:16:7 | res = phi(def@12:3, def@14:3) | | url.go:14:3:14:50 | ... = ...[0] | url.go:14:3:14:5 | definition of res | | url.go:14:3:14:50 | ... = ...[1] | url.go:14:8:14:10 | definition of err | -| url.go:14:8:14:10 | definition of err | url.go:16:5:16:5 | err = phi(def@12:8, def@14:8) | -| url.go:16:5:16:5 | err = phi(def@12:8, def@14:8) | url.go:16:5:16:7 | err | -| url.go:16:5:16:5 | res = phi(def@12:3, def@14:3) | url.go:19:9:19:11 | res | +| url.go:14:8:14:10 | definition of err | url.go:16:5:16:7 | err = phi(def@12:8, def@14:8) | +| url.go:16:5:16:7 | err = phi(def@12:8, def@14:8) | url.go:16:5:16:7 | err | +| url.go:16:5:16:7 | res = phi(def@12:3, def@14:3) | url.go:19:9:19:11 | res | | url.go:22:12:22:12 | argument corresponding to i | url.go:22:12:22:12 | definition of i | | url.go:22:12:22:12 | definition of i | url.go:24:5:24:5 | i | | url.go:22:19:22:19 | argument corresponding to s | url.go:22:19:22:19 | definition of s | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/SSA/DefUse.expected b/go/ql/test/library-tests/semmle/go/dataflow/SSA/DefUse.expected index f330cabad504..aad16b89ab6b 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/SSA/DefUse.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/SSA/DefUse.expected @@ -2,10 +2,10 @@ | main.go:15:15:15:15 | y | main.go:14:2:14:2 | definition of y | main.go:14:2:14:2 | y | | main.go:17:3:17:3 | y | main.go:14:2:14:2 | definition of y | main.go:14:2:14:2 | y | | main.go:19:12:19:12 | x | main.go:13:6:13:6 | definition of x | main.go:13:6:13:6 | x | -| main.go:19:15:19:15 | y | main.go:19:2:19:2 | y = phi(def@14:2, def@17:3) | main.go:14:2:14:2 | y | -| main.go:21:7:21:7 | y | main.go:19:2:19:2 | y = phi(def@14:2, def@17:3) | main.go:14:2:14:2 | y | -| main.go:23:12:23:12 | x | main.go:23:2:23:2 | x = phi(def@13:6, def@21:3) | main.go:13:6:13:6 | x | -| main.go:23:15:23:15 | y | main.go:19:2:19:2 | y = phi(def@14:2, def@17:3) | main.go:14:2:14:2 | y | +| main.go:19:15:19:15 | y | main.go:19:2:19:10 | y = phi(def@14:2, def@17:3) | main.go:14:2:14:2 | y | +| main.go:21:7:21:7 | y | main.go:19:2:19:10 | y = phi(def@14:2, def@17:3) | main.go:14:2:14:2 | y | +| main.go:23:12:23:12 | x | main.go:23:2:23:10 | x = phi(def@13:6, def@21:3) | main.go:13:6:13:6 | x | +| main.go:23:15:23:15 | y | main.go:19:2:19:10 | y = phi(def@14:2, def@17:3) | main.go:14:2:14:2 | y | | main.go:27:10:27:10 | x | main.go:26:10:26:10 | definition of x | main.go:26:10:26:10 | x | | main.go:29:10:29:10 | b | main.go:27:5:27:5 | definition of b | main.go:27:5:27:5 | b | | main.go:29:13:29:13 | a | main.go:27:2:27:2 | definition of a | main.go:27:2:27:2 | a | @@ -17,9 +17,9 @@ | main.go:44:12:44:12 | x | main.go:39:2:39:2 | definition of x | main.go:39:2:39:2 | x | | main.go:47:13:47:18 | implicit read of result | main.go:48:2:48:7 | definition of result | main.go:47:13:47:18 | result | | main.go:52:14:52:19 | implicit read of result | main.go:52:14:52:19 | definition of result | main.go:52:14:52:19 | result | -| main.go:61:12:61:12 | x | main.go:58:6:58:6 | x = phi(def@57:6, def@59:3) | main.go:57:6:57:6 | x | -| main.go:64:16:64:16 | i | main.go:65:6:65:6 | i = phi(def@64:16, def@64:6) | main.go:64:6:64:6 | i | -| main.go:70:12:70:12 | y | main.go:65:6:65:6 | y = phi(def@63:2, def@68:3) | main.go:63:2:63:2 | y | +| main.go:61:12:61:12 | x | main.go:58:6:58:9 | x = phi(def@57:6, def@59:3) | main.go:57:6:57:6 | x | +| main.go:64:16:64:16 | i | main.go:65:6:65:9 | i = phi(def@64:16, def@64:6) | main.go:64:6:64:6 | i | +| main.go:70:12:70:12 | y | main.go:65:6:65:9 | y = phi(def@63:2, def@68:3) | main.go:63:2:63:2 | y | | main.go:73:16:73:16 | i | main.go:74:3:74:3 | i = phi(def@73:16, def@73:6) | main.go:73:6:73:6 | i | | main.go:79:12:79:12 | z | main.go:74:3:74:3 | definition of z | main.go:72:2:72:2 | z | | main.go:82:18:82:18 | implicit read of a | main.go:84:5:84:5 | definition of a | main.go:82:18:82:18 | a | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/SSA/SsaDefinition.expected b/go/ql/test/library-tests/semmle/go/dataflow/SSA/SsaDefinition.expected index 3be49ec06f7a..bd905b5c2a70 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/SSA/SsaDefinition.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/SSA/SsaDefinition.expected @@ -1,9 +1,9 @@ | main.go:13:6:13:6 | definition of x | | main.go:14:2:14:2 | definition of y | | main.go:17:3:17:3 | definition of y | -| main.go:19:2:19:2 | y = phi(def@14:2, def@17:3) | +| main.go:19:2:19:10 | y = phi(def@14:2, def@17:3) | | main.go:21:3:21:3 | definition of x | -| main.go:23:2:23:2 | x = phi(def@13:6, def@21:3) | +| main.go:23:2:23:10 | x = phi(def@13:6, def@21:3) | | main.go:26:10:26:10 | definition of x | | main.go:27:2:27:2 | definition of a | | main.go:27:5:27:5 | definition of b | @@ -17,13 +17,13 @@ | main.go:48:2:48:7 | definition of result | | main.go:52:14:52:19 | definition of result | | main.go:57:6:57:6 | definition of x | -| main.go:58:6:58:6 | x = phi(def@57:6, def@59:3) | +| main.go:58:6:58:9 | x = phi(def@57:6, def@59:3) | | main.go:59:3:59:3 | definition of x | | main.go:63:2:63:2 | definition of y | | main.go:64:6:64:6 | definition of i | | main.go:64:16:64:18 | definition of i | -| main.go:65:6:65:6 | i = phi(def@64:16, def@64:6) | -| main.go:65:6:65:6 | y = phi(def@63:2, def@68:3) | +| main.go:65:6:65:9 | i = phi(def@64:16, def@64:6) | +| main.go:65:6:65:9 | y = phi(def@63:2, def@68:3) | | main.go:68:3:68:3 | definition of y | | main.go:73:6:73:6 | definition of i | | main.go:73:16:73:18 | definition of i | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/SSA/SsaWithFields.expected b/go/ql/test/library-tests/semmle/go/dataflow/SSA/SsaWithFields.expected index bcaf5bd749d5..245a82acc839 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/SSA/SsaWithFields.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/SSA/SsaWithFields.expected @@ -1,9 +1,9 @@ | main.go:13:6:13:6 | (def@13:6) | x | | main.go:14:2:14:2 | (def@14:2) | y | | main.go:17:3:17:3 | (def@17:3) | y | -| main.go:19:2:19:2 | (phi@19:2) | y | +| main.go:19:2:19:10 | (phi@19:2) | y | | main.go:21:3:21:3 | (def@21:3) | x | -| main.go:23:2:23:2 | (phi@23:2) | x | +| main.go:23:2:23:10 | (phi@23:2) | x | | main.go:26:10:26:10 | (def@26:10) | x | | main.go:27:2:27:2 | (def@27:2) | a | | main.go:27:5:27:5 | (def@27:5) | b | @@ -17,13 +17,13 @@ | main.go:48:2:48:7 | (def@48:2) | result | | main.go:52:14:52:19 | (def@52:14) | result | | main.go:57:6:57:6 | (def@57:6) | x | -| main.go:58:6:58:6 | (phi@58:6) | x | +| main.go:58:6:58:9 | (phi@58:6) | x | | main.go:59:3:59:3 | (def@59:3) | x | | main.go:63:2:63:2 | (def@63:2) | y | | main.go:64:6:64:6 | (def@64:6) | i | | main.go:64:16:64:18 | (def@64:16) | i | -| main.go:65:6:65:6 | (phi@65:6) | i | -| main.go:65:6:65:6 | (phi@65:6) | y | +| main.go:65:6:65:9 | (phi@65:6) | i | +| main.go:65:6:65:9 | (phi@65:6) | y | | main.go:68:3:68:3 | (def@68:3) | y | | main.go:73:6:73:6 | (def@73:6) | i | | main.go:73:16:73:18 | (def@73:16) | i | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected b/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected index 82c4c950c6e4..6bda68257ef4 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected @@ -5,24 +5,24 @@ edges | client/main.go:16:35:16:78 | &... | server/main.go:19:56:19:61 | definition of params | provenance | | | rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | rpc/notes/service.twirp.go:477:44:477:51 | typedReq | provenance | | | rpc/notes/service.twirp.go:477:44:477:51 | typedReq | server/main.go:19:56:19:61 | definition of params | provenance | | -| rpc/notes/service.twirp.go:493:2:493:2 | capture variable reqContent | rpc/notes/service.twirp.go:495:35:495:44 | reqContent | provenance | | +| rpc/notes/service.twirp.go:493:2:496:2 | capture variable reqContent | rpc/notes/service.twirp.go:495:35:495:44 | reqContent | provenance | | | rpc/notes/service.twirp.go:495:35:495:44 | reqContent | server/main.go:19:56:19:61 | definition of params | provenance | | | rpc/notes/service.twirp.go:538:2:538:33 | ... := ...[0] | rpc/notes/service.twirp.go:544:27:544:29 | buf | provenance | | | rpc/notes/service.twirp.go:538:25:538:32 | selection of Body | rpc/notes/service.twirp.go:538:2:538:33 | ... := ...[0] | provenance | Src:MaD:1 MaD:3 | -| rpc/notes/service.twirp.go:543:2:543:11 | definition of reqContent | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | provenance | | +| rpc/notes/service.twirp.go:543:2:543:11 | definition of reqContent | rpc/notes/service.twirp.go:574:2:577:2 | capture variable reqContent | provenance | | | rpc/notes/service.twirp.go:544:27:544:29 | buf | rpc/notes/service.twirp.go:543:2:543:11 | definition of reqContent | provenance | MaD:2 | | rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | rpc/notes/service.twirp.go:558:44:558:51 | typedReq | provenance | | | rpc/notes/service.twirp.go:558:44:558:51 | typedReq | server/main.go:19:56:19:61 | definition of params | provenance | | -| rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | rpc/notes/service.twirp.go:576:35:576:44 | reqContent | provenance | | +| rpc/notes/service.twirp.go:574:2:577:2 | capture variable reqContent | rpc/notes/service.twirp.go:576:35:576:44 | reqContent | provenance | | | rpc/notes/service.twirp.go:576:35:576:44 | reqContent | server/main.go:19:56:19:61 | definition of params | provenance | | | server/main.go:19:56:19:61 | definition of params | server/main.go:19:56:19:61 | definition of params [Return] | provenance | | | server/main.go:19:56:19:61 | definition of params | server/main.go:30:38:30:48 | selection of Text | provenance | | | server/main.go:19:56:19:61 | definition of params | server/main.go:30:38:30:48 | selection of Text | provenance | | | server/main.go:19:56:19:61 | definition of params [Return] | client/main.go:16:35:16:78 | &... | provenance | | | server/main.go:19:56:19:61 | definition of params [Return] | rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | provenance | | -| server/main.go:19:56:19:61 | definition of params [Return] | rpc/notes/service.twirp.go:493:2:493:2 | capture variable reqContent | provenance | | +| server/main.go:19:56:19:61 | definition of params [Return] | rpc/notes/service.twirp.go:493:2:496:2 | capture variable reqContent | provenance | | | server/main.go:19:56:19:61 | definition of params [Return] | rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | provenance | | -| server/main.go:19:56:19:61 | definition of params [Return] | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | provenance | | +| server/main.go:19:56:19:61 | definition of params [Return] | rpc/notes/service.twirp.go:574:2:577:2 | capture variable reqContent | provenance | | models | 1 | Source: net/http; Request; true; Body; ; ; ; remote; manual | | 2 | Summary: google.golang.org/protobuf/proto; ; false; Unmarshal; ; ; Argument[0]; Argument[1]; taint; manual | @@ -31,7 +31,7 @@ nodes | client/main.go:16:35:16:78 | &... | semmle.label | &... | | rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | semmle.label | definition of typedReq | | rpc/notes/service.twirp.go:477:44:477:51 | typedReq | semmle.label | typedReq | -| rpc/notes/service.twirp.go:493:2:493:2 | capture variable reqContent | semmle.label | capture variable reqContent | +| rpc/notes/service.twirp.go:493:2:496:2 | capture variable reqContent | semmle.label | capture variable reqContent | | rpc/notes/service.twirp.go:495:35:495:44 | reqContent | semmle.label | reqContent | | rpc/notes/service.twirp.go:538:2:538:33 | ... := ...[0] | semmle.label | ... := ...[0] | | rpc/notes/service.twirp.go:538:25:538:32 | selection of Body | semmle.label | selection of Body | @@ -39,7 +39,7 @@ nodes | rpc/notes/service.twirp.go:544:27:544:29 | buf | semmle.label | buf | | rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | semmle.label | definition of typedReq | | rpc/notes/service.twirp.go:558:44:558:51 | typedReq | semmle.label | typedReq | -| rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | semmle.label | capture variable reqContent | +| rpc/notes/service.twirp.go:574:2:577:2 | capture variable reqContent | semmle.label | capture variable reqContent | | rpc/notes/service.twirp.go:576:35:576:44 | reqContent | semmle.label | reqContent | | server/main.go:19:56:19:61 | definition of params | semmle.label | definition of params | | server/main.go:19:56:19:61 | definition of params | semmle.label | definition of params | diff --git a/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected b/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected index dc54af70dbba..672e1a5cc8f1 100644 --- a/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected +++ b/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected @@ -9,8 +9,8 @@ | tests.go:129:3:129:3 | f | tests.go:125:5:125:78 | ... := ...[0] | tests.go:129:3:129:3 | f | File handle may be writable as a result of data flow from a $@ and closing it may result in data loss upon failure, which is not handled explicitly. | tests.go:125:15:125:78 | call to OpenFile | call to OpenFile | edges | tests.go:8:24:8:24 | definition of f | tests.go:9:8:9:8 | f | provenance | | -| tests.go:12:32:12:32 | definition of f | tests.go:13:13:13:13 | capture variable f | provenance | | -| tests.go:13:13:13:13 | capture variable f | tests.go:14:3:14:3 | f | provenance | | +| tests.go:12:32:12:32 | definition of f | tests.go:13:13:15:2 | capture variable f | provenance | | +| tests.go:13:13:15:2 | capture variable f | tests.go:14:3:14:3 | f | provenance | | | tests.go:31:5:31:78 | ... := ...[0] | tests.go:32:21:32:21 | f | provenance | Src:MaD:1 | | tests.go:31:5:31:78 | ... := ...[0] | tests.go:33:29:33:29 | f | provenance | Src:MaD:1 | | tests.go:32:21:32:21 | f | tests.go:8:24:8:24 | definition of f | provenance | | @@ -29,7 +29,7 @@ nodes | tests.go:8:24:8:24 | definition of f | semmle.label | definition of f | | tests.go:9:8:9:8 | f | semmle.label | f | | tests.go:12:32:12:32 | definition of f | semmle.label | definition of f | -| tests.go:13:13:13:13 | capture variable f | semmle.label | capture variable f | +| tests.go:13:13:15:2 | capture variable f | semmle.label | capture variable f | | tests.go:14:3:14:3 | f | semmle.label | f | | tests.go:31:5:31:78 | ... := ...[0] | semmle.label | ... := ...[0] | | tests.go:32:21:32:21 | f | semmle.label | f |