diff --git a/go/ql/test/experimental/CWE-369/DivideByZero.expected b/go/ql/test/experimental/CWE-369/DivideByZero.expected index 01211d9d107..7f206a30c8a 100644 --- a/go/ql/test/experimental/CWE-369/DivideByZero.expected +++ b/go/ql/test/experimental/CWE-369/DivideByZero.expected @@ -8,23 +8,23 @@ edges | DivideByZero.go:10:12:10:16 | selection of URL | DivideByZero.go:10:12:10:24 | call to Query | provenance | Src:MaD:1 MaD:2 | | DivideByZero.go:10:12:10:24 | call to Query | DivideByZero.go:11:27:11:32 | param1 | provenance | | -| DivideByZero.go:11:2:11:33 | ... := ...[0] | DivideByZero.go:12:16:12:20 | value | provenance | | -| DivideByZero.go:11:27:11:32 | param1 | DivideByZero.go:11:2:11:33 | ... := ...[0] | provenance | Config | +| DivideByZero.go:11:2:11:33 | extract:0 ... := ... | DivideByZero.go:12:16:12:20 | value | provenance | | +| DivideByZero.go:11:27:11:32 | param1 | DivideByZero.go:11:2:11:33 | extract:0 ... := ... | provenance | Config | | DivideByZero.go:17:12:17:16 | selection of URL | DivideByZero.go:17:12:17:24 | call to Query | provenance | Src:MaD:1 MaD:2 | | DivideByZero.go:17:12:17:24 | call to Query | DivideByZero.go:18:11:18:24 | type conversion | provenance | | | DivideByZero.go:18:11:18:24 | type conversion | DivideByZero.go:19:16:19:20 | value | provenance | | | DivideByZero.go:24:12:24:16 | selection of URL | DivideByZero.go:24:12:24:24 | call to Query | provenance | Src:MaD:1 MaD:2 | | DivideByZero.go:24:12:24:24 | call to Query | DivideByZero.go:25:31:25:36 | param1 | provenance | | -| DivideByZero.go:25:2:25:45 | ... := ...[0] | DivideByZero.go:26:16:26:20 | value | provenance | | -| DivideByZero.go:25:31:25:36 | param1 | DivideByZero.go:25:2:25:45 | ... := ...[0] | provenance | Config | +| DivideByZero.go:25:2:25:45 | extract:0 ... := ... | DivideByZero.go:26:16:26:20 | value | provenance | | +| DivideByZero.go:25:31:25:36 | param1 | DivideByZero.go:25:2:25:45 | extract:0 ... := ... | provenance | Config | | DivideByZero.go:31:12:31:16 | selection of URL | DivideByZero.go:31:12:31:24 | call to Query | provenance | Src:MaD:1 MaD:2 | | DivideByZero.go:31:12:31:24 | call to Query | DivideByZero.go:32:33:32:38 | param1 | provenance | | -| DivideByZero.go:32:2:32:43 | ... := ...[0] | DivideByZero.go:33:16:33:20 | value | provenance | | -| DivideByZero.go:32:33:32:38 | param1 | DivideByZero.go:32:2:32:43 | ... := ...[0] | provenance | Config | +| DivideByZero.go:32:2:32:43 | extract:0 ... := ... | DivideByZero.go:33:16:33:20 | value | provenance | | +| DivideByZero.go:32:33:32:38 | param1 | DivideByZero.go:32:2:32:43 | extract:0 ... := ... | provenance | Config | | DivideByZero.go:38:12:38:16 | selection of URL | DivideByZero.go:38:12:38:24 | call to Query | provenance | Src:MaD:1 MaD:2 | | DivideByZero.go:38:12:38:24 | call to Query | DivideByZero.go:39:32:39:37 | param1 | provenance | | -| DivideByZero.go:39:2:39:46 | ... := ...[0] | DivideByZero.go:40:16:40:20 | value | provenance | | -| DivideByZero.go:39:32:39:37 | param1 | DivideByZero.go:39:2:39:46 | ... := ...[0] | provenance | Config | +| DivideByZero.go:39:2:39:46 | extract:0 ... := ... | DivideByZero.go:40:16:40:20 | value | provenance | | +| DivideByZero.go:39:32:39:37 | param1 | DivideByZero.go:39:2:39:46 | extract:0 ... := ... | provenance | Config | | DivideByZero.go:54:12:54:16 | selection of URL | DivideByZero.go:54:12:54:24 | call to Query | provenance | Src:MaD:1 MaD:2 | | DivideByZero.go:54:12:54:24 | call to Query | DivideByZero.go:55:11:55:24 | type conversion | provenance | | | DivideByZero.go:55:11:55:24 | type conversion | DivideByZero.go:57:17:57:21 | value | provenance | | @@ -34,7 +34,7 @@ models nodes | DivideByZero.go:10:12:10:16 | selection of URL | semmle.label | selection of URL | | DivideByZero.go:10:12:10:24 | call to Query | semmle.label | call to Query | -| DivideByZero.go:11:2:11:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| DivideByZero.go:11:2:11:33 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | DivideByZero.go:11:27:11:32 | param1 | semmle.label | param1 | | DivideByZero.go:12:16:12:20 | value | semmle.label | value | | DivideByZero.go:17:12:17:16 | selection of URL | semmle.label | selection of URL | @@ -43,17 +43,17 @@ nodes | DivideByZero.go:19:16:19:20 | value | semmle.label | value | | DivideByZero.go:24:12:24:16 | selection of URL | semmle.label | selection of URL | | DivideByZero.go:24:12:24:24 | call to Query | semmle.label | call to Query | -| DivideByZero.go:25:2:25:45 | ... := ...[0] | semmle.label | ... := ...[0] | +| DivideByZero.go:25:2:25:45 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | DivideByZero.go:25:31:25:36 | param1 | semmle.label | param1 | | DivideByZero.go:26:16:26:20 | value | semmle.label | value | | DivideByZero.go:31:12:31:16 | selection of URL | semmle.label | selection of URL | | DivideByZero.go:31:12:31:24 | call to Query | semmle.label | call to Query | -| DivideByZero.go:32:2:32:43 | ... := ...[0] | semmle.label | ... := ...[0] | +| DivideByZero.go:32:2:32:43 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | DivideByZero.go:32:33:32:38 | param1 | semmle.label | param1 | | DivideByZero.go:33:16:33:20 | value | semmle.label | value | | DivideByZero.go:38:12:38:16 | selection of URL | semmle.label | selection of URL | | DivideByZero.go:38:12:38:24 | call to Query | semmle.label | call to Query | -| DivideByZero.go:39:2:39:46 | ... := ...[0] | semmle.label | ... := ...[0] | +| DivideByZero.go:39:2:39:46 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | DivideByZero.go:39:32:39:37 | param1 | semmle.label | param1 | | DivideByZero.go:40:16:40:20 | value | semmle.label | value | | DivideByZero.go:54:12:54:16 | selection of URL | semmle.label | selection of URL | diff --git a/go/ql/test/experimental/CWE-74/DsnInjectionLocal.expected b/go/ql/test/experimental/CWE-74/DsnInjectionLocal.expected index 4b26395c8e7..1a938af237c 100644 --- a/go/ql/test/experimental/CWE-74/DsnInjectionLocal.expected +++ b/go/ql/test/experimental/CWE-74/DsnInjectionLocal.expected @@ -8,14 +8,14 @@ edges | Dsn.go:28:102:28:109 | index expression | Dsn.go:28:11:28:110 | []type{args} [array] | provenance | | | Dsn.go:28:102:28:109 | index expression | Dsn.go:28:11:28:110 | call to Sprintf | provenance | FunctionModel | | Dsn.go:63:9:63:11 | cfg [postupdate] [pointer] | Dsn.go:67:102:67:104 | cfg [pointer] | provenance | | -| Dsn.go:63:9:63:11 | implicit dereference [postupdate] | Dsn.go:63:9:63:11 | cfg [postupdate] [pointer] | provenance | | -| Dsn.go:63:9:63:11 | implicit dereference [postupdate] | Dsn.go:67:102:67:108 | selection of dsn | provenance | | +| Dsn.go:63:9:63:11 | implicit-deref cfg [postupdate] | Dsn.go:63:9:63:11 | cfg [postupdate] [pointer] | provenance | | +| Dsn.go:63:9:63:11 | implicit-deref cfg [postupdate] | Dsn.go:67:102:67:108 | selection of dsn | provenance | | | Dsn.go:63:19:63:25 | selection of Args | Dsn.go:63:19:63:29 | slice expression | provenance | Src:MaD:1 | -| Dsn.go:63:19:63:29 | slice expression | Dsn.go:63:9:63:11 | implicit dereference [postupdate] | provenance | FunctionModel | +| Dsn.go:63:19:63:29 | slice expression | Dsn.go:63:9:63:11 | implicit-deref cfg [postupdate] | provenance | FunctionModel | | Dsn.go:67:11:67:109 | []type{args} [array] | Dsn.go:67:11:67:109 | call to Sprintf | provenance | MaD:2 | | Dsn.go:67:11:67:109 | call to Sprintf | Dsn.go:68:29:68:33 | dbDSN | provenance | | -| Dsn.go:67:102:67:104 | cfg [pointer] | Dsn.go:67:102:67:104 | implicit dereference | provenance | | -| Dsn.go:67:102:67:104 | implicit dereference | Dsn.go:67:102:67:108 | selection of dsn | provenance | | +| Dsn.go:67:102:67:104 | cfg [pointer] | Dsn.go:67:102:67:104 | implicit-deref cfg | provenance | | +| Dsn.go:67:102:67:104 | implicit-deref cfg | Dsn.go:67:102:67:108 | selection of dsn | provenance | | | Dsn.go:67:102:67:108 | selection of dsn | Dsn.go:67:11:67:109 | []type{args} [array] | provenance | | | Dsn.go:67:102:67:108 | selection of dsn | Dsn.go:67:11:67:109 | call to Sprintf | provenance | FunctionModel | models @@ -28,13 +28,13 @@ nodes | Dsn.go:28:102:28:109 | index expression | semmle.label | index expression | | Dsn.go:29:29:29:33 | dbDSN | semmle.label | dbDSN | | Dsn.go:63:9:63:11 | cfg [postupdate] [pointer] | semmle.label | cfg [postupdate] [pointer] | -| Dsn.go:63:9:63:11 | implicit dereference [postupdate] | semmle.label | implicit dereference [postupdate] | +| Dsn.go:63:9:63:11 | implicit-deref cfg [postupdate] | semmle.label | implicit-deref cfg [postupdate] | | Dsn.go:63:19:63:25 | selection of Args | semmle.label | selection of Args | | Dsn.go:63:19:63:29 | slice expression | semmle.label | slice expression | | Dsn.go:67:11:67:109 | []type{args} [array] | semmle.label | []type{args} [array] | | Dsn.go:67:11:67:109 | call to Sprintf | semmle.label | call to Sprintf | | Dsn.go:67:102:67:104 | cfg [pointer] | semmle.label | cfg [pointer] | -| Dsn.go:67:102:67:104 | implicit dereference | semmle.label | implicit dereference | +| Dsn.go:67:102:67:104 | implicit-deref cfg | semmle.label | implicit-deref cfg | | Dsn.go:67:102:67:108 | selection of dsn | semmle.label | selection of dsn | | Dsn.go:68:29:68:33 | dbDSN | semmle.label | dbDSN | subpaths diff --git a/go/ql/test/library-tests/semmle/go/IR/test.expected b/go/ql/test/library-tests/semmle/go/IR/test.expected index c42cdaa9932..94b2d44cc7f 100644 --- a/go/ql/test/library-tests/semmle/go/IR/test.expected +++ b/go/ql/test/library-tests/semmle/go/IR/test.expected @@ -1,10 +1,6 @@ -| test.go:9:2:9:16 | ... := ...[0] | test.go:9:13:9:16 | <-... | 0 | file://:0:0:0:0 | bool | -| test.go:9:2:9:16 | ... := ...[1] | test.go:9:13:9:16 | <-... | 1 | file://:0:0:0:0 | bool | -| test.go:15:2:15:20 | ... := ...[0] | test.go:15:13:15:20 | index expression | 0 | file://:0:0:0:0 | string | -| test.go:15:2:15:20 | ... := ...[1] | test.go:15:13:15:20 | index expression | 1 | file://:0:0:0:0 | bool | -| test.go:21:2:21:22 | ... := ...[0] | test.go:21:13:21:22 | type assertion | 0 | file://:0:0:0:0 | string | -| test.go:21:2:21:22 | ... := ...[1] | test.go:21:13:21:22 | type assertion | 1 | file://:0:0:0:0 | bool | -| test.go:29:2:29:7 | call to f[0] | test.go:29:4:29:6 | call to g | 0 | file://:0:0:0:0 | int | -| test.go:29:2:29:7 | call to f[1] | test.go:29:4:29:6 | call to g | 1 | file://:0:0:0:0 | int | -| test.go:33:2:33:7 | call to f[0] | test.go:33:4:33:6 | call to v | 0 | file://:0:0:0:0 | int | -| test.go:33:2:33:7 | call to f[1] | test.go:33:4:33:6 | call to v | 1 | file://:0:0:0:0 | int | +| test.go:9:2:9:16 | extract:0 ... := ... | test.go:9:13:9:16 | <-... | 0 | file://:0:0:0:0 | bool | +| test.go:9:2:9:16 | extract:1 ... := ... | test.go:9:13:9:16 | <-... | 1 | file://:0:0:0:0 | bool | +| test.go:15:2:15:20 | extract:0 ... := ... | test.go:15:13:15:20 | index expression | 0 | file://:0:0:0:0 | string | +| test.go:15:2:15:20 | extract:1 ... := ... | test.go:15:13:15:20 | index expression | 1 | file://:0:0:0:0 | bool | +| test.go:21:2:21:22 | extract:0 ... := ... | test.go:21:13:21:22 | type assertion | 0 | file://:0:0:0:0 | string | +| test.go:21:2:21:22 | extract:1 ... := ... | test.go:21:13:21:22 | type assertion | 1 | file://:0:0:0:0 | bool | 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 3768d015167..c7fef4401d2 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,1821 +1,4154 @@ -| DuplicateSwitchCase.go:0:0:0:0 | entry | DuplicateSwitchCase.go:3:6:3:15 | skip | -| 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: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 | ...==... 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: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: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 | ...==... 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: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: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: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: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: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:1:16:14 | exit | -| epilogues.go:0:0:0:0 | entry | epilogues.go:3:1:3:12 | skip | -| epilogues.go:3:1:3:12 | skip | epilogues.go:8:1:10:1 | skip | -| epilogues.go:8:1:10:1 | skip | epilogues.go:12:21:12:23 | skip | -| epilogues.go:12:1:14:1 | entry | epilogues.go:12:7:12:7 | argument corresponding to l | -| epilogues.go:12:1:14:1 | function declaration | epilogues.go:16:20:16:27 | skip | -| epilogues.go:12:7:12:7 | argument corresponding to l | epilogues.go:12:7:12:7 | initialization of l | -| epilogues.go:12:7:12:7 | initialization of l | epilogues.go:12:25:12:27 | argument corresponding to msg | -| epilogues.go:12:21:12:23 | skip | epilogues.go:12:1:14:1 | function declaration | -| epilogues.go:12:25:12:27 | argument corresponding to msg | epilogues.go:12:25:12:27 | initialization of msg | -| epilogues.go:12:25:12:27 | initialization of msg | epilogues.go:12:37:12:40 | argument corresponding to code | -| epilogues.go:12:37:12:40 | argument corresponding to code | epilogues.go:12:37:12:40 | initialization of code | -| epilogues.go:12:37:12:40 | initialization of code | epilogues.go:13:2:13:12 | selection of Println | -| epilogues.go:13:2:13:12 | selection of Println | epilogues.go:13:14:13:14 | l | -| epilogues.go:13:2:13:33 | call to Println | epilogues.go:12:1:14:1 | exit | -| epilogues.go:13:14:13:14 | implicit dereference | epilogues.go:12:1:14:1 | exit | -| epilogues.go:13:14:13:14 | implicit dereference | epilogues.go:13:14:13:21 | selection of prefix | -| epilogues.go:13:14:13:14 | l | epilogues.go:13:14:13:14 | implicit dereference | -| epilogues.go:13:14:13:21 | selection of prefix | epilogues.go:13:24:13:26 | msg | -| epilogues.go:13:24:13:26 | msg | epilogues.go:13:29:13:32 | code | -| epilogues.go:13:29:13:32 | code | epilogues.go:13:2:13:33 | call to Println | -| epilogues.go:16:1:18:1 | entry | epilogues.go:16:7:16:7 | argument corresponding to l | -| epilogues.go:16:1:18:1 | function declaration | epilogues.go:23:6:23:15 | skip | -| epilogues.go:16:7:16:7 | argument corresponding to l | epilogues.go:16:7:16:7 | initialization of l | -| epilogues.go:16:7:16:7 | initialization of l | epilogues.go:16:29:16:31 | argument corresponding to msg | -| epilogues.go:16:20:16:27 | skip | epilogues.go:16:1:18:1 | function declaration | -| epilogues.go:16:29:16:31 | argument corresponding to msg | epilogues.go:16:29:16:31 | initialization of msg | -| epilogues.go:16:29:16:31 | initialization of msg | epilogues.go:17:2:17:12 | selection of Println | -| epilogues.go:17:2:17:12 | selection of Println | epilogues.go:17:14:17:14 | l | -| epilogues.go:17:2:17:27 | call to Println | epilogues.go:16:1:18:1 | exit | -| epilogues.go:17:14:17:14 | l | epilogues.go:17:14:17:21 | selection of prefix | -| epilogues.go:17:14:17:21 | selection of prefix | epilogues.go:17:24:17:26 | msg | -| epilogues.go:17:24:17:26 | msg | epilogues.go:17:2:17:27 | call to Println | -| epilogues.go:23:1:27:1 | entry | epilogues.go:24:5:24:5 | skip | -| epilogues.go:23:1:27:1 | function declaration | epilogues.go:31:6:31:13 | skip | -| epilogues.go:23:6:23:15 | skip | epilogues.go:23:1:27:1 | function declaration | -| epilogues.go:24:5:24:5 | assignment to r | epilogues.go:24:21:24:21 | r | -| epilogues.go:24:5:24:5 | skip | epilogues.go:24:10:24:16 | recover | -| epilogues.go:24:10:24:16 | recover | epilogues.go:24:10:24:18 | call to recover | -| epilogues.go:24:10:24:18 | call to recover | epilogues.go:24:5:24:5 | assignment to r | -| epilogues.go:24:21:24:21 | r | epilogues.go:24:26:24:28 | nil | -| epilogues.go:24:21:24:28 | ...!=... | epilogues.go:23:1:27:1 | exit | -| epilogues.go:24:21:24:28 | ...!=... | epilogues.go:24:21:24:28 | ...!=... is false | -| epilogues.go:24:21:24:28 | ...!=... | epilogues.go:24:21:24:28 | ...!=... is true | -| epilogues.go:24:21:24:28 | ...!=... is false | epilogues.go:23:1:27:1 | exit | -| epilogues.go:24:21:24:28 | ...!=... is true | epilogues.go:25:3:25:13 | selection of Println | -| epilogues.go:24:26:24:28 | nil | epilogues.go:24:21:24:28 | ...!=... | -| epilogues.go:25:3:25:13 | selection of Println | epilogues.go:25:15:25:26 | "recovered:" | -| epilogues.go:25:3:25:30 | call to Println | epilogues.go:23:1:27:1 | exit | -| epilogues.go:25:15:25:26 | "recovered:" | epilogues.go:25:29:25:29 | r | -| epilogues.go:25:29:25:29 | r | epilogues.go:25:3:25:30 | call to Println | -| epilogues.go:31:1:33:1 | entry | epilogues.go:31:15:31:15 | argument corresponding to x | -| epilogues.go:31:1:33:1 | function declaration | epilogues.go:36:6:36:12 | skip | -| epilogues.go:31:6:31:13 | skip | epilogues.go:31:1:33:1 | function declaration | -| epilogues.go:31:15:31:15 | argument corresponding to x | epilogues.go:31:15:31:15 | initialization of x | -| epilogues.go:31:15:31:15 | initialization of x | epilogues.go:32:9:32:9 | x | -| epilogues.go:32:2:32:13 | return statement | epilogues.go:31:1:33:1 | exit | -| epilogues.go:32:9:32:9 | x | epilogues.go:32:13:32:13 | 2 | -| epilogues.go:32:9:32:13 | ...*... | epilogues.go:32:2:32:13 | return statement | -| epilogues.go:32:13:32:13 | 2 | epilogues.go:32:9:32:13 | ...*... | -| epilogues.go:36:1:38:1 | entry | epilogues.go:37:2:37:12 | selection of Println | -| epilogues.go:36:1:38:1 | function declaration | epilogues.go:42:6:42:18 | skip | -| epilogues.go:36:6:36:12 | skip | epilogues.go:36:1:38:1 | function declaration | -| epilogues.go:37:2:37:12 | selection of Println | epilogues.go:37:14:37:19 | "void" | -| epilogues.go:37:2:37:20 | call to Println | epilogues.go:36:1:38:1 | exit | -| epilogues.go:37:14:37:19 | "void" | epilogues.go:37:2:37:20 | call to Println | -| epilogues.go:42:1:48:1 | entry | epilogues.go:42:20:42:20 | argument corresponding to x | -| epilogues.go:42:1:48:1 | function declaration | epilogues.go:51:6:51:21 | skip | -| epilogues.go:42:6:42:18 | skip | epilogues.go:42:1:48:1 | function declaration | -| epilogues.go:42:20:42:20 | argument corresponding to x | epilogues.go:42:20:42:20 | initialization of x | -| epilogues.go:42:20:42:20 | initialization of x | epilogues.go:42:28:42:33 | zero value for result | -| epilogues.go:42:28:42:33 | implicit read of result | epilogues.go:42:40:42:42 | implicit read of err | -| epilogues.go:42:28:42:33 | initialization of result | epilogues.go:42:40:42:42 | zero value for err | -| epilogues.go:42:28:42:33 | zero value for result | epilogues.go:42:28:42:33 | initialization of result | -| epilogues.go:42:40:42:42 | implicit read of err | epilogues.go:42:1:48:1 | exit | -| epilogues.go:42:40:42:42 | initialization of err | epilogues.go:43:5:43:5 | x | -| epilogues.go:42:40:42:42 | zero value for err | epilogues.go:42:40:42:42 | initialization of err | -| epilogues.go:43:5:43:5 | x | epilogues.go:43:9:43:9 | 0 | -| epilogues.go:43:5:43:9 | ...<... | epilogues.go:43:5:43:9 | ...<... is false | -| epilogues.go:43:5:43:9 | ...<... | epilogues.go:43:5:43:9 | ...<... is true | -| epilogues.go:43:5:43:9 | ...<... is false | epilogues.go:47:9:47:9 | x | -| epilogues.go:43:5:43:9 | ...<... is true | epilogues.go:44:3:44:8 | skip | -| epilogues.go:43:9:43:9 | 0 | epilogues.go:43:5:43:9 | ...<... | -| epilogues.go:44:3:44:8 | assignment to result | epilogues.go:45:3:45:8 | return statement | -| epilogues.go:44:3:44:8 | skip | epilogues.go:44:13:44:13 | x | -| epilogues.go:44:12:44:13 | -... | epilogues.go:44:3:44:8 | assignment to result | -| epilogues.go:44:13:44:13 | x | epilogues.go:44:12:44:13 | -... | -| epilogues.go:45:3:45:8 | return statement | epilogues.go:42:28:42:33 | implicit read of result | -| epilogues.go:47:2:47:14 | return statement | epilogues.go:42:28:42:33 | implicit read of result | -| epilogues.go:47:9:47:9 | implicit write of result | epilogues.go:47:12:47:14 | nil | -| epilogues.go:47:9:47:9 | x | epilogues.go:47:9:47:9 | implicit write of result | -| epilogues.go:47:12:47:14 | implicit write of err | epilogues.go:47:2:47:14 | return statement | -| epilogues.go:47:12:47:14 | nil | epilogues.go:47:12:47:14 | implicit write of err | -| epilogues.go:51:1:54:1 | entry | epilogues.go:51:23:51:23 | argument corresponding to x | -| epilogues.go:51:1:54:1 | function declaration | epilogues.go:59:6:59:25 | skip | -| epilogues.go:51:6:51:21 | skip | epilogues.go:51:1:54:1 | function declaration | -| epilogues.go:51:23:51:23 | argument corresponding to x | epilogues.go:51:23:51:23 | initialization of x | -| epilogues.go:51:23:51:23 | initialization of x | epilogues.go:51:31:51:31 | zero value for n | -| epilogues.go:51:31:51:31 | implicit read of n | epilogues.go:51:1:54:1 | exit | -| epilogues.go:51:31:51:31 | initialization of n | epilogues.go:52:2:52:2 | skip | -| epilogues.go:51:31:51:31 | zero value for n | epilogues.go:51:31:51:31 | initialization of n | -| epilogues.go:52:2:52:2 | assignment to n | epilogues.go:53:2:53:7 | return statement | -| epilogues.go:52:2:52:2 | skip | epilogues.go:52:6:52:6 | x | -| epilogues.go:52:6:52:6 | x | epilogues.go:52:10:52:10 | 1 | -| epilogues.go:52:6:52:10 | ...+... | epilogues.go:52:2:52:2 | assignment to n | -| epilogues.go:52:10:52:10 | 1 | epilogues.go:52:6:52:10 | ...+... | -| epilogues.go:53:2:53:7 | return statement | epilogues.go:51:31:51:31 | implicit read of n | -| epilogues.go:59:1:62:1 | entry | epilogues.go:59:27:59:27 | argument corresponding to l | -| epilogues.go:59:1:62:1 | function declaration | epilogues.go:66:6:66:26 | skip | -| epilogues.go:59:6:59:25 | skip | epilogues.go:59:1:62:1 | function declaration | -| epilogues.go:59:27:59:27 | argument corresponding to l | epilogues.go:59:27:59:27 | initialization of l | -| epilogues.go:59:27:59:27 | initialization of l | epilogues.go:59:41:59:45 | argument corresponding to items | -| epilogues.go:59:41:59:45 | argument corresponding to items | epilogues.go:59:41:59:45 | initialization of items | -| epilogues.go:59:41:59:45 | initialization of items | epilogues.go:60:8:60:8 | l | -| epilogues.go:60:2:60:33 | defer statement | epilogues.go:61:2:61:12 | selection of Println | -| epilogues.go:60:8:60:8 | l | epilogues.go:60:8:60:12 | selection of log | -| epilogues.go:60:8:60:12 | selection of log | epilogues.go:60:14:60:20 | "count" | -| epilogues.go:60:8:60:33 | call to log | epilogues.go:59:1:62:1 | exit | -| epilogues.go:60:14:60:20 | "count" | epilogues.go:60:23:60:25 | len | -| epilogues.go:60:23:60:25 | len | epilogues.go:60:27:60:31 | items | -| epilogues.go:60:23:60:32 | call to len | epilogues.go:60:2:60:33 | defer statement | -| epilogues.go:60:27:60:31 | items | epilogues.go:60:23:60:32 | call to len | -| epilogues.go:61:2:61:12 | selection of Println | epilogues.go:61:14:61:25 | "processing" | -| epilogues.go:61:2:61:38 | call to Println | epilogues.go:60:8:60:33 | call to log | -| epilogues.go:61:14:61:25 | "processing" | epilogues.go:61:28:61:30 | len | -| epilogues.go:61:28:61:30 | len | epilogues.go:61:32:61:36 | items | -| epilogues.go:61:28:61:37 | call to len | epilogues.go:61:2:61:38 | call to Println | -| epilogues.go:61:32:61:36 | items | epilogues.go:61:28:61:37 | call to len | -| epilogues.go:66:1:71:1 | entry | epilogues.go:66:28:66:33 | argument corresponding to prefix | -| epilogues.go:66:1:71:1 | function declaration | epilogues.go:77:6:77:20 | skip | -| epilogues.go:66:6:66:26 | skip | epilogues.go:66:1:71:1 | function declaration | -| epilogues.go:66:28:66:33 | argument corresponding to prefix | epilogues.go:66:28:66:33 | initialization of prefix | -| epilogues.go:66:28:66:33 | initialization of prefix | epilogues.go:67:2:67:2 | skip | -| epilogues.go:67:2:67:2 | assignment to l | epilogues.go:68:8:68:8 | l | -| epilogues.go:67:2:67:2 | skip | epilogues.go:67:7:67:31 | struct literal | -| epilogues.go:67:7:67:31 | struct literal | epilogues.go:67:25:67:30 | prefix | -| epilogues.go:67:17:67:30 | init of key-value pair | epilogues.go:67:2:67:2 | assignment to l | -| epilogues.go:67:25:67:30 | prefix | epilogues.go:67:17:67:30 | init of key-value pair | -| epilogues.go:68:2:68:24 | defer statement | epilogues.go:69:10:69:10 | l | -| epilogues.go:68:8:68:8 | l | epilogues.go:68:8:68:17 | selection of logValue | -| epilogues.go:68:8:68:17 | selection of logValue | epilogues.go:68:19:68:23 | "bye" | -| epilogues.go:68:8:68:24 | call to logValue | epilogues.go:66:1:71:1 | exit | -| epilogues.go:68:19:68:23 | "bye" | epilogues.go:68:2:68:24 | defer statement | -| epilogues.go:69:2:69:25 | defer statement | epilogues.go:70:2:70:12 | selection of Println | -| epilogues.go:69:8:69:15 | selection of log | epilogues.go:69:17:69:21 | "ptr" | -| epilogues.go:69:8:69:25 | call to log | epilogues.go:68:8:68:24 | call to logValue | -| epilogues.go:69:9:69:10 | &... | epilogues.go:69:8:69:15 | selection of log | -| epilogues.go:69:10:69:10 | l | epilogues.go:69:9:69:10 | &... | -| epilogues.go:69:17:69:21 | "ptr" | epilogues.go:69:24:69:24 | 7 | -| epilogues.go:69:24:69:24 | 7 | epilogues.go:69:2:69:25 | defer statement | -| epilogues.go:70:2:70:12 | selection of Println | epilogues.go:70:14:70:19 | "body" | -| epilogues.go:70:2:70:20 | call to Println | epilogues.go:69:8:69:25 | call to log | -| epilogues.go:70:14:70:19 | "body" | epilogues.go:70:2:70:20 | call to Println | -| epilogues.go:77:1:82:1 | entry | epilogues.go:77:22:77:22 | argument corresponding to x | -| epilogues.go:77:1:82:1 | function declaration | epilogues.go:87:6:87:20 | skip | -| epilogues.go:77:6:77:20 | skip | epilogues.go:77:1:82:1 | function declaration | -| epilogues.go:77:22:77:22 | argument corresponding to x | epilogues.go:77:22:77:22 | initialization of x | -| epilogues.go:77:22:77:22 | initialization of x | epilogues.go:78:8:80:2 | function literal | -| epilogues.go:78:2:80:15 | defer statement | epilogues.go:81:2:81:12 | selection of Println | -| epilogues.go:78:8:80:2 | entry | epilogues.go:78:13:78:17 | argument corresponding to label | -| epilogues.go:78:8:80:2 | function literal | epilogues.go:80:4:80:9 | "done" | -| epilogues.go:78:8:80:15 | function call | epilogues.go:77:1:82:1 | exit | -| epilogues.go:78:13:78:17 | argument corresponding to label | epilogues.go:78:13:78:17 | initialization of label | -| epilogues.go:78:13:78:17 | initialization of label | epilogues.go:78:27:78:27 | argument corresponding to n | -| epilogues.go:78:27:78:27 | argument corresponding to n | epilogues.go:78:27:78:27 | initialization of n | -| epilogues.go:78:27:78:27 | initialization of n | epilogues.go:79:3:79:13 | selection of Println | -| epilogues.go:79:3:79:13 | selection of Println | epilogues.go:79:15:79:19 | label | -| epilogues.go:79:3:79:23 | call to Println | epilogues.go:78:8:80:2 | exit | -| epilogues.go:79:15:79:19 | label | epilogues.go:79:22:79:22 | n | -| epilogues.go:79:22:79:22 | n | epilogues.go:79:3:79:23 | call to Println | -| epilogues.go:80:4:80:9 | "done" | epilogues.go:80:12:80:12 | x | -| epilogues.go:80:12:80:12 | x | epilogues.go:80:14:80:14 | 1 | -| epilogues.go:80:12:80:14 | ...+... | epilogues.go:78:2:80:15 | defer statement | -| epilogues.go:80:14:80:14 | 1 | epilogues.go:80:12:80:14 | ...+... | -| epilogues.go:81:2:81:12 | selection of Println | epilogues.go:81:14:81:19 | "body" | -| epilogues.go:81:2:81:23 | call to Println | epilogues.go:78:8:80:15 | function call | -| epilogues.go:81:14:81:19 | "body" | epilogues.go:81:22:81:22 | x | -| epilogues.go:81:22:81:22 | x | epilogues.go:81:2:81:23 | call to Println | -| epilogues.go:87:1:98:1 | entry | epilogues.go:87:22:87:22 | argument corresponding to x | -| epilogues.go:87:1:98:1 | function declaration | epilogues.go:102:6:102:24 | skip | -| epilogues.go:87:6:87:20 | skip | epilogues.go:87:1:98:1 | function declaration | -| epilogues.go:87:22:87:22 | argument corresponding to x | epilogues.go:87:22:87:22 | initialization of x | -| epilogues.go:87:22:87:22 | initialization of x | epilogues.go:87:30:87:35 | zero value for result | -| epilogues.go:87:30:87:35 | implicit read of result | epilogues.go:87:1:98:1 | exit | -| epilogues.go:87:30:87:35 | initialization of result | epilogues.go:88:8:92:2 | function literal | -| epilogues.go:87:30:87:35 | zero value for result | epilogues.go:87:30:87:35 | initialization of result | -| epilogues.go:88:2:92:4 | defer statement | epilogues.go:93:5:93:5 | x | -| epilogues.go:88:8:92:2 | entry | epilogues.go:89:6:89:6 | skip | -| epilogues.go:88:8:92:2 | function literal | epilogues.go:88:2:92:4 | defer statement | -| epilogues.go:88:8:92:4 | function call | epilogues.go:87:1:98:1 | exit | -| epilogues.go:88:8:92:4 | function call | epilogues.go:87:30:87:35 | implicit read of result | -| epilogues.go:89:6:89:6 | assignment to r | epilogues.go:89:22:89:22 | r | -| epilogues.go:89:6:89:6 | skip | epilogues.go:89:11:89:17 | recover | -| epilogues.go:89:11:89:17 | recover | epilogues.go:89:11:89:19 | call to recover | -| epilogues.go:89:11:89:19 | call to recover | epilogues.go:89:6:89:6 | assignment to r | -| epilogues.go:89:22:89:22 | r | epilogues.go:89:27:89:29 | nil | -| epilogues.go:89:22:89:29 | ...!=... | epilogues.go:88:8:92:2 | exit | -| epilogues.go:89:22:89:29 | ...!=... | epilogues.go:89:22:89:29 | ...!=... is false | -| epilogues.go:89:22:89:29 | ...!=... | epilogues.go:89:22:89:29 | ...!=... is true | -| epilogues.go:89:22:89:29 | ...!=... is false | epilogues.go:88:8:92:2 | exit | -| epilogues.go:89:22:89:29 | ...!=... is true | epilogues.go:90:4:90:9 | skip | -| epilogues.go:89:27:89:29 | nil | epilogues.go:89:22:89:29 | ...!=... | -| epilogues.go:90:4:90:9 | assignment to result | epilogues.go:88:8:92:2 | exit | -| epilogues.go:90:4:90:9 | skip | epilogues.go:90:13:90:14 | -... | -| epilogues.go:90:13:90:14 | -... | epilogues.go:90:4:90:9 | assignment to result | -| epilogues.go:93:5:93:5 | x | epilogues.go:93:9:93:9 | 0 | -| epilogues.go:93:5:93:9 | ...<... | epilogues.go:93:5:93:9 | ...<... is false | -| epilogues.go:93:5:93:9 | ...<... | epilogues.go:93:5:93:9 | ...<... is true | -| epilogues.go:93:5:93:9 | ...<... is false | epilogues.go:96:2:96:7 | skip | -| epilogues.go:93:5:93:9 | ...<... is true | epilogues.go:94:3:94:7 | panic | -| epilogues.go:93:9:93:9 | 0 | epilogues.go:93:5:93:9 | ...<... | -| epilogues.go:94:3:94:7 | panic | epilogues.go:94:9:94:13 | "neg" | -| epilogues.go:94:3:94:14 | call to panic | epilogues.go:88:8:92:4 | function call | -| epilogues.go:94:9:94:13 | "neg" | epilogues.go:94:3:94:14 | call to panic | -| epilogues.go:96:2:96:7 | assignment to result | epilogues.go:97:9:97:14 | result | -| epilogues.go:96:2:96:7 | skip | epilogues.go:96:11:96:11 | x | -| epilogues.go:96:11:96:11 | x | epilogues.go:96:15:96:15 | x | -| epilogues.go:96:11:96:15 | ...*... | epilogues.go:96:2:96:7 | assignment to result | -| epilogues.go:96:15:96:15 | x | epilogues.go:96:11:96:15 | ...*... | -| epilogues.go:97:2:97:14 | return statement | epilogues.go:88:8:92:4 | function call | -| epilogues.go:97:9:97:14 | implicit write of result | epilogues.go:97:2:97:14 | return statement | -| epilogues.go:97:9:97:14 | result | epilogues.go:97:9:97:14 | implicit write of result | -| epilogues.go:102:1:110:1 | entry | epilogues.go:102:26:102:26 | argument corresponding to x | -| epilogues.go:102:1:110:1 | function declaration | epilogues.go:115:6:115:22 | skip | -| epilogues.go:102:6:102:24 | skip | epilogues.go:102:1:110:1 | function declaration | -| epilogues.go:102:26:102:26 | argument corresponding to x | epilogues.go:102:26:102:26 | initialization of x | -| epilogues.go:102:26:102:26 | initialization of x | epilogues.go:102:34:102:35 | zero value for ok | -| epilogues.go:102:34:102:35 | implicit read of ok | epilogues.go:102:43:102:43 | implicit read of n | -| epilogues.go:102:34:102:35 | initialization of ok | epilogues.go:102:43:102:43 | zero value for n | -| epilogues.go:102:34:102:35 | zero value for ok | epilogues.go:102:34:102:35 | initialization of ok | -| epilogues.go:102:43:102:43 | implicit read of n | epilogues.go:102:1:110:1 | exit | -| epilogues.go:102:43:102:43 | initialization of n | epilogues.go:103:8:103:17 | epiRecover | -| epilogues.go:102:43:102:43 | zero value for n | epilogues.go:102:43:102:43 | initialization of n | -| epilogues.go:103:2:103:19 | defer statement | epilogues.go:104:5:104:5 | x | -| epilogues.go:103:8:103:17 | epiRecover | epilogues.go:103:2:103:19 | defer statement | -| epilogues.go:103:8:103:19 | call to epiRecover | epilogues.go:102:1:110:1 | exit | -| epilogues.go:103:8:103:19 | call to epiRecover | epilogues.go:102:34:102:35 | implicit read of ok | -| epilogues.go:104:5:104:5 | x | epilogues.go:104:10:104:10 | 0 | -| epilogues.go:104:5:104:10 | ...==... | epilogues.go:104:5:104:10 | ...==... is false | -| epilogues.go:104:5:104:10 | ...==... | epilogues.go:104:5:104:10 | ...==... is true | -| epilogues.go:104:5:104:10 | ...==... is false | epilogues.go:107:2:107:2 | skip | -| epilogues.go:104:5:104:10 | ...==... is true | epilogues.go:105:3:105:8 | return statement | -| epilogues.go:104:10:104:10 | 0 | epilogues.go:104:5:104:10 | ...==... | -| epilogues.go:105:3:105:8 | return statement | epilogues.go:103:8:103:19 | call to epiRecover | -| epilogues.go:107:2:107:2 | assignment to n | epilogues.go:108:2:108:3 | skip | -| epilogues.go:107:2:107:2 | skip | epilogues.go:107:6:107:6 | x | -| epilogues.go:107:6:107:6 | x | epilogues.go:107:2:107:2 | assignment to n | -| epilogues.go:108:2:108:3 | assignment to ok | epilogues.go:109:2:109:7 | return statement | -| epilogues.go:108:2:108:3 | skip | epilogues.go:108:7:108:10 | true | -| epilogues.go:108:7:108:10 | true | epilogues.go:108:2:108:3 | assignment to ok | -| epilogues.go:109:2:109:7 | return statement | epilogues.go:103:8:103:19 | call to epiRecover | -| epilogues.go:115:1:118:1 | entry | epilogues.go:116:8:116:17 | epiRecover | -| epilogues.go:115:1:118:1 | function declaration | epilogues.go:0:0:0:0 | exit | -| epilogues.go:115:6:115:22 | skip | epilogues.go:115:1:118:1 | function declaration | -| epilogues.go:116:2:116:19 | defer statement | epilogues.go:117:2:117:6 | panic | -| epilogues.go:116:8:116:17 | epiRecover | epilogues.go:116:2:116:19 | defer statement | -| epilogues.go:116:8:116:19 | call to epiRecover | epilogues.go:115:1:118:1 | exit | -| epilogues.go:117:2:117:6 | panic | epilogues.go:117:8:117:13 | "boom" | -| epilogues.go:117:2:117:14 | call to panic | epilogues.go:116:8:116:19 | call to epiRecover | -| epilogues.go:117:8:117:13 | "boom" | epilogues.go:117:2:117:14 | call to panic | -| 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: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 | -| equalitytests.go:11:20:11:21 | initialization of i1 | equalitytests.go:11:28:11:29 | argument corresponding to i2 | -| equalitytests.go:11:28:11:29 | argument corresponding to i2 | equalitytests.go:11:28:11:29 | initialization of i2 | -| equalitytests.go:11:28:11:29 | initialization of i2 | equalitytests.go:11:36:11:37 | argument corresponding to e1 | -| equalitytests.go:11:36:11:37 | argument corresponding to e1 | equalitytests.go:11:36:11:37 | initialization of e1 | -| equalitytests.go:11:36:11:37 | initialization of e1 | equalitytests.go:11:46:11:47 | argument corresponding to e2 | -| equalitytests.go:11:46:11:47 | argument corresponding to e2 | equalitytests.go:11:46:11:47 | initialization of e2 | -| equalitytests.go:11:46:11:47 | initialization of e2 | equalitytests.go:11:56:11:57 | argument corresponding to s1 | -| equalitytests.go:11:56:11:57 | argument corresponding to s1 | equalitytests.go:11:56:11:57 | initialization of s1 | -| equalitytests.go:11:56:11:57 | initialization of s1 | equalitytests.go:11:83:11:84 | argument corresponding to s2 | -| equalitytests.go:11:83:11:84 | argument corresponding to s2 | equalitytests.go:11:83:11:84 | initialization of s2 | -| equalitytests.go:11:83:11:84 | initialization of s2 | equalitytests.go:11:110:11:111 | argument corresponding to s3 | -| equalitytests.go:11:110:11:111 | argument corresponding to s3 | equalitytests.go:11:110:11:111 | initialization of s3 | -| equalitytests.go:11:110:11:111 | initialization of s3 | equalitytests.go:11:134:11:135 | argument corresponding to s4 | -| equalitytests.go:11:134:11:135 | argument corresponding to s4 | equalitytests.go:11:134:11:135 | initialization of s4 | -| equalitytests.go:11:134:11:135 | initialization of s4 | equalitytests.go:11:158:11:159 | argument corresponding to a1 | -| equalitytests.go:11:158:11:159 | argument corresponding to a1 | equalitytests.go:11:158:11:159 | initialization of a1 | -| equalitytests.go:11:158:11:159 | initialization of a1 | equalitytests.go:11:171:11:172 | argument corresponding to a2 | -| equalitytests.go:11:171:11:172 | argument corresponding to a2 | equalitytests.go:11:171:11:172 | initialization of a2 | -| equalitytests.go:11:171:11:172 | initialization of a2 | equalitytests.go:11:184:11:185 | argument corresponding to a3 | -| equalitytests.go:11:184:11:185 | argument corresponding to a3 | equalitytests.go:11:184:11:185 | initialization of a3 | -| 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: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: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:21:12:22 | e1 | equalitytests.go:12:27:12:28 | e2 | -| 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:33:12:34 | s1 | equalitytests.go:12:39:12:40 | s2 | -| 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:45:12:46 | s3 | equalitytests.go:12:51:12:52 | s4 | -| 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:57:12:58 | a1 | equalitytests.go:12:63:12:64 | a2 | -| 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: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: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: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 | -| exprs.go:6:6:6:6 | skip | exprs.go:6:9:6:9 | skip | -| exprs.go:6:9:6:9 | assignment to j | exprs.go:7:6:7:6 | skip | -| exprs.go:6:9:6:9 | skip | exprs.go:6:13:6:13 | 0 | -| exprs.go:6:13:6:13 | 0 | exprs.go:6:16:6:26 | ...+... | -| exprs.go:6:16:6:26 | ...+... | exprs.go:6:6:6:6 | assignment to i | -| exprs.go:7:6:7:6 | assignment to k | exprs.go:8:2:8:2 | skip | -| exprs.go:7:6:7:6 | skip | exprs.go:7:10:7:10 | i | -| exprs.go:7:10:7:10 | i | exprs.go:7:14:7:14 | 2 | -| exprs.go:7:10:7:16 | ...+... | exprs.go:7:6:7:6 | assignment to k | -| exprs.go:7:14:7:14 | 2 | exprs.go:7:16:7:16 | j | -| exprs.go:7:14:7:16 | ...*... | exprs.go:7:10:7:16 | ...+... | -| exprs.go:7:16:7:16 | j | exprs.go:7:14:7:16 | ...*... | -| exprs.go:8:2:8:2 | assignment to s | exprs.go:9:2:9:3 | skip | -| exprs.go:8:2:8:2 | skip | exprs.go:8:7:8:12 | "k = " | -| exprs.go:8:7:8:12 | "k = " | exprs.go:8:23:8:23 | k | -| exprs.go:8:7:8:24 | ...+... | exprs.go:8:2:8:2 | assignment to s | -| exprs.go:8:16:8:24 | type conversion | exprs.go:8:7:8:24 | ...+... | -| 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: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 | -| exprs.go:9:16:9:16 | argument corresponding to b | exprs.go:9:16:9:16 | initialization of b | -| 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: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 | -| exprs.go:9:50:9:50 | b | exprs.go:9:48:9:50 | ...*... | -| exprs.go:9:54:9:59 | type conversion | exprs.go:9:48:9:59 | ...<... | -| exprs.go:9:58:9:58 | z | exprs.go:9:54:9:59 | type conversion | -| exprs.go:10:2:10:8 | assignment to struct1 | exprs.go:11:2:11:8 | skip | -| exprs.go:10:2:10:8 | skip | exprs.go:10:13:10:32 | struct literal | -| exprs.go:10:13:10:32 | struct literal | exprs.go:10:2:10:8 | assignment to struct1 | -| exprs.go:11:2:11:8 | assignment to struct2 | exprs.go:15:2:15:8 | skip | -| exprs.go:11:2:11:8 | skip | exprs.go:11:13:14:21 | struct literal | -| exprs.go:11:13:14:21 | struct literal | 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: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 | 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 | .../... | -| exprs.go:14:16:14:19 | .../... | exprs.go:14:7:14:20 | call to fn | -| exprs.go:15:2:15:8 | assignment to struct3 | exprs.go:16:2:16:5 | skip | -| exprs.go:15:2:15:8 | skip | exprs.go:15:13:15:58 | struct literal | -| exprs.go:15:13:15:58 | struct literal | exprs.go:15:35:15:41 | struct1 | -| exprs.go:15:32:15:43 | init of key-value pair | exprs.go:15:49:15:55 | struct2 | -| exprs.go:15:35:15:41 | struct1 | exprs.go:15:35:15:43 | selection of x | -| exprs.go:15:35:15:43 | selection of x | exprs.go:15:32:15:43 | init of key-value pair | -| exprs.go:15:46:15:57 | init of key-value pair | exprs.go:15:2:15:8 | assignment to struct3 | -| exprs.go:15:49:15:55 | struct2 | exprs.go:15:49:15:57 | selection of x | -| 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: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: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: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 | -| exprs.go:18:9:18:22 | slice literal | exprs.go:18:18:18:18 | element index | -| exprs.go:18:18:18:18 | element index | exprs.go:18:18:18:18 | s | -| exprs.go:18:18:18:18 | init of s | exprs.go:18:21:18:21 | element index | -| exprs.go:18:18:18:18 | s | exprs.go:18:18:18:18 | init of s | -| exprs.go:18:21:18:21 | element index | exprs.go:18:21:18:21 | s | -| exprs.go:18:21:18:21 | init of s | exprs.go:18:2:18:4 | assignment to slc | -| exprs.go:18:21:18:21 | s | exprs.go:18:21:18:21 | init of s | -| exprs.go:19:2:19:3 | assignment to mp | exprs.go:20:2:20:5 | skip | -| 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: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: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: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 | -| exprs.go:21:2:21:5 | assignment to slc3 | exprs.go:22:2:22:5 | skip | -| 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: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: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 | -| exprs.go:23:2:23:5 | skip | exprs.go:23:10:23:13 | slc4 | -| 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: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:16:24:16 | 2 | exprs.go:24:10:24:17 | cap | -| 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 | 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:31:25:31 | 0 | exprs.go:25:26:25:32 | index expression | -| 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: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:21 | selection of x | exprs.go:29:2:29:21 | return statement | -| 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 | -| exprs.go:32:12:32:14 | initialization of arg | exprs.go:33:5:33:5 | skip | -| exprs.go:33:5:33:5 | assignment to p | exprs.go:33:5:33:24 | ... := ...[1] | -| exprs.go:33:5:33:5 | skip | exprs.go:33:8:33:9 | skip | -| exprs.go:33:5:33:24 | ... := ...[0] | exprs.go:33:5:33:5 | assignment to p | -| exprs.go:33:5:33:24 | ... := ...[1] | exprs.go:33:8:33:9 | assignment to ok | -| exprs.go:33:8:33:9 | assignment to ok | exprs.go:33:27:33:28 | ok | -| 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: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:32:1:37:1 | exit | -| exprs.go:36:9:36:10 | -... | exprs.go:36:2:36:10 | return statement | -| 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 | -| exprs.go:39:12:39:14 | initialization of arg | exprs.go:40:6:40:6 | skip | -| exprs.go:40:6:40:6 | assignment to p | exprs.go:41:6:41:7 | skip | -| exprs.go:40:6:40:6 | skip | exprs.go:40:6:40:6 | zero value for p | -| exprs.go:40:6:40:6 | zero value for p | exprs.go:40:6:40:6 | assignment to p | -| exprs.go:41:6:41:7 | assignment to ok | exprs.go:42:2:42:2 | skip | -| exprs.go:41:6:41:7 | skip | exprs.go:41:6:41:7 | zero value for ok | -| exprs.go:41:6:41:7 | zero value for ok | exprs.go:41:6:41:7 | assignment to ok | -| exprs.go:42:2:42:2 | assignment to p | exprs.go:42:2:42:20 | ... = ...[1] | -| exprs.go:42:2:42:2 | skip | exprs.go:42:5:42:6 | skip | -| exprs.go:42:2:42:20 | ... = ...[0] | exprs.go:42:2:42:2 | assignment to p | -| exprs.go:42:2:42:20 | ... = ...[1] | exprs.go:42:5:42:6 | assignment to ok | -| exprs.go:42:5:42:6 | assignment to ok | exprs.go:43:5:43:6 | ok | -| 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: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:39:1:47:1 | exit | -| exprs.go:46:9:46:10 | -... | exprs.go:46:2:46:10 | return statement | -| 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: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: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: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 | -| exprs.go:50:27:50:29 | rhs of increment statement | exprs.go:50:27:50:29 | increment statement | -| exprs.go:51:3:51:5 | assignment to res | exprs.go:50:27:50:27 | i | -| 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: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: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: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:13:57:14 | xs | exprs.go:57:9:57:15 | call to sum | -| 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: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 | -| exprs.go:61:15:61:15 | init of 1 | exprs.go:61:18:61:18 | element index | -| exprs.go:61:18:61:18 | 2 | exprs.go:61:18:61:18 | init of 2 | -| exprs.go:61:18:61:18 | element index | exprs.go:61:18:61:18 | 2 | -| exprs.go:61:18:61:18 | init of 2 | exprs.go:61:21:61:21 | element index | -| exprs.go:61:21:61:21 | 3 | exprs.go:61:21:61:21 | init of 3 | -| exprs.go:61:21:61:21 | element index | exprs.go:61:21:61:21 | 3 | -| exprs.go:61:21:61:21 | init of 3 | exprs.go:61:2:61:22 | return statement | -| exprs.go:64:5:64:5 | assignment to s | exprs.go:65:5:65:6 | skip | -| exprs.go:64:5:64:5 | skip | exprs.go:64:9:64:11 | sum | -| exprs.go:64:9:64:11 | sum | exprs.go:64:13:64:16 | ints | -| exprs.go:64:9:64:19 | call to sum | exprs.go:0:0:0:0 | exit | -| exprs.go:64:9:64:19 | call to sum | exprs.go:64:5:64:5 | assignment to s | -| exprs.go:64:13:64:16 | ints | exprs.go:64:13:64:18 | call to ints | -| exprs.go:64:13:64:18 | call to ints | exprs.go:0:0:0:0 | exit | -| exprs.go:64:13:64:18 | call to ints | exprs.go:64:9:64:19 | call to sum | -| exprs.go:65:5:65:6 | assignment to s2 | exprs.go:67:6:67:8 | skip | -| exprs.go:65:5:65:6 | skip | exprs.go:65:10:65:13 | sum2 | -| exprs.go:65:10:65:13 | sum2 | exprs.go:65:15:65:18 | ints | -| exprs.go:65:10:65:24 | call to sum2 | exprs.go:0:0:0:0 | exit | -| exprs.go:65:10:65:24 | call to sum2 | exprs.go:65:5:65:6 | assignment to s2 | -| 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: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: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: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: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 | -| exprs.go:75:5:75:6 | skip | exprs.go:75:10:75:12 | add | -| exprs.go:75:10:75:12 | add | exprs.go:75:14:75:16 | gen | -| exprs.go:75:10:75:19 | call to add | exprs.go:0:0:0:0 | exit | -| exprs.go:75:10:75:19 | call to add | exprs.go:75:5:75:6 | assignment to s3 | -| exprs.go:75:10:75:19 | call to add[0] | exprs.go:75:10:75:19 | call to add[1] | -| exprs.go:75:10:75:19 | call to add[1] | exprs.go:75:10:75:19 | call to add | -| 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: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 | -| exprs.go:77:12:77:12 | initialization of x | exprs.go:77:15:77:15 | argument corresponding to y | -| exprs.go:77:15:77:15 | argument corresponding to y | exprs.go:77:15:77:15 | initialization of y | -| 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: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 | -| exprs.go:78:11:78:11 | x is false | exprs.go:78:11:78:16 | ...&&... | -| 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:22:78:22 | z | exprs.go:78:9:78:22 | ...\|\|... | -| 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 | -| exprs.go:81:18:81:19 | initialization of ch | exprs.go:82:2:82:4 | skip | -| exprs.go:82:2:82:4 | assignment to val | exprs.go:82:2:82:16 | ... := ...[1] | -| exprs.go:82:2:82:4 | skip | exprs.go:82:7:82:8 | skip | -| exprs.go:82:2:82:16 | ... := ...[0] | exprs.go:82:2:82:4 | assignment to val | -| exprs.go:82:2:82:16 | ... := ...[1] | exprs.go:82:7:82:8 | assignment to ok | -| exprs.go:82:7:82:8 | assignment to ok | exprs.go:83:5:83:6 | ok | -| 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: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: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 | -| exprs.go:89:13:89:13 | 1 | exprs.go:89:7:89:9 | assignment to one | -| exprs.go:91:5:91:5 | assignment to a | exprs.go:93:6:93:11 | skip | -| exprs.go:91:5:91:5 | skip | exprs.go:91:9:91:25 | slice literal | -| exprs.go:91:9:91:25 | slice literal | exprs.go:91:15:91:21 | ...+... | -| 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: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 | -| exprs.go:93:13:93:13 | initialization of x | exprs.go:93:16:93:16 | argument corresponding to y | -| exprs.go:93:16:93:16 | argument corresponding to y | exprs.go:93:16:93:16 | initialization of y | -| 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: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: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: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: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: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: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:1:14:59 | exit | -| generic.go:14:57:14:57 | u | generic.go:14:50:14:57 | return statement | -| 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:16:1:18:1 | exit | -| generic.go:17:9:17:9 | t | generic.go:17:2:17:9 | return statement | -| 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: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: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 | -| generic.go:25:2:25:4 | skip | generic.go:25:9:25:35 | struct literal | -| generic.go:25:9:25:35 | struct literal | generic.go:25:32:25:34 | "x" | -| generic.go:25:32:25:34 | "x" | generic.go:25:32:25:34 | init of "x" | -| generic.go:25:32:25:34 | init of "x" | generic.go:25:2:25:4 | assignment to gs1 | -| generic.go:26:2:26:2 | assignment to a | generic.go:27:2:27:4 | skip | -| 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: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 | -| generic.go:27:9:27:48 | struct literal | generic.go:27:40:27:42 | "y" | -| generic.go:27:40:27:42 | "y" | generic.go:27:40:27:42 | init of "y" | -| generic.go:27:40:27:42 | init of "y" | generic.go:27:45:27:47 | "z" | -| generic.go:27:45:27:47 | "z" | generic.go:27:45:27:47 | init of "z" | -| generic.go:27:45:27:47 | init of "z" | generic.go:27:2:27:4 | assignment to gs2 | -| generic.go:28:2:28:2 | assignment to b | generic.go:29:2:29:2 | skip | -| 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: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: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: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 | -| generic.go:31:2:31:53 | ... := ...[0] | generic.go:31:2:31:2 | assignment to e | -| generic.go:31:2:31:53 | ... := ...[1] | generic.go:31:5:31:5 | assignment to f | -| 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: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] | -| generic.go:32:2:32:2 | skip | generic.go:32:5:32:5 | skip | -| generic.go:32:2:32:31 | ... := ...[0] | generic.go:32:2:32:2 | assignment to g | -| generic.go:32:2:32:31 | ... := ...[1] | generic.go:32:5:32:5 | assignment to h | -| 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: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: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: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: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: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: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: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: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 | -| main.go:13:6:13:6 | skip | main.go:13:6:13:6 | zero value for x | -| main.go:13:6:13:6 | zero value for x | main.go:13:6:13:6 | assignment to x | -| main.go:14:2:14:2 | assignment to y | main.go:15:2:15:10 | selection of Print | -| 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: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: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: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: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: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: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 | -| main.go:26:10:26:10 | initialization of x | main.go:27:2:27:2 | skip | -| main.go:27:2:27:2 | assignment to a | main.go:27:5:27:5 | assignment to b | -| main.go:27:2:27:2 | skip | main.go:27:5:27:5 | skip | -| main.go:27:5:27:5 | assignment to b | main.go:28:5:28:8 | cond | -| main.go:27:5:27:5 | skip | main.go:27:10:27:10 | x | -| 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: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: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: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: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: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: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 | -| main.go:39:2:39:2 | skip | main.go:39:7:39:8 | 23 | -| main.go:39:7:39:8 | 23 | main.go:39:2:39:2 | assignment to x | -| main.go:40:2:40:4 | assignment to ptr | main.go:41:5:41:8 | cond | -| main.go:40:2:40:4 | skip | main.go:40:10:40:10 | x | -| 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: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: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: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: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: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: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:9 | 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: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:64:1 | entry | main.go:56:11:56:18 | argument corresponding to selector | -| main.go:56:1:64:1 | function declaration | main.go:66:6:66:10 | skip | -| main.go:56:6:56:9 | skip | main.go:56:1:64:1 | function declaration | -| main.go:56:11:56:18 | argument corresponding to selector | main.go:56:11:56:18 | initialization of selector | -| main.go:56:11:56:18 | initialization of selector | main.go:56:26:56:31 | zero value for result | -| main.go:56:26:56:31 | implicit read of result | main.go:56:1:64:1 | exit | -| main.go:56:26:56:31 | initialization of result | main.go:57:2:57:7 | skip | -| main.go:56:26:56:31 | zero value for result | main.go:56:26:56:31 | initialization of result | -| main.go:57:2:57:7 | assignment to result | main.go:58:5:58:12 | selector | -| main.go:57:2:57:7 | skip | main.go:57:11:57:11 | 0 | -| main.go:57:11:57:11 | 0 | main.go:57:2:57:7 | assignment to result | -| main.go:58:5:58:12 | selector | main.go:58:17:58:17 | 1 | -| main.go:58:5:58:17 | ...==... | main.go:58:5:58:17 | ...==... is false | -| main.go:58:5:58:17 | ...==... | main.go:58:5:58:17 | ...==... is true | -| main.go:58:5:58:17 | ...==... is false | main.go:61:3:61:8 | skip | -| main.go:58:5:58:17 | ...==... is true | main.go:59:10:59:10 | 1 | -| main.go:58:17:58:17 | 1 | main.go:58:5:58:17 | ...==... | -| main.go:59:3:59:10 | return statement | main.go:56:26:56:31 | implicit read of result | -| main.go:59:10:59:10 | 1 | main.go:59:10:59:10 | implicit write of result | -| main.go:59:10:59:10 | implicit write of result | main.go:59:3:59:10 | return statement | -| main.go:61:3:61:8 | assignment to result | main.go:63:2:63:7 | return statement | -| main.go:61:3:61:8 | skip | main.go:61:12:61:12 | 2 | -| main.go:61:12:61:12 | 2 | main.go:61:3:61:8 | assignment to result | -| main.go:63:2:63:7 | return statement | main.go:56:26:56:31 | implicit read of result | -| main.go:66:1:90:1 | entry | main.go:67:6:67:6 | skip | -| main.go:66:1:90:1 | function declaration | main.go:92:6:92:13 | skip | -| main.go:66:6:66:10 | skip | main.go:66:1:90:1 | function declaration | -| main.go:67:6:67:6 | assignment to x | main.go:68:6:68:9 | cond | -| main.go:67:6:67:6 | skip | main.go:67:6:67:6 | zero value for x | -| main.go:67:6:67:6 | zero value for x | main.go:67:6:67:6 | assignment to x | -| main.go:68:6:68:9 | cond | main.go:68:6:68:11 | call to cond | -| main.go:68:6:68:11 | call to cond | main.go:66:1:90:1 | exit | -| main.go:68:6:68:11 | call to cond | main.go:68:6:68:11 | call to cond is false | -| main.go:68:6:68:11 | call to cond | main.go:68:6:68:11 | call to cond is true | -| main.go:68:6:68:11 | call to cond is false | main.go:71:2:71:10 | selection of Print | -| main.go:68:6:68:11 | call to cond is true | main.go:69:3:69:3 | skip | -| main.go:69:3:69:3 | assignment to x | main.go:68:6:68:9 | cond | -| main.go:69:3:69:3 | skip | main.go:69:7:69:7 | 2 | -| main.go:69:7:69:7 | 2 | main.go:69:3:69:3 | assignment to x | -| main.go:71:2:71:10 | selection of Print | main.go:71:12:71:12 | x | -| main.go:71:2:71:13 | call to Print | main.go:66:1:90:1 | exit | -| main.go:71:2:71:13 | call to Print | main.go:73:2:73:2 | skip | -| main.go:71:12:71:12 | x | main.go:71:2:71:13 | call to Print | -| main.go:73:2:73:2 | assignment to y | main.go:74:6:74:6 | skip | -| main.go:73:2:73:2 | skip | main.go:73:7:73:7 | 1 | -| main.go:73:7:73:7 | 1 | main.go:73:2:73:2 | assignment to y | -| main.go:74:6:74:6 | assignment to i | main.go:75:6:75:9 | cond | -| main.go:74:6:74:6 | skip | main.go:74:11:74:11 | 0 | -| main.go:74:11:74:11 | 0 | main.go:74:6:74:6 | assignment to i | -| main.go:74:16:74:16 | i | main.go:74:16:74:18 | 1 | -| main.go:74:16:74:18 | 1 | main.go:74:16:74:18 | rhs of increment statement | -| main.go:74:16:74:18 | increment statement | main.go:75:6:75:9 | cond | -| main.go:74:16:74:18 | rhs of increment statement | main.go:74:16:74:18 | increment statement | -| 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:66:1:90: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:78:3:78:3 | skip | -| 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:80:2:80:10 | selection of Print | -| main.go:78:3:78:3 | assignment to y | main.go:74:16:74:16 | i | -| main.go:78:3:78:3 | skip | main.go:78:7:78:7 | 2 | -| main.go:78:7:78:7 | 2 | main.go:78:3:78:3 | assignment to y | -| main.go:80:2:80:10 | selection of Print | main.go:80:12:80:12 | y | -| main.go:80:2:80:13 | call to Print | main.go:66:1:90:1 | exit | -| main.go:80:2:80:13 | call to Print | main.go:82:2:82:2 | skip | -| main.go:80:12:80:12 | y | main.go:80:2:80:13 | call to Print | -| main.go:82:2:82:2 | assignment to z | main.go:83:6:83:6 | skip | -| main.go:82:2:82:2 | skip | main.go:82:7:82:7 | 1 | -| main.go:82:7:82:7 | 1 | main.go:82:2:82:2 | assignment to z | -| main.go:83:6:83:6 | assignment to i | main.go:84:3:84:3 | skip | -| main.go:83:6:83:6 | skip | main.go:83:11:83:11 | 0 | -| main.go:83:11:83:11 | 0 | main.go:83:6:83:6 | assignment to i | -| main.go:83:16:83:16 | i | main.go:83:16:83:18 | 1 | -| main.go:83:16:83:18 | 1 | main.go:83:16:83:18 | rhs of increment statement | -| main.go:83:16:83:18 | increment statement | main.go:84:3:84:3 | skip | -| main.go:83:16:83:18 | rhs of increment statement | main.go:83:16:83:18 | increment statement | -| main.go:84:3:84:3 | assignment to z | main.go:85:6:85:9 | cond | -| main.go:84:3:84:3 | skip | main.go:84:7:84:7 | 2 | -| main.go:84:7:84:7 | 2 | main.go:84:3:84:3 | assignment to z | -| main.go:85:6:85:9 | cond | main.go:85:6:85:11 | call to cond | -| main.go:85:6:85:11 | call to cond | main.go:66:1:90:1 | exit | -| main.go:85:6:85:11 | call to cond | main.go:85:6:85:11 | call to cond is false | -| main.go:85:6:85:11 | call to cond | main.go:85:6:85:11 | call to cond is true | -| main.go:85:6:85:11 | call to cond is false | main.go:83:16:83:16 | i | -| main.go:85:6:85:11 | call to cond is true | main.go:86:4:86:8 | skip | -| main.go:86:4:86:8 | skip | main.go:89:2:89:10 | selection of Print | -| main.go:89:2:89:10 | selection of Print | main.go:89:12:89:12 | z | -| main.go:89:2:89:13 | call to Print | main.go:66:1:90:1 | exit | -| main.go:89:12:89:12 | z | main.go:89:2:89:13 | call to Print | -| main.go:92:1:96:1 | entry | main.go:92:18:92:18 | zero value for a | -| main.go:92:1:96:1 | function declaration | main.go:98:6:98:23 | skip | -| main.go:92:6:92:13 | skip | main.go:92:1:96:1 | function declaration | -| main.go:92:18:92:18 | implicit read of a | main.go:92:25:92:25 | implicit read of b | -| main.go:92:18:92:18 | initialization of a | main.go:92:25:92:25 | zero value for b | -| main.go:92:18:92:18 | zero value for a | main.go:92:18:92:18 | initialization of a | -| main.go:92:25:92:25 | implicit read of b | main.go:92:1:96:1 | exit | -| main.go:92:25:92:25 | initialization of b | main.go:93:2:93:2 | skip | -| main.go:92:25:92:25 | zero value for b | main.go:92:25:92:25 | initialization of b | -| main.go:93:2:93:2 | assignment to x | main.go:94:2:94:2 | skip | -| main.go:93:2:93:2 | skip | main.go:93:7:93:8 | 23 | -| main.go:93:7:93:8 | 23 | main.go:93:2:93:2 | assignment to x | -| main.go:94:2:94:2 | assignment to x | main.go:94:5:94:5 | assignment to a | -| main.go:94:2:94:2 | skip | main.go:94:5:94:5 | skip | -| main.go:94:5:94:5 | assignment to a | main.go:95:2:95:7 | return statement | -| main.go:94:5:94:5 | skip | main.go:94:9:94:9 | x | -| main.go:94:9:94:9 | x | main.go:94:11:94:12 | 19 | -| main.go:94:9:94:12 | ...+... | main.go:94:15:94:15 | x | -| main.go:94:11:94:12 | 19 | main.go:94:9:94:12 | ...+... | -| main.go:94:15:94:15 | x | main.go:94:2:94:2 | assignment to x | -| main.go:95:2:95:7 | return statement | main.go:92:18:92:18 | implicit read of a | -| main.go:98:1:106:1 | entry | main.go:98:25:98:25 | argument corresponding to x | -| main.go:98:1:106:1 | function declaration | main.go:0:0:0:0 | exit | -| main.go:98:6:98:23 | skip | main.go:98:1:106:1 | function declaration | -| main.go:98:25:98:25 | argument corresponding to x | main.go:98:25:98:25 | initialization of x | -| main.go:98:25:98:25 | initialization of x | main.go:99:2:99:2 | skip | -| main.go:99:2:99:2 | assignment to a | main.go:99:5:99:5 | assignment to b | -| main.go:99:2:99:2 | skip | main.go:99:5:99:5 | skip | -| main.go:99:5:99:5 | assignment to b | main.go:100:5:100:8 | cond | -| main.go:99:5:99:5 | skip | main.go:99:10:99:10 | x | -| main.go:99:10:99:10 | x | main.go:99:13:99:13 | 0 | -| main.go:99:13:99:13 | 0 | main.go:99:2:99:2 | assignment to a | -| main.go:100:5:100:8 | cond | main.go:100:5:100:10 | call to cond | -| main.go:100:5:100:10 | call to cond | main.go:98:1:106:1 | exit | -| main.go:100:5:100:10 | call to cond | main.go:100:5:100:10 | call to cond is false | -| main.go:100:5:100:10 | call to cond | main.go:100:5:100:10 | call to cond is true | -| main.go:100:5:100:10 | call to cond is false | main.go:103:3:103:3 | skip | -| main.go:100:5:100:10 | call to cond is true | main.go:101:3:101:3 | skip | -| main.go:101:3:101:3 | assignment to a | main.go:105:9:105:9 | a | -| main.go:101:3:101:3 | skip | main.go:101:6:101:6 | skip | -| main.go:101:6:101:6 | skip | main.go:101:10:101:10 | b | -| main.go:101:10:101:10 | b | main.go:101:13:101:13 | a | -| main.go:101:13:101:13 | a | main.go:101:3:101:3 | assignment to a | -| main.go:103:3:103:3 | skip | main.go:103:6:103:6 | skip | -| main.go:103:6:103:6 | assignment to b | main.go:105:9:105:9 | a | -| main.go:103:6:103:6 | skip | main.go:103:10:103:10 | b | -| main.go:103:10:103:10 | b | main.go:103:13:103:13 | a | -| main.go:103:13:103:13 | a | main.go:103:6:103:6 | assignment to b | -| main.go:105:2:105:12 | return statement | main.go:98:1:106:1 | exit | -| main.go:105:9:105:9 | a | main.go:105:12:105:12 | b | -| main.go:105:12:105:12 | b | main.go:105:2:105: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: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: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: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: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: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: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: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: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: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: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: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: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: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:16:5:16 | 1 | stmts2.go:5:10:5:17 | call to test7 | -| 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: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 | -| stmts2.go:10:2:10:14 | ... := ...[0] | stmts2.go:10:2:10:14 | ... := ...[1] | -| stmts2.go:10:2:10:14 | ... := ...[1] | stmts2.go:10:5:10:5 | assignment to x | -| 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: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: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: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 | -| stmts2.go:15:13:15:14 | initialization of ch | stmts2.go:17:13:17:14 | ch | -| stmts2.go:16:2:26:2 | select statement | stmts2.go:17:11:17:14 | <-... | -| stmts2.go:16:2:26:2 | select statement | stmts2.go:18:15:18:18 | <-... | -| stmts2.go:16:2:26:2 | select statement | stmts2.go:20:15:20:18 | <-... | -| stmts2.go:16:2:26:2 | select statement | stmts2.go:25:14:25:17 | <-... | -| stmts2.go:17:2:17:15 | skip | stmts2.go:27:9:27:9 | 1 | -| stmts2.go:17:7:17:7 | skip | stmts2.go:17:2:17:15 | skip | -| stmts2.go:17:11:17:14 | <-... | stmts2.go:17:7:17:7 | skip | -| stmts2.go:17:13:17:14 | ch | stmts2.go:18:17:18:18 | ch | -| stmts2.go:18:7:18:7 | assignment to x | stmts2.go:18:7:18:18 | ... := ...[1] | -| stmts2.go:18:7:18:7 | skip | stmts2.go:18:10:18:10 | skip | -| stmts2.go:18:7:18:18 | ... := ...[0] | stmts2.go:18:7:18:7 | assignment to x | -| stmts2.go:18:7:18:18 | ... := ...[1] | stmts2.go:19:10:19:10 | x | -| 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: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] | -| stmts2.go:20:7:20:18 | ... := ...[1] | stmts2.go:20:10:20:10 | assignment to y | -| stmts2.go:20:10:20:10 | assignment to y | stmts2.go:21:6:21:6 | y | -| stmts2.go:20:10:20:10 | skip | stmts2.go:20:7:20:18 | ... := ...[0] | -| stmts2.go:20:15:20:18 | <-... | stmts2.go:20:7:20:7 | skip | -| stmts2.go:20:17:20:18 | ch | stmts2.go:25:16:25:17 | ch | -| stmts2.go:21:6:21:6 | y | stmts2.go:21:6:21:6 | y is false | -| stmts2.go:21:6:21:6 | y | stmts2.go:21:6:21:6 | y is true | -| 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: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 | -| stmts2.go:25:7:25:17 | ... = ...[0] | stmts2.go:25:7:25:17 | ... = ...[1] | -| stmts2.go:25:7:25:17 | ... = ...[1] | stmts2.go:25:2:25:18 | skip | -| 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:15:1:28:1 | exit | -| stmts2.go:27:9:27:9 | 1 | stmts2.go:27:2:27:9 | return statement | -| 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] | -| stmts2.go:31:2:31:2 | skip | stmts2.go:31:5:31:5 | skip | -| stmts2.go:31:2:31:14 | ... := ...[0] | stmts2.go:31:2:31:2 | assignment to x | -| 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: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: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: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 | -| stmts3.go:7:3:7:5 | skip | stmts3.go:7:9:7:12 | iota | -| stmts3.go:7:9:7:12 | iota | stmts3.go:7:3:7:5 | assignment to red | -| stmts3.go:8:3:8:7 | assignment to green | stmts3.go:9:3:9:6 | skip | -| stmts3.go:8:3:8:7 | skip | stmts3.go:8:3:8:7 | zero value for green | -| stmts3.go:8:3:8:7 | zero value for green | stmts3.go:8:3:8:7 | assignment to green | -| 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:5:1:12:1 | exit | -| stmts3.go:11:9:11:26 | ...-... | stmts3.go:11:2:11:26 | return statement | -| 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: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: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: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: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: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: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 | -| stmts4.go:5:1:5:26 | function declaration | stmts4.go:0:0:0:0 | exit | -| 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: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 | -| stmts5.go:7:17:7:20 | skip | stmts5.go:7:1:9:1 | function declaration | -| 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: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: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:11:1:12:1 | exit | -| stmts6.go:0:0:0:0 | entry | stmts6.go:3:6:3:11 | skip | -| 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: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: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 | -| stmts7.go:6:2:6:5 | skip | stmts7.go:6:10:6:16 | recover | -| 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: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: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: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: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 | 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: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 | -| stmts7.go:23:16:23:23 | initialization of callback | stmts7.go:24:8:24:15 | callback | -| 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: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 | -| stmts7.go:25:8:25:21 | selection of fn | stmts7.go:25:2:25:23 | defer statement | -| stmts7.go:25:8:25:23 | call to fn | stmts7.go:24:8:24:20 | call to fn | -| stmts7.go:25:9:25:17 | &... | stmts7.go:25:8:25:18 | implicit dereference | -| stmts7.go:25:10:25:17 | callback | stmts7.go:25:9:25:17 | &... | -| stmts7.go:26:2:26:12 | selection of Println | stmts7.go:26:14:26:30 | "print something" | -| stmts7.go:26:2:26:31 | call to Println | stmts7.go:25:8:25:23 | call to fn | -| stmts7.go:26:2:26:31 | call to Println | stmts7.go:27:9:27:13 | false | -| stmts7.go:26:14:26:30 | "print something" | stmts7.go:26:2:26:31 | call to Println | -| 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: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 | -| stmts8.go:3:13:3:13 | initialization of x | stmts8.go:4:2:4:2 | skip | -| stmts8.go:4:2:4:2 | assignment to y | stmts8.go:5:2:5:2 | skip | -| stmts8.go:4:2:4:2 | skip | stmts8.go:4:7:4:7 | x | -| stmts8.go:4:7:4:7 | x | stmts8.go:4:12:4:12 | 5 | -| stmts8.go:4:7:4:12 | ...>>... | stmts8.go:4:2:4:2 | assignment to y | -| stmts8.go:4:12:4:12 | 5 | stmts8.go:4:7:4:12 | ...>>... | -| stmts8.go:5:2:5:2 | assignment to z | stmts8.go:6:9:6:9 | z | -| stmts8.go:5:2:5:2 | skip | stmts8.go:5:7:5:7 | x | -| 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: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: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: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: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: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: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:14:20:17 | "Hi" | stmts.go:20:2:20:18 | call to Println | -| 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: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: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 | -| stmts.go:24:23:24:25 | rhs of increment statement | stmts.go:24:23:24:25 | increment statement | -| stmts.go:25:7:25:7 | assignment to j | stmts.go:25:19:25:19 | j | -| stmts.go:25:7:25:7 | skip | stmts.go:25:12:25:12 | i | -| stmts.go:25:12:25:12 | i | stmts.go:25:16:25:16 | 1 | -| 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: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: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: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: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: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: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: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: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 | -| stmts.go:39:2:39:2 | skip | stmts.go:39:7:39:7 | 9 | -| stmts.go:39:7:39:7 | 9 | stmts.go:39:2:39:2 | assignment to k | -| stmts.go:40:10:40:10 | k | stmts.go:40:10:40:12 | 1 | -| stmts.go:40:10:40:12 | 1 | 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: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: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 | -| stmts.go:46:12:46:14 | initialization of ch1 | stmts.go:46:26:46:28 | argument corresponding to ch2 | -| stmts.go:46:26:46:28 | argument corresponding to ch2 | stmts.go:46:26:46:28 | initialization of ch2 | -| stmts.go:46:26:46:28 | initialization of ch2 | stmts.go:47:6:47:6 | skip | -| stmts.go:47:6:47:6 | assignment to a | stmts.go:48:6:48:6 | skip | -| stmts.go:47:6:47:6 | skip | stmts.go:47:6:47:6 | zero value for a | -| stmts.go:47:6:47:6 | zero value for a | stmts.go:47:6:47:6 | assignment to a | -| stmts.go:48:6:48:6 | assignment to w | stmts.go:51:9:51:11 | ch1 | -| stmts.go:48:6:48:6 | skip | stmts.go:48:6:48:6 | zero value for w | -| stmts.go:48:6:48:6 | zero value for w | stmts.go:48:6:48:6 | assignment to w | -| stmts.go:50:2:59:2 | select statement | stmts.go:51:7:51:11 | <-... | -| stmts.go:50:2:59:2 | select statement | stmts.go:53:17:53:21 | <-... | -| stmts.go:50:2:59:2 | select statement | stmts.go:57:3:57:13 | selection of Println | -| stmts.go:50:2:59:2 | select statement | stmts.go:58:7:58:15 | send statement | -| 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: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: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 | -| stmts.go:53:13:53:13 | assignment to w | stmts.go:54:3:54:13 | selection of Println | -| stmts.go:53:13:53:13 | skip | stmts.go:53:7:53:21 | ... = ...[0] | -| 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: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: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: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:14:58:15 | 42 | stmts.go:50:2:59:2 | select statement | -| 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: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:67:3:67:35 | defer statement | stmts.go:71:9:71:10 | 42 | -| 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: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: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: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: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: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: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 | -| stmts.go:75:12:75:12 | initialization of x | stmts.go:76:9:76:9 | x | -| stmts.go:76:9:76:9 | x | stmts.go:79:9:79:9 | skip | -| stmts.go:79:9:79:9 | assignment to y | stmts.go:79:17:79:17 | y | -| stmts.go:79:9:79:9 | skip | stmts.go:79:14:79:14 | x | -| stmts.go:79:14:79:14 | x | stmts.go:79:9:79:9 | assignment to y | -| stmts.go:79:17:79:17 | y | stmts.go:79:21:79:22 | 19 | -| 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: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 | -| stmts.go:85:2:85:8 | skip | stmts.go:90:9:90:9 | x | -| stmts.go:85:7:85:7 | 1 | stmts.go:85:7:85:7 | case 1 | -| stmts.go:85:7:85:7 | case 1 | stmts.go:85:2:85:8 | skip | -| stmts.go:85:7:85:7 | case 1 | stmts.go:86:7:86:7 | 2 | -| stmts.go:86:7:86:7 | 2 | stmts.go:86:7:86:7 | case 2 | -| stmts.go:86:7:86:7 | case 2 | stmts.go:86:10:86:10 | 3 | -| stmts.go:86:7:86:7 | case 2 | stmts.go:87:3:87:7 | test5 | -| stmts.go:86:10:86:10 | 3 | stmts.go:86:10:86:10 | case 3 | -| stmts.go:86:10:86:10 | case 3 | stmts.go:87:3:87:7 | test5 | -| stmts.go:86:10:86:10 | case 3 | stmts.go:90:9:90:9 | x | -| stmts.go:87:3:87:7 | test5 | stmts.go:87:9:87:12 | true | -| stmts.go:87:9:87:12 | true | stmts.go:87:3:87:13 | call to test5 | -| stmts.go:90:9:90:9 | x | stmts.go:91:7:91:7 | 1 | -| stmts.go:90:9:90:9 | x | stmts.go:98:9:98:9 | x | -| stmts.go:91:7:91:7 | 1 | stmts.go:91:7:91:7 | case 1 | -| stmts.go:91:7:91:7 | case 1 | stmts.go:92:3:92:7 | test5 | -| stmts.go:91:7:91:7 | case 1 | stmts.go:94:7:94:11 | ...-... | -| stmts.go:92:3:92:7 | test5 | stmts.go:92:9:92:13 | false | -| stmts.go:92:9:92:13 | false | stmts.go:92:3:92:14 | call to test5 | -| stmts.go:93:3:93:13 | skip | stmts.go:95:3:95:7 | test5 | -| stmts.go:94:7:94:11 | ...-... | stmts.go:94:7:94:11 | case ...-... | -| stmts.go:94:7:94:11 | case ...-... | stmts.go:95:3:95:7 | test5 | -| stmts.go:94:7:94:11 | case ...-... | stmts.go:98:9:98:9 | x | -| 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: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: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: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 | -| stmts.go:112:12:112:12 | initialization of x | stmts.go:113:9:113:9 | skip | -| stmts.go:113:9:113:9 | assignment to y | stmts.go:114:7:114:11 | case error | -| stmts.go:113:9:113:9 | skip | stmts.go:113:14:113:14 | x | -| stmts.go:113:14:113:14 | x | stmts.go:113:14:113:21 | type assertion | -| stmts.go:113:14:113:21 | type assertion | stmts.go:113:9:113:9 | assignment to y | -| stmts.go:114:2:115:16 | implicit type switch variable declaration | stmts.go:115:3:115:13 | selection of Println | -| stmts.go:114:7:114:11 | case error | stmts.go:114:2:115:16 | implicit type switch variable declaration | -| stmts.go:114:7:114:11 | case error | stmts.go:114:14:114:19 | case string | -| 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: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: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 | -| stmts.go:119:2:120:7 | implicit type switch variable declaration | stmts.go:120:3:120:3 | skip | -| stmts.go:120:3:120:3 | skip | stmts.go:120:7:120:7 | y | -| stmts.go:120:7:120:7 | y | stmts.go:123:9:123:9 | skip | -| stmts.go:123:9:123:9 | assignment to y | stmts.go:123:17:123:17 | y | -| stmts.go:123:9:123:9 | skip | stmts.go:123:14:123:14 | x | -| stmts.go:123:14:123:14 | x | stmts.go:123:9:123:9 | assignment to y | -| stmts.go:123:17:123:17 | y | stmts.go:123:17:123:24 | type assertion | -| stmts.go:123:17:123:24 | type assertion | stmts.go:124:7:124:11 | case error | -| stmts.go:124:7:124:11 | case error | stmts.go:124:14:124:19 | case string | -| stmts.go:124:7:124:11 | case error | stmts.go:125:3:125:13 | selection of Println | -| 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: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: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 | -| stmts.go:130:3:130:3 | skip | stmts.go:130:7:130:7 | y | -| stmts.go:130:7:130:7 | y | stmts.go:133:9:133:9 | skip | -| stmts.go:133:9:133:9 | assignment to y | stmts.go:133:17:133:17 | y | -| stmts.go:133:9:133:9 | skip | stmts.go:133:14:133:14 | x | -| stmts.go:133:14:133:14 | x | stmts.go:133:9:133:9 | assignment to y | -| 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: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: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:140:1:142:1 | exit | -| stmts.go:141:5:141:5 | f | stmts.go:141:2:141:7 | go statement | -| 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 | -| stmts.go:145:13:145:14 | initialization of xs | stmts.go:146:17:146:18 | xs | -| stmts.go:146:2:151:2 | range statement[0] | stmts.go:146:6:146:6 | assignment to x | -| stmts.go:146:6:146:6 | assignment to x | stmts.go:147:6:147:6 | x | -| stmts.go:146:6:146:6 | skip | stmts.go:146:2:151:2 | range statement[0] | -| stmts.go:146:17:146:18 | next key-value pair in range | stmts.go:146:6:146:6 | skip | -| 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: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: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: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 | -| stmts.go:153:6:153:6 | assignment to i | stmts.go:153:9:153:9 | assignment to v | -| stmts.go:153:6:153:6 | skip | stmts.go:153:9:153:9 | skip | -| stmts.go:153:9:153:9 | assignment to v | stmts.go:154:3:154:11 | selection of Print | -| stmts.go:153:9:153:9 | skip | stmts.go:153:2:155:2 | range statement[0] | -| stmts.go:153:20:153:21 | next key-value pair in range | stmts.go:153:6:153:6 | skip | -| 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: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 | 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: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: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 | ...<... 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: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 | ...<... 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: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 | ...<... 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: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: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 | ...<... 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: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 | ...<... 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: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: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:31:2 | true | tst.go:30:2:30:9 | skip | -| tst.go:30:2:30:9 | skip | tst.go:28:1:32:1 | exit | +| DuplicateSwitchCase.go:0:0:0:0 | After DuplicateSwitchCase.go | DuplicateSwitchCase.go:0:0:0:0 | Normal Exit | +| DuplicateSwitchCase.go:0:0:0:0 | DuplicateSwitchCase.go | DuplicateSwitchCase.go:3:1:12:1 | Before function declaration | +| DuplicateSwitchCase.go:0:0:0:0 | Entry | DuplicateSwitchCase.go:0:0:0:0 | DuplicateSwitchCase.go | +| DuplicateSwitchCase.go:0:0:0:0 | Normal Exit | DuplicateSwitchCase.go:0:0:0:0 | Exit | +| DuplicateSwitchCase.go:3:1:12:1 | After function declaration | DuplicateSwitchCase.go:14:1:14:15 | Before function declaration | +| DuplicateSwitchCase.go:3:1:12:1 | Before function declaration | DuplicateSwitchCase.go:3:1:12:1 | function declaration | +| DuplicateSwitchCase.go:3:1:12:1 | Entry | DuplicateSwitchCase.go:3:29:12:1 | block statement | +| DuplicateSwitchCase.go:3:1:12:1 | Exceptional Exit | DuplicateSwitchCase.go:3:1:12:1 | Exit | +| DuplicateSwitchCase.go:3:1:12:1 | Normal Exit | DuplicateSwitchCase.go:3:1:12:1 | Exit | +| DuplicateSwitchCase.go:3:1:12:1 | function declaration | DuplicateSwitchCase.go:3:1:12:1 | After function declaration | +| DuplicateSwitchCase.go:3:29:12:1 | After block statement | DuplicateSwitchCase.go:3:1:12:1 | Normal Exit | +| DuplicateSwitchCase.go:3:29:12:1 | arg:0 block statement | DuplicateSwitchCase.go:3:29:12:1 | param-init:0 block statement | +| DuplicateSwitchCase.go:3:29:12:1 | block statement | DuplicateSwitchCase.go:3:29:12:1 | arg:0 block statement | +| DuplicateSwitchCase.go:3:29:12:1 | param-init:0 block statement | DuplicateSwitchCase.go:4:2:11:2 | expression-switch statement | +| DuplicateSwitchCase.go:4:2:11:2 | After expression-switch statement | DuplicateSwitchCase.go:3:29:12:1 | After block statement | +| DuplicateSwitchCase.go:4:2:11:2 | expression-switch statement | DuplicateSwitchCase.go:5:2:6:9 | case clause | +| DuplicateSwitchCase.go:5:2:6:9 | case clause | DuplicateSwitchCase.go:5:7:5:20 | Before ...==... | +| DuplicateSwitchCase.go:5:7:5:9 | After msg | DuplicateSwitchCase.go:5:14:5:20 | Before "start" | +| DuplicateSwitchCase.go:5:7:5:9 | Before msg | DuplicateSwitchCase.go:5:7:5:9 | msg | +| DuplicateSwitchCase.go:5:7:5:9 | msg | DuplicateSwitchCase.go:5:7:5:9 | After msg | +| DuplicateSwitchCase.go:5:7:5:20 | ...==... | DuplicateSwitchCase.go:5:7:5:20 | After ...==... [false] | +| DuplicateSwitchCase.go:5:7:5:20 | ...==... | DuplicateSwitchCase.go:5:7:5:20 | After ...==... [true] | +| DuplicateSwitchCase.go:5:7:5:20 | After ...==... [false] | DuplicateSwitchCase.go:6:3:6:9 | expression statement | +| DuplicateSwitchCase.go:5:7:5:20 | After ...==... [false] | DuplicateSwitchCase.go:7:2:8:8 | case clause | +| DuplicateSwitchCase.go:5:7:5:20 | After ...==... [true] | DuplicateSwitchCase.go:6:3:6:9 | expression statement | +| DuplicateSwitchCase.go:5:7:5:20 | After ...==... [true] | DuplicateSwitchCase.go:7:2:8:8 | case clause | +| DuplicateSwitchCase.go:5:7:5:20 | Before ...==... | DuplicateSwitchCase.go:5:7:5:9 | Before msg | +| DuplicateSwitchCase.go:5:14:5:20 | "start" | DuplicateSwitchCase.go:5:14:5:20 | After "start" | +| DuplicateSwitchCase.go:5:14:5:20 | After "start" | DuplicateSwitchCase.go:5:7:5:20 | ...==... | +| DuplicateSwitchCase.go:5:14:5:20 | Before "start" | DuplicateSwitchCase.go:5:14:5:20 | "start" | +| DuplicateSwitchCase.go:6:3:6:7 | After start | DuplicateSwitchCase.go:6:3:6:9 | call to start | +| DuplicateSwitchCase.go:6:3:6:7 | Before start | DuplicateSwitchCase.go:6:3:6:7 | start | +| DuplicateSwitchCase.go:6:3:6:7 | start | DuplicateSwitchCase.go:6:3:6:7 | After start | +| DuplicateSwitchCase.go:6:3:6:9 | After call to start | DuplicateSwitchCase.go:6:3:6:9 | After expression statement | +| DuplicateSwitchCase.go:6:3:6:9 | After expression statement | DuplicateSwitchCase.go:4:2:11:2 | After expression-switch statement | +| DuplicateSwitchCase.go:6:3:6:9 | Before call to start | DuplicateSwitchCase.go:6:3:6:7 | Before start | +| DuplicateSwitchCase.go:6:3:6:9 | call to start | DuplicateSwitchCase.go:3:1:12:1 | Exceptional Exit | +| DuplicateSwitchCase.go:6:3:6:9 | call to start | DuplicateSwitchCase.go:6:3:6:9 | After call to start | +| DuplicateSwitchCase.go:6:3:6:9 | expression statement | DuplicateSwitchCase.go:6:3:6:9 | Before call to start | +| DuplicateSwitchCase.go:7:2:8:8 | case clause | DuplicateSwitchCase.go:7:7:7:20 | Before ...==... | +| DuplicateSwitchCase.go:7:7:7:9 | After msg | DuplicateSwitchCase.go:7:14:7:20 | Before "start" | +| DuplicateSwitchCase.go:7:7:7:9 | Before msg | DuplicateSwitchCase.go:7:7:7:9 | msg | +| DuplicateSwitchCase.go:7:7:7:9 | msg | DuplicateSwitchCase.go:7:7:7:9 | After msg | +| DuplicateSwitchCase.go:7:7:7:20 | ...==... | DuplicateSwitchCase.go:7:7:7:20 | After ...==... [false] | +| DuplicateSwitchCase.go:7:7:7:20 | ...==... | DuplicateSwitchCase.go:7:7:7:20 | After ...==... [true] | +| DuplicateSwitchCase.go:7:7:7:20 | After ...==... [false] | DuplicateSwitchCase.go:8:3:8:8 | expression statement | +| DuplicateSwitchCase.go:7:7:7:20 | After ...==... [false] | DuplicateSwitchCase.go:9:2:10:34 | case clause | +| DuplicateSwitchCase.go:7:7:7:20 | After ...==... [true] | DuplicateSwitchCase.go:8:3:8:8 | expression statement | +| DuplicateSwitchCase.go:7:7:7:20 | After ...==... [true] | DuplicateSwitchCase.go:9:2:10:34 | case clause | +| DuplicateSwitchCase.go:7:7:7:20 | Before ...==... | DuplicateSwitchCase.go:7:7:7:9 | Before msg | +| DuplicateSwitchCase.go:7:14:7:20 | "start" | DuplicateSwitchCase.go:7:14:7:20 | After "start" | +| DuplicateSwitchCase.go:7:14:7:20 | After "start" | DuplicateSwitchCase.go:7:7:7:20 | ...==... | +| DuplicateSwitchCase.go:7:14:7:20 | Before "start" | DuplicateSwitchCase.go:7:14:7:20 | "start" | +| DuplicateSwitchCase.go:8:3:8:6 | After stop | DuplicateSwitchCase.go:8:3:8:8 | call to stop | +| DuplicateSwitchCase.go:8:3:8:6 | Before stop | DuplicateSwitchCase.go:8:3:8:6 | stop | +| DuplicateSwitchCase.go:8:3:8:6 | stop | DuplicateSwitchCase.go:8:3:8:6 | After stop | +| DuplicateSwitchCase.go:8:3:8:8 | After call to stop | DuplicateSwitchCase.go:8:3:8:8 | After expression statement | +| DuplicateSwitchCase.go:8:3:8:8 | After expression statement | DuplicateSwitchCase.go:4:2:11:2 | After expression-switch statement | +| DuplicateSwitchCase.go:8:3:8:8 | Before call to stop | DuplicateSwitchCase.go:8:3:8:6 | Before stop | +| DuplicateSwitchCase.go:8:3:8:8 | call to stop | DuplicateSwitchCase.go:3:1:12:1 | Exceptional Exit | +| DuplicateSwitchCase.go:8:3:8:8 | call to stop | DuplicateSwitchCase.go:8:3:8:8 | After call to stop | +| DuplicateSwitchCase.go:8:3:8:8 | expression statement | DuplicateSwitchCase.go:8:3:8:8 | Before call to stop | +| DuplicateSwitchCase.go:9:2:10:34 | case clause | DuplicateSwitchCase.go:10:3:10:34 | expression statement | +| DuplicateSwitchCase.go:10:3:10:7 | After panic | DuplicateSwitchCase.go:10:9:10:33 | Before "Message not understood." | +| DuplicateSwitchCase.go:10:3:10:7 | Before panic | DuplicateSwitchCase.go:10:3:10:7 | panic | +| DuplicateSwitchCase.go:10:3:10:7 | panic | DuplicateSwitchCase.go:10:3:10:7 | After panic | +| DuplicateSwitchCase.go:10:3:10:34 | Before call to panic | DuplicateSwitchCase.go:10:3:10:7 | Before panic | +| DuplicateSwitchCase.go:10:3:10:34 | call to panic | DuplicateSwitchCase.go:3:1:12:1 | Exceptional Exit | +| DuplicateSwitchCase.go:10:3:10:34 | expression statement | DuplicateSwitchCase.go:10:3:10:34 | Before call to panic | +| DuplicateSwitchCase.go:10:9:10:33 | "Message not understood." | DuplicateSwitchCase.go:10:9:10:33 | After "Message not understood." | +| DuplicateSwitchCase.go:10:9:10:33 | After "Message not understood." | DuplicateSwitchCase.go:10:3:10:34 | call to panic | +| DuplicateSwitchCase.go:10:9:10:33 | Before "Message not understood." | DuplicateSwitchCase.go:10:9:10:33 | "Message not understood." | +| DuplicateSwitchCase.go:14:1:14:15 | After function declaration | DuplicateSwitchCase.go:16:1:16:14 | Before function declaration | +| DuplicateSwitchCase.go:14:1:14:15 | Before function declaration | DuplicateSwitchCase.go:14:1:14:15 | function declaration | +| DuplicateSwitchCase.go:14:1:14:15 | Entry | DuplicateSwitchCase.go:14:14:14:15 | block statement | +| DuplicateSwitchCase.go:14:1:14:15 | Normal Exit | DuplicateSwitchCase.go:14:1:14:15 | Exit | +| DuplicateSwitchCase.go:14:1:14:15 | function declaration | DuplicateSwitchCase.go:14:1:14:15 | After function declaration | +| DuplicateSwitchCase.go:14:14:14:15 | block statement | DuplicateSwitchCase.go:14:1:14:15 | Normal Exit | +| DuplicateSwitchCase.go:14:14:14:15 | block statement | DuplicateSwitchCase.go:14:14:14:15 | block statement | +| DuplicateSwitchCase.go:16:1:16:14 | After function declaration | DuplicateSwitchCase.go:0:0:0:0 | After DuplicateSwitchCase.go | +| DuplicateSwitchCase.go:16:1:16:14 | Before function declaration | DuplicateSwitchCase.go:16:1:16:14 | function declaration | +| DuplicateSwitchCase.go:16:1:16:14 | Entry | DuplicateSwitchCase.go:16:13:16:14 | block statement | +| DuplicateSwitchCase.go:16:1:16:14 | Normal Exit | DuplicateSwitchCase.go:16:1:16:14 | Exit | +| DuplicateSwitchCase.go:16:1:16:14 | function declaration | DuplicateSwitchCase.go:16:1:16:14 | After function declaration | +| DuplicateSwitchCase.go:16:13:16:14 | block statement | DuplicateSwitchCase.go:16:1:16:14 | Normal Exit | +| DuplicateSwitchCase.go:16:13:16:14 | block statement | DuplicateSwitchCase.go:16:13:16:14 | block statement | +| epilogues.go:0:0:0:0 | After epilogues.go | epilogues.go:0:0:0:0 | Normal Exit | +| epilogues.go:0:0:0:0 | Entry | epilogues.go:0:0:0:0 | epilogues.go | +| epilogues.go:0:0:0:0 | Normal Exit | epilogues.go:0:0:0:0 | Exit | +| epilogues.go:0:0:0:0 | epilogues.go | epilogues.go:3:1:3:12 | import declaration | +| epilogues.go:3:1:3:12 | After import declaration | epilogues.go:8:1:10:1 | type declaration | +| epilogues.go:3:1:3:12 | import declaration | epilogues.go:3:8:3:12 | import specifier | +| epilogues.go:3:8:3:12 | import specifier | epilogues.go:3:1:3:12 | After import declaration | +| epilogues.go:8:1:10:1 | After type declaration | epilogues.go:12:1:14:1 | Before function declaration | +| epilogues.go:8:1:10:1 | type declaration | epilogues.go:8:6:10:1 | type declaration specifier | +| epilogues.go:8:6:10:1 | type declaration specifier | epilogues.go:8:1:10:1 | After type declaration | +| epilogues.go:12:1:14:1 | After function declaration | epilogues.go:16:1:18:1 | Before function declaration | +| epilogues.go:12:1:14:1 | Before function declaration | epilogues.go:12:1:14:1 | function declaration | +| epilogues.go:12:1:14:1 | Entry | epilogues.go:12:47:14:1 | block statement | +| epilogues.go:12:1:14:1 | Exceptional Exit | epilogues.go:12:1:14:1 | Exit | +| epilogues.go:12:1:14:1 | Normal Exit | epilogues.go:12:1:14:1 | Exit | +| epilogues.go:12:1:14:1 | function declaration | epilogues.go:12:1:14:1 | After function declaration | +| epilogues.go:12:47:14:1 | After block statement | epilogues.go:12:1:14:1 | Normal Exit | +| epilogues.go:12:47:14:1 | arg:0 block statement | epilogues.go:12:47:14:1 | param-init:0 block statement | +| epilogues.go:12:47:14:1 | arg:1 block statement | epilogues.go:12:47:14:1 | param-init:1 block statement | +| epilogues.go:12:47:14:1 | arg:-1 block statement | epilogues.go:12:47:14:1 | param-init:-1 block statement | +| epilogues.go:12:47:14:1 | block statement | epilogues.go:12:47:14:1 | arg:-1 block statement | +| epilogues.go:12:47:14:1 | param-init:0 block statement | epilogues.go:12:47:14:1 | arg:1 block statement | +| epilogues.go:12:47:14:1 | param-init:1 block statement | epilogues.go:13:2:13:33 | expression statement | +| epilogues.go:12:47:14:1 | param-init:-1 block statement | epilogues.go:12:47:14:1 | arg:0 block statement | +| epilogues.go:13:2:13:12 | After selection of Println | epilogues.go:13:14:13:21 | Before selection of prefix | +| epilogues.go:13:2:13:12 | Before selection of Println | epilogues.go:13:2:13:12 | selection of Println | +| epilogues.go:13:2:13:12 | selection of Println | epilogues.go:13:2:13:12 | After selection of Println | +| epilogues.go:13:2:13:33 | After call to Println | epilogues.go:13:2:13:33 | After expression statement | +| epilogues.go:13:2:13:33 | After expression statement | epilogues.go:12:47:14:1 | After block statement | +| epilogues.go:13:2:13:33 | Before call to Println | epilogues.go:13:2:13:12 | Before selection of Println | +| epilogues.go:13:2:13:33 | call to Println | epilogues.go:12:1:14:1 | Exceptional Exit | +| epilogues.go:13:2:13:33 | call to Println | epilogues.go:13:2:13:33 | After call to Println | +| epilogues.go:13:2:13:33 | expression statement | epilogues.go:13:2:13:33 | Before call to Println | +| epilogues.go:13:14:13:14 | After l | epilogues.go:13:14:13:14 | implicit-deref l | +| epilogues.go:13:14:13:14 | Before l | epilogues.go:13:14:13:14 | l | +| epilogues.go:13:14:13:14 | implicit-deref l | epilogues.go:13:14:13:21 | selection of prefix | +| epilogues.go:13:14:13:14 | l | epilogues.go:13:14:13:14 | After l | +| epilogues.go:13:14:13:21 | After selection of prefix | epilogues.go:13:24:13:26 | Before msg | +| epilogues.go:13:14:13:21 | Before selection of prefix | epilogues.go:13:14:13:14 | Before l | +| epilogues.go:13:14:13:21 | selection of prefix | epilogues.go:13:14:13:21 | After selection of prefix | +| epilogues.go:13:24:13:26 | After msg | epilogues.go:13:29:13:32 | Before code | +| epilogues.go:13:24:13:26 | Before msg | epilogues.go:13:24:13:26 | msg | +| epilogues.go:13:24:13:26 | msg | epilogues.go:13:24:13:26 | After msg | +| epilogues.go:13:29:13:32 | After code | epilogues.go:13:2:13:33 | call to Println | +| epilogues.go:13:29:13:32 | Before code | epilogues.go:13:29:13:32 | code | +| epilogues.go:13:29:13:32 | code | epilogues.go:13:29:13:32 | After code | +| epilogues.go:16:1:18:1 | After function declaration | epilogues.go:23:1:27:1 | Before function declaration | +| epilogues.go:16:1:18:1 | Before function declaration | epilogues.go:16:1:18:1 | function declaration | +| epilogues.go:16:1:18:1 | Entry | epilogues.go:16:41:18:1 | block statement | +| epilogues.go:16:1:18:1 | Exceptional Exit | epilogues.go:16:1:18:1 | Exit | +| epilogues.go:16:1:18:1 | Normal Exit | epilogues.go:16:1:18:1 | Exit | +| epilogues.go:16:1:18:1 | function declaration | epilogues.go:16:1:18:1 | After function declaration | +| epilogues.go:16:41:18:1 | After block statement | epilogues.go:16:1:18:1 | Normal Exit | +| epilogues.go:16:41:18:1 | arg:0 block statement | epilogues.go:16:41:18:1 | param-init:0 block statement | +| epilogues.go:16:41:18:1 | arg:-1 block statement | epilogues.go:16:41:18:1 | param-init:-1 block statement | +| epilogues.go:16:41:18:1 | block statement | epilogues.go:16:41:18:1 | arg:-1 block statement | +| epilogues.go:16:41:18:1 | param-init:0 block statement | epilogues.go:17:2:17:27 | expression statement | +| epilogues.go:16:41:18:1 | param-init:-1 block statement | epilogues.go:16:41:18:1 | arg:0 block statement | +| epilogues.go:17:2:17:12 | After selection of Println | epilogues.go:17:14:17:21 | Before selection of prefix | +| epilogues.go:17:2:17:12 | Before selection of Println | epilogues.go:17:2:17:12 | selection of Println | +| epilogues.go:17:2:17:12 | selection of Println | epilogues.go:17:2:17:12 | After selection of Println | +| epilogues.go:17:2:17:27 | After call to Println | epilogues.go:17:2:17:27 | After expression statement | +| epilogues.go:17:2:17:27 | After expression statement | epilogues.go:16:41:18:1 | After block statement | +| epilogues.go:17:2:17:27 | Before call to Println | epilogues.go:17:2:17:12 | Before selection of Println | +| epilogues.go:17:2:17:27 | call to Println | epilogues.go:16:1:18:1 | Exceptional Exit | +| epilogues.go:17:2:17:27 | call to Println | epilogues.go:17:2:17:27 | After call to Println | +| epilogues.go:17:2:17:27 | expression statement | epilogues.go:17:2:17:27 | Before call to Println | +| epilogues.go:17:14:17:14 | After l | epilogues.go:17:14:17:21 | selection of prefix | +| epilogues.go:17:14:17:14 | Before l | epilogues.go:17:14:17:14 | l | +| epilogues.go:17:14:17:14 | l | epilogues.go:17:14:17:14 | After l | +| epilogues.go:17:14:17:21 | After selection of prefix | epilogues.go:17:24:17:26 | Before msg | +| epilogues.go:17:14:17:21 | Before selection of prefix | epilogues.go:17:14:17:14 | Before l | +| epilogues.go:17:14:17:21 | selection of prefix | epilogues.go:17:14:17:21 | After selection of prefix | +| epilogues.go:17:24:17:26 | After msg | epilogues.go:17:2:17:27 | call to Println | +| epilogues.go:17:24:17:26 | Before msg | epilogues.go:17:24:17:26 | msg | +| epilogues.go:17:24:17:26 | msg | epilogues.go:17:24:17:26 | After msg | +| epilogues.go:23:1:27:1 | After function declaration | epilogues.go:31:1:33:1 | Before function declaration | +| epilogues.go:23:1:27:1 | Before function declaration | epilogues.go:23:1:27:1 | function declaration | +| epilogues.go:23:1:27:1 | Entry | epilogues.go:23:19:27:1 | block statement | +| epilogues.go:23:1:27:1 | Exceptional Exit | epilogues.go:23:1:27:1 | Exit | +| epilogues.go:23:1:27:1 | Normal Exit | epilogues.go:23:1:27:1 | Exit | +| epilogues.go:23:1:27:1 | function declaration | epilogues.go:23:1:27:1 | After function declaration | +| epilogues.go:23:19:27:1 | After block statement | epilogues.go:23:1:27:1 | Normal Exit | +| epilogues.go:23:19:27:1 | block statement | epilogues.go:24:2:26:2 | if statement | +| epilogues.go:24:2:26:2 | After if statement | epilogues.go:23:19:27:1 | After block statement | +| epilogues.go:24:2:26:2 | if statement | epilogues.go:24:5:24:18 | ... := ... | +| epilogues.go:24:5:24:18 | ... := ... | epilogues.go:24:10:24:18 | Before call to recover | +| epilogues.go:24:5:24:18 | After ... := ... | epilogues.go:24:21:24:28 | Before ...!=... | +| epilogues.go:24:5:24:18 | assign:0 ... := ... | epilogues.go:24:5:24:18 | After ... := ... | +| epilogues.go:24:10:24:16 | After recover | epilogues.go:24:10:24:18 | call to recover | +| epilogues.go:24:10:24:16 | Before recover | epilogues.go:24:10:24:16 | recover | +| epilogues.go:24:10:24:16 | recover | epilogues.go:24:10:24:16 | After recover | +| epilogues.go:24:10:24:18 | After call to recover | epilogues.go:24:5:24:18 | assign:0 ... := ... | +| epilogues.go:24:10:24:18 | Before call to recover | epilogues.go:24:10:24:16 | Before recover | +| epilogues.go:24:10:24:18 | call to recover | epilogues.go:24:10:24:18 | After call to recover | +| epilogues.go:24:21:24:21 | After r | epilogues.go:24:26:24:28 | Before nil | +| epilogues.go:24:21:24:21 | Before r | epilogues.go:24:21:24:21 | r | +| epilogues.go:24:21:24:21 | r | epilogues.go:24:21:24:21 | After r | +| epilogues.go:24:21:24:28 | ...!=... | epilogues.go:24:21:24:28 | After ...!=... [false] | +| epilogues.go:24:21:24:28 | ...!=... | epilogues.go:24:21:24:28 | After ...!=... [true] | +| epilogues.go:24:21:24:28 | After ...!=... [false] | epilogues.go:24:2:26:2 | After if statement | +| epilogues.go:24:21:24:28 | After ...!=... [true] | epilogues.go:24:30:26:2 | block statement | +| epilogues.go:24:21:24:28 | Before ...!=... | epilogues.go:24:21:24:21 | Before r | +| epilogues.go:24:26:24:28 | After nil | epilogues.go:24:21:24:28 | ...!=... | +| epilogues.go:24:26:24:28 | Before nil | epilogues.go:24:26:24:28 | nil | +| epilogues.go:24:26:24:28 | nil | epilogues.go:24:26:24:28 | After nil | +| epilogues.go:24:30:26:2 | After block statement | epilogues.go:24:2:26:2 | After if statement | +| epilogues.go:24:30:26:2 | block statement | epilogues.go:25:3:25:30 | expression statement | +| epilogues.go:25:3:25:13 | After selection of Println | epilogues.go:25:15:25:26 | Before "recovered:" | +| epilogues.go:25:3:25:13 | Before selection of Println | epilogues.go:25:3:25:13 | selection of Println | +| epilogues.go:25:3:25:13 | selection of Println | epilogues.go:25:3:25:13 | After selection of Println | +| epilogues.go:25:3:25:30 | After call to Println | epilogues.go:25:3:25:30 | After expression statement | +| epilogues.go:25:3:25:30 | After expression statement | epilogues.go:24:30:26:2 | After block statement | +| epilogues.go:25:3:25:30 | Before call to Println | epilogues.go:25:3:25:13 | Before selection of Println | +| epilogues.go:25:3:25:30 | call to Println | epilogues.go:23:1:27:1 | Exceptional Exit | +| epilogues.go:25:3:25:30 | call to Println | epilogues.go:25:3:25:30 | After call to Println | +| epilogues.go:25:3:25:30 | expression statement | epilogues.go:25:3:25:30 | Before call to Println | +| epilogues.go:25:15:25:26 | "recovered:" | epilogues.go:25:15:25:26 | After "recovered:" | +| epilogues.go:25:15:25:26 | After "recovered:" | epilogues.go:25:29:25:29 | Before r | +| epilogues.go:25:15:25:26 | Before "recovered:" | epilogues.go:25:15:25:26 | "recovered:" | +| epilogues.go:25:29:25:29 | After r | epilogues.go:25:3:25:30 | call to Println | +| epilogues.go:25:29:25:29 | Before r | epilogues.go:25:29:25:29 | r | +| epilogues.go:25:29:25:29 | r | epilogues.go:25:29:25:29 | After r | +| epilogues.go:31:1:33:1 | After function declaration | epilogues.go:36:1:38:1 | Before function declaration | +| epilogues.go:31:1:33:1 | Before function declaration | epilogues.go:31:1:33:1 | function declaration | +| epilogues.go:31:1:33:1 | Entry | epilogues.go:31:26:33:1 | block statement | +| epilogues.go:31:1:33:1 | Normal Exit | epilogues.go:31:1:33:1 | Exit | +| epilogues.go:31:1:33:1 | function declaration | epilogues.go:31:1:33:1 | After function declaration | +| epilogues.go:31:26:33:1 | arg:0 block statement | epilogues.go:31:26:33:1 | param-init:0 block statement | +| epilogues.go:31:26:33:1 | block statement | epilogues.go:31:26:33:1 | arg:0 block statement | +| epilogues.go:31:26:33:1 | param-init:0 block statement | epilogues.go:32:2:32:13 | Before return statement | +| epilogues.go:32:2:32:13 | Before return statement | epilogues.go:32:9:32:13 | Before ...*... | +| epilogues.go:32:2:32:13 | return statement | epilogues.go:31:1:33:1 | Normal Exit | +| epilogues.go:32:9:32:9 | After x | epilogues.go:32:13:32:13 | Before 2 | +| epilogues.go:32:9:32:9 | Before x | epilogues.go:32:9:32:9 | x | +| epilogues.go:32:9:32:9 | x | epilogues.go:32:9:32:9 | After x | +| epilogues.go:32:9:32:13 | ...*... | epilogues.go:32:9:32:13 | After ...*... | +| epilogues.go:32:9:32:13 | After ...*... | epilogues.go:32:2:32:13 | return statement | +| epilogues.go:32:9:32:13 | Before ...*... | epilogues.go:32:9:32:9 | Before x | +| epilogues.go:32:13:32:13 | 2 | epilogues.go:32:13:32:13 | After 2 | +| epilogues.go:32:13:32:13 | After 2 | epilogues.go:32:9:32:13 | ...*... | +| epilogues.go:32:13:32:13 | Before 2 | epilogues.go:32:13:32:13 | 2 | +| epilogues.go:36:1:38:1 | After function declaration | epilogues.go:42:1:48:1 | Before function declaration | +| epilogues.go:36:1:38:1 | Before function declaration | epilogues.go:36:1:38:1 | function declaration | +| epilogues.go:36:1:38:1 | Entry | epilogues.go:36:16:38:1 | block statement | +| epilogues.go:36:1:38:1 | Exceptional Exit | epilogues.go:36:1:38:1 | Exit | +| epilogues.go:36:1:38:1 | Normal Exit | epilogues.go:36:1:38:1 | Exit | +| epilogues.go:36:1:38:1 | function declaration | epilogues.go:36:1:38:1 | After function declaration | +| epilogues.go:36:16:38:1 | After block statement | epilogues.go:36:1:38:1 | Normal Exit | +| epilogues.go:36:16:38:1 | block statement | epilogues.go:37:2:37:20 | expression statement | +| epilogues.go:37:2:37:12 | After selection of Println | epilogues.go:37:14:37:19 | Before "void" | +| epilogues.go:37:2:37:12 | Before selection of Println | epilogues.go:37:2:37:12 | selection of Println | +| epilogues.go:37:2:37:12 | selection of Println | epilogues.go:37:2:37:12 | After selection of Println | +| epilogues.go:37:2:37:20 | After call to Println | epilogues.go:37:2:37:20 | After expression statement | +| epilogues.go:37:2:37:20 | After expression statement | epilogues.go:36:16:38:1 | After block statement | +| epilogues.go:37:2:37:20 | Before call to Println | epilogues.go:37:2:37:12 | Before selection of Println | +| epilogues.go:37:2:37:20 | call to Println | epilogues.go:36:1:38:1 | Exceptional Exit | +| epilogues.go:37:2:37:20 | call to Println | epilogues.go:37:2:37:20 | After call to Println | +| epilogues.go:37:2:37:20 | expression statement | epilogues.go:37:2:37:20 | Before call to Println | +| epilogues.go:37:14:37:19 | "void" | epilogues.go:37:14:37:19 | After "void" | +| epilogues.go:37:14:37:19 | After "void" | epilogues.go:37:2:37:20 | call to Println | +| epilogues.go:37:14:37:19 | Before "void" | epilogues.go:37:14:37:19 | "void" | +| epilogues.go:42:1:48:1 | After function declaration | epilogues.go:51:1:54:1 | Before function declaration | +| epilogues.go:42:1:48:1 | Before function declaration | epilogues.go:42:1:48:1 | function declaration | +| epilogues.go:42:1:48:1 | Entry | epilogues.go:42:51:48:1 | block statement | +| epilogues.go:42:1:48:1 | Normal Exit | epilogues.go:42:1:48:1 | Exit | +| epilogues.go:42:1:48:1 | function declaration | epilogues.go:42:1:48:1 | After function declaration | +| epilogues.go:42:51:48:1 | arg:0 block statement | epilogues.go:42:51:48:1 | param-init:0 block statement | +| epilogues.go:42:51:48:1 | block statement | epilogues.go:42:51:48:1 | arg:0 block statement | +| epilogues.go:42:51:48:1 | param-init:0 block statement | epilogues.go:42:51:48:1 | result-zero-init:0 block statement | +| epilogues.go:42:51:48:1 | result-init:0 block statement | epilogues.go:42:51:48:1 | result-zero-init:1 block statement | +| epilogues.go:42:51:48:1 | result-init:1 block statement | epilogues.go:43:2:46:2 | if statement | +| epilogues.go:42:51:48:1 | result-read:0 block statement | epilogues.go:42:51:48:1 | result-read:1 block statement | +| epilogues.go:42:51:48:1 | result-zero-init:0 block statement | epilogues.go:42:51:48:1 | result-init:0 block statement | +| epilogues.go:42:51:48:1 | result-zero-init:1 block statement | epilogues.go:42:51:48:1 | result-init:1 block statement | +| epilogues.go:43:2:46:2 | After if statement | epilogues.go:47:2:47:14 | Before return statement | +| epilogues.go:43:2:46:2 | if statement | epilogues.go:43:5:43:9 | Before ...<... | +| epilogues.go:43:5:43:5 | After x | epilogues.go:43:9:43:9 | Before 0 | +| epilogues.go:43:5:43:5 | Before x | epilogues.go:43:5:43:5 | x | +| epilogues.go:43:5:43:5 | x | epilogues.go:43:5:43:5 | After x | +| epilogues.go:43:5:43:9 | ...<... | epilogues.go:43:5:43:9 | After ...<... [false] | +| epilogues.go:43:5:43:9 | ...<... | epilogues.go:43:5:43:9 | After ...<... [true] | +| epilogues.go:43:5:43:9 | After ...<... [false] | epilogues.go:43:2:46:2 | After if statement | +| epilogues.go:43:5:43:9 | After ...<... [true] | epilogues.go:43:11:46:2 | block statement | +| epilogues.go:43:5:43:9 | Before ...<... | epilogues.go:43:5:43:5 | Before x | +| epilogues.go:43:9:43:9 | 0 | epilogues.go:43:9:43:9 | After 0 | +| epilogues.go:43:9:43:9 | After 0 | epilogues.go:43:5:43:9 | ...<... | +| epilogues.go:43:9:43:9 | Before 0 | epilogues.go:43:9:43:9 | 0 | +| epilogues.go:43:11:46:2 | block statement | epilogues.go:44:3:44:13 | ... = ... | +| epilogues.go:44:3:44:13 | ... = ... | epilogues.go:44:12:44:13 | Before -... | +| epilogues.go:44:3:44:13 | After ... = ... | epilogues.go:45:3:45:8 | Before return statement | +| epilogues.go:44:3:44:13 | assign:0 ... = ... | epilogues.go:44:3:44:13 | After ... = ... | +| epilogues.go:44:12:44:13 | -... | epilogues.go:44:12:44:13 | After -... | +| epilogues.go:44:12:44:13 | After -... | epilogues.go:44:3:44:13 | assign:0 ... = ... | +| epilogues.go:44:12:44:13 | Before -... | epilogues.go:44:13:44:13 | Before x | +| epilogues.go:44:13:44:13 | After x | epilogues.go:44:12:44:13 | -... | +| epilogues.go:44:13:44:13 | Before x | epilogues.go:44:13:44:13 | x | +| epilogues.go:44:13:44:13 | x | epilogues.go:44:13:44:13 | After x | +| epilogues.go:45:3:45:8 | Before return statement | epilogues.go:45:3:45:8 | return statement | +| epilogues.go:45:3:45:8 | return statement | epilogues.go:42:1:48:1 | Normal Exit | +| epilogues.go:45:3:45:8 | return statement | epilogues.go:42:51:48:1 | result-read:0 block statement | +| epilogues.go:47:2:47:14 | Before return statement | epilogues.go:47:9:47:9 | Before x | +| epilogues.go:47:2:47:14 | result-write:0 return statement | epilogues.go:47:2:47:14 | result-write:1 return statement | +| epilogues.go:47:2:47:14 | result-write:1 return statement | epilogues.go:47:2:47:14 | return statement | +| epilogues.go:47:2:47:14 | return statement | epilogues.go:42:1:48:1 | Normal Exit | +| epilogues.go:47:2:47:14 | return statement | epilogues.go:42:51:48:1 | result-read:0 block statement | +| epilogues.go:47:9:47:9 | After x | epilogues.go:47:12:47:14 | Before nil | +| epilogues.go:47:9:47:9 | Before x | epilogues.go:47:9:47:9 | x | +| epilogues.go:47:9:47:9 | x | epilogues.go:47:9:47:9 | After x | +| epilogues.go:47:12:47:14 | After nil | epilogues.go:47:2:47:14 | result-write:0 return statement | +| epilogues.go:47:12:47:14 | Before nil | epilogues.go:47:12:47:14 | nil | +| epilogues.go:47:12:47:14 | nil | epilogues.go:47:12:47:14 | After nil | +| epilogues.go:51:1:54:1 | After function declaration | epilogues.go:59:1:62:1 | Before function declaration | +| epilogues.go:51:1:54:1 | Before function declaration | epilogues.go:51:1:54:1 | function declaration | +| epilogues.go:51:1:54:1 | Entry | epilogues.go:51:38:54:1 | block statement | +| epilogues.go:51:1:54:1 | Normal Exit | epilogues.go:51:1:54:1 | Exit | +| epilogues.go:51:1:54:1 | function declaration | epilogues.go:51:1:54:1 | After function declaration | +| epilogues.go:51:38:54:1 | arg:0 block statement | epilogues.go:51:38:54:1 | param-init:0 block statement | +| epilogues.go:51:38:54:1 | block statement | epilogues.go:51:38:54:1 | arg:0 block statement | +| epilogues.go:51:38:54:1 | param-init:0 block statement | epilogues.go:51:38:54:1 | result-zero-init:0 block statement | +| epilogues.go:51:38:54:1 | result-init:0 block statement | epilogues.go:52:2:52:10 | ... = ... | +| epilogues.go:51:38:54:1 | result-zero-init:0 block statement | epilogues.go:51:38:54:1 | result-init:0 block statement | +| epilogues.go:52:2:52:10 | ... = ... | epilogues.go:52:6:52:10 | Before ...+... | +| epilogues.go:52:2:52:10 | After ... = ... | epilogues.go:53:2:53:7 | Before return statement | +| epilogues.go:52:2:52:10 | assign:0 ... = ... | epilogues.go:52:2:52:10 | After ... = ... | +| epilogues.go:52:6:52:6 | After x | epilogues.go:52:10:52:10 | Before 1 | +| epilogues.go:52:6:52:6 | Before x | epilogues.go:52:6:52:6 | x | +| epilogues.go:52:6:52:6 | x | epilogues.go:52:6:52:6 | After x | +| epilogues.go:52:6:52:10 | ...+... | epilogues.go:52:6:52:10 | After ...+... | +| epilogues.go:52:6:52:10 | After ...+... | epilogues.go:52:2:52:10 | assign:0 ... = ... | +| epilogues.go:52:6:52:10 | Before ...+... | epilogues.go:52:6:52:6 | Before x | +| epilogues.go:52:10:52:10 | 1 | epilogues.go:52:10:52:10 | After 1 | +| epilogues.go:52:10:52:10 | After 1 | epilogues.go:52:6:52:10 | ...+... | +| epilogues.go:52:10:52:10 | Before 1 | epilogues.go:52:10:52:10 | 1 | +| epilogues.go:53:2:53:7 | Before return statement | epilogues.go:53:2:53:7 | return statement | +| epilogues.go:53:2:53:7 | return statement | epilogues.go:51:1:54:1 | Normal Exit | +| epilogues.go:53:2:53:7 | return statement | epilogues.go:51:38:54:1 | result-read:0 block statement | +| epilogues.go:59:1:62:1 | After function declaration | epilogues.go:66:1:71:1 | Before function declaration | +| epilogues.go:59:1:62:1 | Before function declaration | epilogues.go:59:1:62:1 | function declaration | +| epilogues.go:59:1:62:1 | Entry | epilogues.go:59:54:62:1 | block statement | +| epilogues.go:59:1:62:1 | Exceptional Exit | epilogues.go:59:1:62:1 | Exit | +| epilogues.go:59:1:62:1 | Normal Exit | epilogues.go:59:1:62:1 | Exit | +| epilogues.go:59:1:62:1 | function declaration | epilogues.go:59:1:62:1 | After function declaration | +| epilogues.go:59:54:62:1 | After block statement | epilogues.go:59:1:62:1 | Normal Exit | +| epilogues.go:59:54:62:1 | arg:0 block statement | epilogues.go:59:54:62:1 | param-init:0 block statement | +| epilogues.go:59:54:62:1 | arg:1 block statement | epilogues.go:59:54:62:1 | param-init:1 block statement | +| epilogues.go:59:54:62:1 | block statement | epilogues.go:59:54:62:1 | arg:0 block statement | +| epilogues.go:59:54:62:1 | param-init:0 block statement | epilogues.go:59:54:62:1 | arg:1 block statement | +| epilogues.go:59:54:62:1 | param-init:1 block statement | epilogues.go:60:2:60:33 | Before defer statement | +| epilogues.go:60:2:60:33 | After defer statement | epilogues.go:61:2:61:38 | expression statement | +| epilogues.go:60:2:60:33 | Before defer statement | epilogues.go:60:8:60:33 | Before call to log | +| epilogues.go:60:2:60:33 | defer statement | epilogues.go:60:2:60:33 | After defer statement | +| epilogues.go:60:8:60:8 | After l | epilogues.go:60:8:60:12 | selection of log | +| epilogues.go:60:8:60:8 | Before l | epilogues.go:60:8:60:8 | l | +| epilogues.go:60:8:60:8 | l | epilogues.go:60:8:60:8 | After l | +| epilogues.go:60:8:60:12 | After selection of log | epilogues.go:60:14:60:20 | Before "count" | +| epilogues.go:60:8:60:12 | Before selection of log | epilogues.go:60:8:60:8 | Before l | +| epilogues.go:60:8:60:12 | selection of log | epilogues.go:60:8:60:12 | After selection of log | +| epilogues.go:60:8:60:33 | After call to log | epilogues.go:60:2:60:33 | defer statement | +| epilogues.go:60:8:60:33 | Before call to log | epilogues.go:60:8:60:12 | Before selection of log | +| epilogues.go:60:8:60:33 | call to log | epilogues.go:59:1:62:1 | Exceptional Exit | +| epilogues.go:60:8:60:33 | call to log | epilogues.go:60:8:60:33 | After call to log | +| epilogues.go:60:14:60:20 | "count" | epilogues.go:60:14:60:20 | After "count" | +| epilogues.go:60:14:60:20 | After "count" | epilogues.go:60:23:60:32 | Before call to len | +| epilogues.go:60:14:60:20 | Before "count" | epilogues.go:60:14:60:20 | "count" | +| epilogues.go:60:23:60:25 | After len | epilogues.go:60:27:60:31 | Before items | +| epilogues.go:60:23:60:25 | Before len | epilogues.go:60:23:60:25 | len | +| epilogues.go:60:23:60:25 | len | epilogues.go:60:23:60:25 | After len | +| epilogues.go:60:23:60:32 | After call to len | epilogues.go:60:8:60:33 | call to log | +| epilogues.go:60:23:60:32 | Before call to len | epilogues.go:60:23:60:25 | Before len | +| epilogues.go:60:23:60:32 | call to len | epilogues.go:60:23:60:32 | After call to len | +| epilogues.go:60:27:60:31 | After items | epilogues.go:60:23:60:32 | call to len | +| epilogues.go:60:27:60:31 | Before items | epilogues.go:60:27:60:31 | items | +| epilogues.go:60:27:60:31 | items | epilogues.go:60:27:60:31 | After items | +| epilogues.go:61:2:61:12 | After selection of Println | epilogues.go:61:14:61:25 | Before "processing" | +| epilogues.go:61:2:61:12 | Before selection of Println | epilogues.go:61:2:61:12 | selection of Println | +| epilogues.go:61:2:61:12 | selection of Println | epilogues.go:61:2:61:12 | After selection of Println | +| epilogues.go:61:2:61:38 | After call to Println | epilogues.go:61:2:61:38 | After expression statement | +| epilogues.go:61:2:61:38 | After expression statement | epilogues.go:59:54:62:1 | After block statement | +| epilogues.go:61:2:61:38 | Before call to Println | epilogues.go:61:2:61:12 | Before selection of Println | +| epilogues.go:61:2:61:38 | call to Println | epilogues.go:59:1:62:1 | Exceptional Exit | +| epilogues.go:61:2:61:38 | call to Println | epilogues.go:61:2:61:38 | After call to Println | +| epilogues.go:61:2:61:38 | expression statement | epilogues.go:61:2:61:38 | Before call to Println | +| epilogues.go:61:14:61:25 | "processing" | epilogues.go:61:14:61:25 | After "processing" | +| epilogues.go:61:14:61:25 | After "processing" | epilogues.go:61:28:61:37 | Before call to len | +| epilogues.go:61:14:61:25 | Before "processing" | epilogues.go:61:14:61:25 | "processing" | +| epilogues.go:61:28:61:30 | After len | epilogues.go:61:32:61:36 | Before items | +| epilogues.go:61:28:61:30 | Before len | epilogues.go:61:28:61:30 | len | +| epilogues.go:61:28:61:30 | len | epilogues.go:61:28:61:30 | After len | +| epilogues.go:61:28:61:37 | After call to len | epilogues.go:61:2:61:38 | call to Println | +| epilogues.go:61:28:61:37 | Before call to len | epilogues.go:61:28:61:30 | Before len | +| epilogues.go:61:28:61:37 | call to len | epilogues.go:61:28:61:37 | After call to len | +| epilogues.go:61:32:61:36 | After items | epilogues.go:61:28:61:37 | call to len | +| epilogues.go:61:32:61:36 | Before items | epilogues.go:61:32:61:36 | items | +| epilogues.go:61:32:61:36 | items | epilogues.go:61:32:61:36 | After items | +| epilogues.go:66:1:71:1 | After function declaration | epilogues.go:77:1:82:1 | Before function declaration | +| epilogues.go:66:1:71:1 | Before function declaration | epilogues.go:66:1:71:1 | function declaration | +| epilogues.go:66:1:71:1 | Entry | epilogues.go:66:43:71:1 | block statement | +| epilogues.go:66:1:71:1 | Exceptional Exit | epilogues.go:66:1:71:1 | Exit | +| epilogues.go:66:1:71:1 | Normal Exit | epilogues.go:66:1:71:1 | Exit | +| epilogues.go:66:1:71:1 | function declaration | epilogues.go:66:1:71:1 | After function declaration | +| epilogues.go:66:43:71:1 | After block statement | epilogues.go:66:1:71:1 | Normal Exit | +| epilogues.go:66:43:71:1 | arg:0 block statement | epilogues.go:66:43:71:1 | param-init:0 block statement | +| epilogues.go:66:43:71:1 | block statement | epilogues.go:66:43:71:1 | arg:0 block statement | +| epilogues.go:66:43:71:1 | param-init:0 block statement | epilogues.go:67:2:67:31 | ... := ... | +| epilogues.go:67:2:67:31 | ... := ... | epilogues.go:67:7:67:31 | Before struct literal | +| epilogues.go:67:2:67:31 | After ... := ... | epilogues.go:68:2:68:24 | Before defer statement | +| epilogues.go:67:2:67:31 | assign:0 ... := ... | epilogues.go:67:2:67:31 | After ... := ... | +| epilogues.go:67:7:67:31 | After struct literal | epilogues.go:67:2:67:31 | assign:0 ... := ... | +| epilogues.go:67:7:67:31 | Before struct literal | epilogues.go:67:7:67:31 | struct literal | +| epilogues.go:67:7:67:31 | struct literal | epilogues.go:67:17:67:30 | Before key-value pair | +| epilogues.go:67:17:67:30 | After key-value pair | epilogues.go:67:17:67:30 | lit-init key-value pair | +| epilogues.go:67:17:67:30 | Before key-value pair | epilogues.go:67:25:67:30 | Before prefix | +| epilogues.go:67:17:67:30 | key-value pair | epilogues.go:67:17:67:30 | After key-value pair | +| epilogues.go:67:17:67:30 | lit-init key-value pair | epilogues.go:67:7:67:31 | After struct literal | +| epilogues.go:67:25:67:30 | After prefix | epilogues.go:67:17:67:30 | key-value pair | +| epilogues.go:67:25:67:30 | Before prefix | epilogues.go:67:25:67:30 | prefix | +| epilogues.go:67:25:67:30 | prefix | epilogues.go:67:25:67:30 | After prefix | +| epilogues.go:68:2:68:24 | After defer statement | epilogues.go:69:2:69:25 | Before defer statement | +| epilogues.go:68:2:68:24 | Before defer statement | epilogues.go:68:8:68:24 | Before call to logValue | +| epilogues.go:68:2:68:24 | defer statement | epilogues.go:68:2:68:24 | After defer statement | +| epilogues.go:68:8:68:8 | After l | epilogues.go:68:8:68:17 | selection of logValue | +| epilogues.go:68:8:68:8 | Before l | epilogues.go:68:8:68:8 | l | +| epilogues.go:68:8:68:8 | l | epilogues.go:68:8:68:8 | After l | +| epilogues.go:68:8:68:17 | After selection of logValue | epilogues.go:68:19:68:23 | Before "bye" | +| epilogues.go:68:8:68:17 | Before selection of logValue | epilogues.go:68:8:68:8 | Before l | +| epilogues.go:68:8:68:17 | selection of logValue | epilogues.go:68:8:68:17 | After selection of logValue | +| epilogues.go:68:8:68:24 | After call to logValue | epilogues.go:68:2:68:24 | defer statement | +| epilogues.go:68:8:68:24 | Before call to logValue | epilogues.go:68:8:68:17 | Before selection of logValue | +| epilogues.go:68:8:68:24 | call to logValue | epilogues.go:66:1:71:1 | Exceptional Exit | +| epilogues.go:68:8:68:24 | call to logValue | epilogues.go:68:8:68:24 | After call to logValue | +| epilogues.go:68:19:68:23 | "bye" | epilogues.go:68:19:68:23 | After "bye" | +| epilogues.go:68:19:68:23 | After "bye" | epilogues.go:68:8:68:24 | call to logValue | +| epilogues.go:68:19:68:23 | Before "bye" | epilogues.go:68:19:68:23 | "bye" | +| epilogues.go:69:2:69:25 | After defer statement | epilogues.go:70:2:70:20 | expression statement | +| epilogues.go:69:2:69:25 | Before defer statement | epilogues.go:69:8:69:25 | Before call to log | +| epilogues.go:69:2:69:25 | defer statement | epilogues.go:69:2:69:25 | After defer statement | +| epilogues.go:69:8:69:15 | After selection of log | epilogues.go:69:17:69:21 | Before "ptr" | +| epilogues.go:69:8:69:15 | Before selection of log | epilogues.go:69:9:69:10 | Before &... | +| epilogues.go:69:8:69:15 | selection of log | epilogues.go:69:8:69:15 | After selection of log | +| epilogues.go:69:8:69:25 | After call to log | epilogues.go:69:2:69:25 | defer statement | +| epilogues.go:69:8:69:25 | Before call to log | epilogues.go:69:8:69:15 | Before selection of log | +| epilogues.go:69:8:69:25 | call to log | epilogues.go:66:1:71:1 | Exceptional Exit | +| epilogues.go:69:8:69:25 | call to log | epilogues.go:69:8:69:25 | After call to log | +| epilogues.go:69:9:69:10 | &... | epilogues.go:69:9:69:10 | After &... | +| epilogues.go:69:9:69:10 | After &... | epilogues.go:69:8:69:15 | selection of log | +| epilogues.go:69:9:69:10 | Before &... | epilogues.go:69:10:69:10 | Before l | +| epilogues.go:69:10:69:10 | After l | epilogues.go:69:9:69:10 | &... | +| epilogues.go:69:10:69:10 | Before l | epilogues.go:69:10:69:10 | l | +| epilogues.go:69:10:69:10 | l | epilogues.go:69:10:69:10 | After l | +| epilogues.go:69:17:69:21 | "ptr" | epilogues.go:69:17:69:21 | After "ptr" | +| epilogues.go:69:17:69:21 | After "ptr" | epilogues.go:69:24:69:24 | Before 7 | +| epilogues.go:69:17:69:21 | Before "ptr" | epilogues.go:69:17:69:21 | "ptr" | +| epilogues.go:69:24:69:24 | 7 | epilogues.go:69:24:69:24 | After 7 | +| epilogues.go:69:24:69:24 | After 7 | epilogues.go:69:8:69:25 | call to log | +| epilogues.go:69:24:69:24 | Before 7 | epilogues.go:69:24:69:24 | 7 | +| epilogues.go:70:2:70:12 | After selection of Println | epilogues.go:70:14:70:19 | Before "body" | +| epilogues.go:70:2:70:12 | Before selection of Println | epilogues.go:70:2:70:12 | selection of Println | +| epilogues.go:70:2:70:12 | selection of Println | epilogues.go:70:2:70:12 | After selection of Println | +| epilogues.go:70:2:70:20 | After call to Println | epilogues.go:70:2:70:20 | After expression statement | +| epilogues.go:70:2:70:20 | After expression statement | epilogues.go:66:43:71:1 | After block statement | +| epilogues.go:70:2:70:20 | Before call to Println | epilogues.go:70:2:70:12 | Before selection of Println | +| epilogues.go:70:2:70:20 | call to Println | epilogues.go:66:1:71:1 | Exceptional Exit | +| epilogues.go:70:2:70:20 | call to Println | epilogues.go:70:2:70:20 | After call to Println | +| epilogues.go:70:2:70:20 | expression statement | epilogues.go:70:2:70:20 | Before call to Println | +| epilogues.go:70:14:70:19 | "body" | epilogues.go:70:14:70:19 | After "body" | +| epilogues.go:70:14:70:19 | After "body" | epilogues.go:70:2:70:20 | call to Println | +| epilogues.go:70:14:70:19 | Before "body" | epilogues.go:70:14:70:19 | "body" | +| epilogues.go:77:1:82:1 | After function declaration | epilogues.go:87:1:98:1 | Before function declaration | +| epilogues.go:77:1:82:1 | Before function declaration | epilogues.go:77:1:82:1 | function declaration | +| epilogues.go:77:1:82:1 | Entry | epilogues.go:77:29:82:1 | block statement | +| epilogues.go:77:1:82:1 | Exceptional Exit | epilogues.go:77:1:82:1 | Exit | +| epilogues.go:77:1:82:1 | Normal Exit | epilogues.go:77:1:82:1 | Exit | +| epilogues.go:77:1:82:1 | function declaration | epilogues.go:77:1:82:1 | After function declaration | +| epilogues.go:77:29:82:1 | After block statement | epilogues.go:77:1:82:1 | Normal Exit | +| epilogues.go:77:29:82:1 | arg:0 block statement | epilogues.go:77:29:82:1 | param-init:0 block statement | +| epilogues.go:77:29:82:1 | block statement | epilogues.go:77:29:82:1 | arg:0 block statement | +| epilogues.go:77:29:82:1 | param-init:0 block statement | epilogues.go:78:2:80:15 | Before defer statement | +| epilogues.go:78:2:80:15 | After defer statement | epilogues.go:81:2:81:23 | expression statement | +| epilogues.go:78:2:80:15 | Before defer statement | epilogues.go:78:8:80:15 | Before function call | +| epilogues.go:78:2:80:15 | defer statement | epilogues.go:78:2:80:15 | After defer statement | +| epilogues.go:78:8:80:2 | After function literal | epilogues.go:80:4:80:9 | Before "done" | +| epilogues.go:78:8:80:2 | Before function literal | epilogues.go:78:8:80:2 | function literal | +| epilogues.go:78:8:80:2 | Entry | epilogues.go:78:34:80:2 | block statement | +| epilogues.go:78:8:80:2 | Exceptional Exit | epilogues.go:78:8:80:2 | Exit | +| epilogues.go:78:8:80:2 | Normal Exit | epilogues.go:78:8:80:2 | Exit | +| epilogues.go:78:8:80:2 | function literal | epilogues.go:78:8:80:2 | After function literal | +| epilogues.go:78:8:80:15 | After function call | epilogues.go:78:2:80:15 | defer statement | +| epilogues.go:78:8:80:15 | Before function call | epilogues.go:78:8:80:2 | Before function literal | +| epilogues.go:78:8:80:15 | function call | epilogues.go:77:1:82:1 | Exceptional Exit | +| epilogues.go:78:8:80:15 | function call | epilogues.go:78:8:80:15 | After function call | +| epilogues.go:78:34:80:2 | After block statement | epilogues.go:78:8:80:2 | Normal Exit | +| epilogues.go:78:34:80:2 | arg:0 block statement | epilogues.go:78:34:80:2 | param-init:0 block statement | +| epilogues.go:78:34:80:2 | arg:1 block statement | epilogues.go:78:34:80:2 | param-init:1 block statement | +| epilogues.go:78:34:80:2 | block statement | epilogues.go:78:34:80:2 | arg:0 block statement | +| epilogues.go:78:34:80:2 | param-init:0 block statement | epilogues.go:78:34:80:2 | arg:1 block statement | +| epilogues.go:78:34:80:2 | param-init:1 block statement | epilogues.go:79:3:79:23 | expression statement | +| epilogues.go:79:3:79:13 | After selection of Println | epilogues.go:79:15:79:19 | Before label | +| epilogues.go:79:3:79:13 | Before selection of Println | epilogues.go:79:3:79:13 | selection of Println | +| epilogues.go:79:3:79:13 | selection of Println | epilogues.go:79:3:79:13 | After selection of Println | +| epilogues.go:79:3:79:23 | After call to Println | epilogues.go:79:3:79:23 | After expression statement | +| epilogues.go:79:3:79:23 | After expression statement | epilogues.go:78:34:80:2 | After block statement | +| epilogues.go:79:3:79:23 | Before call to Println | epilogues.go:79:3:79:13 | Before selection of Println | +| epilogues.go:79:3:79:23 | call to Println | epilogues.go:78:8:80:2 | Exceptional Exit | +| epilogues.go:79:3:79:23 | call to Println | epilogues.go:79:3:79:23 | After call to Println | +| epilogues.go:79:3:79:23 | expression statement | epilogues.go:79:3:79:23 | Before call to Println | +| epilogues.go:79:15:79:19 | After label | epilogues.go:79:22:79:22 | Before n | +| epilogues.go:79:15:79:19 | Before label | epilogues.go:79:15:79:19 | label | +| epilogues.go:79:15:79:19 | label | epilogues.go:79:15:79:19 | After label | +| epilogues.go:79:22:79:22 | After n | epilogues.go:79:3:79:23 | call to Println | +| epilogues.go:79:22:79:22 | Before n | epilogues.go:79:22:79:22 | n | +| epilogues.go:79:22:79:22 | n | epilogues.go:79:22:79:22 | After n | +| epilogues.go:80:4:80:9 | "done" | epilogues.go:80:4:80:9 | After "done" | +| epilogues.go:80:4:80:9 | After "done" | epilogues.go:80:12:80:14 | Before ...+... | +| epilogues.go:80:4:80:9 | Before "done" | epilogues.go:80:4:80:9 | "done" | +| epilogues.go:80:12:80:12 | After x | epilogues.go:80:14:80:14 | Before 1 | +| epilogues.go:80:12:80:12 | Before x | epilogues.go:80:12:80:12 | x | +| epilogues.go:80:12:80:12 | x | epilogues.go:80:12:80:12 | After x | +| epilogues.go:80:12:80:14 | ...+... | epilogues.go:80:12:80:14 | After ...+... | +| epilogues.go:80:12:80:14 | After ...+... | epilogues.go:78:8:80:15 | function call | +| epilogues.go:80:12:80:14 | Before ...+... | epilogues.go:80:12:80:12 | Before x | +| epilogues.go:80:14:80:14 | 1 | epilogues.go:80:14:80:14 | After 1 | +| epilogues.go:80:14:80:14 | After 1 | epilogues.go:80:12:80:14 | ...+... | +| epilogues.go:80:14:80:14 | Before 1 | epilogues.go:80:14:80:14 | 1 | +| epilogues.go:81:2:81:12 | After selection of Println | epilogues.go:81:14:81:19 | Before "body" | +| epilogues.go:81:2:81:12 | Before selection of Println | epilogues.go:81:2:81:12 | selection of Println | +| epilogues.go:81:2:81:12 | selection of Println | epilogues.go:81:2:81:12 | After selection of Println | +| epilogues.go:81:2:81:23 | After call to Println | epilogues.go:81:2:81:23 | After expression statement | +| epilogues.go:81:2:81:23 | After expression statement | epilogues.go:77:29:82:1 | After block statement | +| epilogues.go:81:2:81:23 | Before call to Println | epilogues.go:81:2:81:12 | Before selection of Println | +| epilogues.go:81:2:81:23 | call to Println | epilogues.go:77:1:82:1 | Exceptional Exit | +| epilogues.go:81:2:81:23 | call to Println | epilogues.go:81:2:81:23 | After call to Println | +| epilogues.go:81:2:81:23 | expression statement | epilogues.go:81:2:81:23 | Before call to Println | +| epilogues.go:81:14:81:19 | "body" | epilogues.go:81:14:81:19 | After "body" | +| epilogues.go:81:14:81:19 | After "body" | epilogues.go:81:22:81:22 | Before x | +| epilogues.go:81:14:81:19 | Before "body" | epilogues.go:81:14:81:19 | "body" | +| epilogues.go:81:22:81:22 | After x | epilogues.go:81:2:81:23 | call to Println | +| epilogues.go:81:22:81:22 | Before x | epilogues.go:81:22:81:22 | x | +| epilogues.go:81:22:81:22 | x | epilogues.go:81:22:81:22 | After x | +| epilogues.go:87:1:98:1 | After function declaration | epilogues.go:102:1:110:1 | Before function declaration | +| epilogues.go:87:1:98:1 | Before function declaration | epilogues.go:87:1:98:1 | function declaration | +| epilogues.go:87:1:98:1 | Entry | epilogues.go:87:42:98:1 | block statement | +| epilogues.go:87:1:98:1 | Exceptional Exit | epilogues.go:87:1:98:1 | Exit | +| epilogues.go:87:1:98:1 | Normal Exit | epilogues.go:87:1:98:1 | Exit | +| epilogues.go:87:1:98:1 | function declaration | epilogues.go:87:1:98:1 | After function declaration | +| epilogues.go:87:42:98:1 | arg:0 block statement | epilogues.go:87:42:98:1 | param-init:0 block statement | +| epilogues.go:87:42:98:1 | block statement | epilogues.go:87:42:98:1 | arg:0 block statement | +| epilogues.go:87:42:98:1 | param-init:0 block statement | epilogues.go:87:42:98:1 | result-zero-init:0 block statement | +| epilogues.go:87:42:98:1 | result-init:0 block statement | epilogues.go:88:2:92:4 | Before defer statement | +| epilogues.go:87:42:98:1 | result-zero-init:0 block statement | epilogues.go:87:42:98:1 | result-init:0 block statement | +| epilogues.go:88:2:92:4 | After defer statement | epilogues.go:93:2:95:2 | if statement | +| epilogues.go:88:2:92:4 | Before defer statement | epilogues.go:88:8:92:4 | Before function call | +| epilogues.go:88:2:92:4 | defer statement | epilogues.go:88:2:92:4 | After defer statement | +| epilogues.go:88:8:92:2 | After function literal | epilogues.go:88:8:92:4 | function call | +| epilogues.go:88:8:92:2 | Before function literal | epilogues.go:88:8:92:2 | function literal | +| epilogues.go:88:8:92:2 | Entry | epilogues.go:88:15:92:2 | block statement | +| epilogues.go:88:8:92:2 | Normal Exit | epilogues.go:88:8:92:2 | Exit | +| epilogues.go:88:8:92:2 | function literal | epilogues.go:88:8:92:2 | After function literal | +| epilogues.go:88:8:92:4 | After function call | epilogues.go:88:2:92:4 | defer statement | +| epilogues.go:88:8:92:4 | Before function call | epilogues.go:88:8:92:2 | Before function literal | +| epilogues.go:88:8:92:4 | function call | epilogues.go:87:1:98:1 | Exceptional Exit | +| epilogues.go:88:8:92:4 | function call | epilogues.go:88:8:92:4 | After function call | +| epilogues.go:88:15:92:2 | After block statement | epilogues.go:88:8:92:2 | Normal Exit | +| epilogues.go:88:15:92:2 | block statement | epilogues.go:89:3:91:3 | if statement | +| epilogues.go:89:3:91:3 | After if statement | epilogues.go:88:15:92:2 | After block statement | +| epilogues.go:89:3:91:3 | if statement | epilogues.go:89:6:89:19 | ... := ... | +| epilogues.go:89:6:89:19 | ... := ... | epilogues.go:89:11:89:19 | Before call to recover | +| epilogues.go:89:6:89:19 | After ... := ... | epilogues.go:89:22:89:29 | Before ...!=... | +| epilogues.go:89:6:89:19 | assign:0 ... := ... | epilogues.go:89:6:89:19 | After ... := ... | +| epilogues.go:89:11:89:17 | After recover | epilogues.go:89:11:89:19 | call to recover | +| epilogues.go:89:11:89:17 | Before recover | epilogues.go:89:11:89:17 | recover | +| epilogues.go:89:11:89:17 | recover | epilogues.go:89:11:89:17 | After recover | +| epilogues.go:89:11:89:19 | After call to recover | epilogues.go:89:6:89:19 | assign:0 ... := ... | +| epilogues.go:89:11:89:19 | Before call to recover | epilogues.go:89:11:89:17 | Before recover | +| epilogues.go:89:11:89:19 | call to recover | epilogues.go:89:11:89:19 | After call to recover | +| epilogues.go:89:22:89:22 | After r | epilogues.go:89:27:89:29 | Before nil | +| epilogues.go:89:22:89:22 | Before r | epilogues.go:89:22:89:22 | r | +| epilogues.go:89:22:89:22 | r | epilogues.go:89:22:89:22 | After r | +| epilogues.go:89:22:89:29 | ...!=... | epilogues.go:89:22:89:29 | After ...!=... [false] | +| epilogues.go:89:22:89:29 | ...!=... | epilogues.go:89:22:89:29 | After ...!=... [true] | +| epilogues.go:89:22:89:29 | After ...!=... [false] | epilogues.go:89:3:91:3 | After if statement | +| epilogues.go:89:22:89:29 | After ...!=... [true] | epilogues.go:89:31:91:3 | block statement | +| epilogues.go:89:22:89:29 | Before ...!=... | epilogues.go:89:22:89:22 | Before r | +| epilogues.go:89:27:89:29 | After nil | epilogues.go:89:22:89:29 | ...!=... | +| epilogues.go:89:27:89:29 | Before nil | epilogues.go:89:27:89:29 | nil | +| epilogues.go:89:27:89:29 | nil | epilogues.go:89:27:89:29 | After nil | +| epilogues.go:89:31:91:3 | After block statement | epilogues.go:89:3:91:3 | After if statement | +| epilogues.go:89:31:91:3 | block statement | epilogues.go:90:4:90:14 | ... = ... | +| epilogues.go:90:4:90:14 | ... = ... | epilogues.go:90:13:90:14 | Before -... | +| epilogues.go:90:4:90:14 | After ... = ... | epilogues.go:89:31:91:3 | After block statement | +| epilogues.go:90:4:90:14 | assign:0 ... = ... | epilogues.go:90:4:90:14 | After ... = ... | +| epilogues.go:90:13:90:14 | -... | epilogues.go:90:13:90:14 | After -... | +| epilogues.go:90:13:90:14 | After -... | epilogues.go:90:4:90:14 | assign:0 ... = ... | +| epilogues.go:90:13:90:14 | Before -... | epilogues.go:90:14:90:14 | Before 1 | +| epilogues.go:90:14:90:14 | 1 | epilogues.go:90:14:90:14 | After 1 | +| epilogues.go:90:14:90:14 | After 1 | epilogues.go:90:13:90:14 | -... | +| epilogues.go:90:14:90:14 | Before 1 | epilogues.go:90:14:90:14 | 1 | +| epilogues.go:93:2:95:2 | After if statement | epilogues.go:96:2:96:15 | ... = ... | +| epilogues.go:93:2:95:2 | if statement | epilogues.go:93:5:93:9 | Before ...<... | +| epilogues.go:93:5:93:5 | After x | epilogues.go:93:9:93:9 | Before 0 | +| epilogues.go:93:5:93:5 | Before x | epilogues.go:93:5:93:5 | x | +| epilogues.go:93:5:93:5 | x | epilogues.go:93:5:93:5 | After x | +| epilogues.go:93:5:93:9 | ...<... | epilogues.go:93:5:93:9 | After ...<... [false] | +| epilogues.go:93:5:93:9 | ...<... | epilogues.go:93:5:93:9 | After ...<... [true] | +| epilogues.go:93:5:93:9 | After ...<... [false] | epilogues.go:93:2:95:2 | After if statement | +| epilogues.go:93:5:93:9 | After ...<... [true] | epilogues.go:93:11:95:2 | block statement | +| epilogues.go:93:5:93:9 | Before ...<... | epilogues.go:93:5:93:5 | Before x | +| epilogues.go:93:9:93:9 | 0 | epilogues.go:93:9:93:9 | After 0 | +| epilogues.go:93:9:93:9 | After 0 | epilogues.go:93:5:93:9 | ...<... | +| epilogues.go:93:9:93:9 | Before 0 | epilogues.go:93:9:93:9 | 0 | +| epilogues.go:93:11:95:2 | block statement | epilogues.go:94:3:94:14 | expression statement | +| epilogues.go:94:3:94:7 | After panic | epilogues.go:94:9:94:13 | Before "neg" | +| epilogues.go:94:3:94:7 | Before panic | epilogues.go:94:3:94:7 | panic | +| epilogues.go:94:3:94:7 | panic | epilogues.go:94:3:94:7 | After panic | +| epilogues.go:94:3:94:14 | Before call to panic | epilogues.go:94:3:94:7 | Before panic | +| epilogues.go:94:3:94:14 | call to panic | epilogues.go:87:1:98:1 | Exceptional Exit | +| epilogues.go:94:3:94:14 | expression statement | epilogues.go:94:3:94:14 | Before call to panic | +| epilogues.go:94:9:94:13 | "neg" | epilogues.go:94:9:94:13 | After "neg" | +| epilogues.go:94:9:94:13 | After "neg" | epilogues.go:94:3:94:14 | call to panic | +| epilogues.go:94:9:94:13 | Before "neg" | epilogues.go:94:9:94:13 | "neg" | +| epilogues.go:96:2:96:15 | ... = ... | epilogues.go:96:11:96:15 | Before ...*... | +| epilogues.go:96:2:96:15 | After ... = ... | epilogues.go:97:2:97:14 | Before return statement | +| epilogues.go:96:2:96:15 | assign:0 ... = ... | epilogues.go:96:2:96:15 | After ... = ... | +| epilogues.go:96:11:96:11 | After x | epilogues.go:96:15:96:15 | Before x | +| epilogues.go:96:11:96:11 | Before x | epilogues.go:96:11:96:11 | x | +| epilogues.go:96:11:96:11 | x | epilogues.go:96:11:96:11 | After x | +| epilogues.go:96:11:96:15 | ...*... | epilogues.go:96:11:96:15 | After ...*... | +| epilogues.go:96:11:96:15 | After ...*... | epilogues.go:96:2:96:15 | assign:0 ... = ... | +| epilogues.go:96:11:96:15 | Before ...*... | epilogues.go:96:11:96:11 | Before x | +| epilogues.go:96:15:96:15 | After x | epilogues.go:96:11:96:15 | ...*... | +| epilogues.go:96:15:96:15 | Before x | epilogues.go:96:15:96:15 | x | +| epilogues.go:96:15:96:15 | x | epilogues.go:96:15:96:15 | After x | +| epilogues.go:97:2:97:14 | Before return statement | epilogues.go:97:9:97:14 | Before result | +| epilogues.go:97:2:97:14 | result-write:0 return statement | epilogues.go:97:2:97:14 | return statement | +| epilogues.go:97:2:97:14 | return statement | epilogues.go:87:1:98:1 | Normal Exit | +| epilogues.go:97:2:97:14 | return statement | epilogues.go:87:42:98:1 | result-read:0 block statement | +| epilogues.go:97:9:97:14 | After result | epilogues.go:97:2:97:14 | result-write:0 return statement | +| epilogues.go:97:9:97:14 | Before result | epilogues.go:97:9:97:14 | result | +| epilogues.go:97:9:97:14 | result | epilogues.go:97:9:97:14 | After result | +| epilogues.go:102:1:110:1 | After function declaration | epilogues.go:115:1:118:1 | Before function declaration | +| epilogues.go:102:1:110:1 | Before function declaration | epilogues.go:102:1:110:1 | function declaration | +| epilogues.go:102:1:110:1 | Entry | epilogues.go:102:50:110:1 | block statement | +| epilogues.go:102:1:110:1 | Exceptional Exit | epilogues.go:102:1:110:1 | Exit | +| epilogues.go:102:1:110:1 | Normal Exit | epilogues.go:102:1:110:1 | Exit | +| epilogues.go:102:1:110:1 | function declaration | epilogues.go:102:1:110:1 | After function declaration | +| epilogues.go:102:50:110:1 | arg:0 block statement | epilogues.go:102:50:110:1 | param-init:0 block statement | +| epilogues.go:102:50:110:1 | block statement | epilogues.go:102:50:110:1 | arg:0 block statement | +| epilogues.go:102:50:110:1 | param-init:0 block statement | epilogues.go:102:50:110:1 | result-zero-init:0 block statement | +| epilogues.go:102:50:110:1 | result-init:0 block statement | epilogues.go:102:50:110:1 | result-zero-init:1 block statement | +| epilogues.go:102:50:110:1 | result-init:1 block statement | epilogues.go:103:2:103:19 | Before defer statement | +| epilogues.go:102:50:110:1 | result-read:0 block statement | epilogues.go:102:50:110:1 | result-read:1 block statement | +| epilogues.go:102:50:110:1 | result-zero-init:0 block statement | epilogues.go:102:50:110:1 | result-init:0 block statement | +| epilogues.go:102:50:110:1 | result-zero-init:1 block statement | epilogues.go:102:50:110:1 | result-init:1 block statement | +| epilogues.go:103:2:103:19 | After defer statement | epilogues.go:104:2:106:2 | if statement | +| epilogues.go:103:2:103:19 | Before defer statement | epilogues.go:103:8:103:19 | Before call to epiRecover | +| epilogues.go:103:2:103:19 | defer statement | epilogues.go:103:2:103:19 | After defer statement | +| epilogues.go:103:8:103:17 | After epiRecover | epilogues.go:103:8:103:19 | call to epiRecover | +| epilogues.go:103:8:103:17 | Before epiRecover | epilogues.go:103:8:103:17 | epiRecover | +| epilogues.go:103:8:103:17 | epiRecover | epilogues.go:103:8:103:17 | After epiRecover | +| epilogues.go:103:8:103:19 | After call to epiRecover | epilogues.go:103:2:103:19 | defer statement | +| epilogues.go:103:8:103:19 | Before call to epiRecover | epilogues.go:103:8:103:17 | Before epiRecover | +| epilogues.go:103:8:103:19 | call to epiRecover | epilogues.go:102:1:110:1 | Exceptional Exit | +| epilogues.go:103:8:103:19 | call to epiRecover | epilogues.go:103:8:103:19 | After call to epiRecover | +| epilogues.go:104:2:106:2 | After if statement | epilogues.go:107:2:107:6 | ... = ... | +| epilogues.go:104:2:106:2 | if statement | epilogues.go:104:5:104:10 | Before ...==... | +| epilogues.go:104:5:104:5 | After x | epilogues.go:104:10:104:10 | Before 0 | +| epilogues.go:104:5:104:5 | Before x | epilogues.go:104:5:104:5 | x | +| epilogues.go:104:5:104:5 | x | epilogues.go:104:5:104:5 | After x | +| epilogues.go:104:5:104:10 | ...==... | epilogues.go:104:5:104:10 | After ...==... [false] | +| epilogues.go:104:5:104:10 | ...==... | epilogues.go:104:5:104:10 | After ...==... [true] | +| epilogues.go:104:5:104:10 | After ...==... [false] | epilogues.go:104:2:106:2 | After if statement | +| epilogues.go:104:5:104:10 | After ...==... [true] | epilogues.go:104:12:106:2 | block statement | +| epilogues.go:104:5:104:10 | Before ...==... | epilogues.go:104:5:104:5 | Before x | +| epilogues.go:104:10:104:10 | 0 | epilogues.go:104:10:104:10 | After 0 | +| epilogues.go:104:10:104:10 | After 0 | epilogues.go:104:5:104:10 | ...==... | +| epilogues.go:104:10:104:10 | Before 0 | epilogues.go:104:10:104:10 | 0 | +| epilogues.go:104:12:106:2 | block statement | epilogues.go:105:3:105:8 | Before return statement | +| epilogues.go:105:3:105:8 | Before return statement | epilogues.go:105:3:105:8 | return statement | +| epilogues.go:105:3:105:8 | return statement | epilogues.go:102:1:110:1 | Normal Exit | +| epilogues.go:105:3:105:8 | return statement | epilogues.go:102:50:110:1 | result-read:0 block statement | +| epilogues.go:107:2:107:6 | ... = ... | epilogues.go:107:6:107:6 | Before x | +| epilogues.go:107:2:107:6 | After ... = ... | epilogues.go:108:2:108:10 | ... = ... | +| epilogues.go:107:2:107:6 | assign:0 ... = ... | epilogues.go:107:2:107:6 | After ... = ... | +| epilogues.go:107:6:107:6 | After x | epilogues.go:107:2:107:6 | assign:0 ... = ... | +| epilogues.go:107:6:107:6 | Before x | epilogues.go:107:6:107:6 | x | +| epilogues.go:107:6:107:6 | x | epilogues.go:107:6:107:6 | After x | +| epilogues.go:108:2:108:10 | ... = ... | epilogues.go:108:7:108:10 | Before true | +| epilogues.go:108:2:108:10 | After ... = ... | epilogues.go:109:2:109:7 | Before return statement | +| epilogues.go:108:2:108:10 | assign:0 ... = ... | epilogues.go:108:2:108:10 | After ... = ... | +| epilogues.go:108:7:108:10 | After true | epilogues.go:108:2:108:10 | assign:0 ... = ... | +| epilogues.go:108:7:108:10 | Before true | epilogues.go:108:7:108:10 | true | +| epilogues.go:108:7:108:10 | true | epilogues.go:108:7:108:10 | After true | +| epilogues.go:109:2:109:7 | Before return statement | epilogues.go:109:2:109:7 | return statement | +| epilogues.go:109:2:109:7 | return statement | epilogues.go:102:1:110:1 | Normal Exit | +| epilogues.go:109:2:109:7 | return statement | epilogues.go:102:50:110:1 | result-read:0 block statement | +| epilogues.go:115:1:118:1 | After function declaration | epilogues.go:0:0:0:0 | After epilogues.go | +| epilogues.go:115:1:118:1 | Before function declaration | epilogues.go:115:1:118:1 | function declaration | +| epilogues.go:115:1:118:1 | Entry | epilogues.go:115:26:118:1 | block statement | +| epilogues.go:115:1:118:1 | Exceptional Exit | epilogues.go:115:1:118:1 | Exit | +| epilogues.go:115:1:118:1 | function declaration | epilogues.go:115:1:118:1 | After function declaration | +| epilogues.go:115:26:118:1 | block statement | epilogues.go:116:2:116:19 | Before defer statement | +| epilogues.go:116:2:116:19 | After defer statement | epilogues.go:117:2:117:14 | expression statement | +| epilogues.go:116:2:116:19 | Before defer statement | epilogues.go:116:8:116:19 | Before call to epiRecover | +| epilogues.go:116:2:116:19 | defer statement | epilogues.go:116:2:116:19 | After defer statement | +| epilogues.go:116:8:116:17 | After epiRecover | epilogues.go:116:8:116:19 | call to epiRecover | +| epilogues.go:116:8:116:17 | Before epiRecover | epilogues.go:116:8:116:17 | epiRecover | +| epilogues.go:116:8:116:17 | epiRecover | epilogues.go:116:8:116:17 | After epiRecover | +| epilogues.go:116:8:116:19 | After call to epiRecover | epilogues.go:116:2:116:19 | defer statement | +| epilogues.go:116:8:116:19 | Before call to epiRecover | epilogues.go:116:8:116:17 | Before epiRecover | +| epilogues.go:116:8:116:19 | call to epiRecover | epilogues.go:115:1:118:1 | Exceptional Exit | +| epilogues.go:116:8:116:19 | call to epiRecover | epilogues.go:116:8:116:19 | After call to epiRecover | +| epilogues.go:117:2:117:6 | After panic | epilogues.go:117:8:117:13 | Before "boom" | +| epilogues.go:117:2:117:6 | Before panic | epilogues.go:117:2:117:6 | panic | +| epilogues.go:117:2:117:6 | panic | epilogues.go:117:2:117:6 | After panic | +| epilogues.go:117:2:117:14 | Before call to panic | epilogues.go:117:2:117:6 | Before panic | +| epilogues.go:117:2:117:14 | call to panic | epilogues.go:115:1:118:1 | Exceptional Exit | +| epilogues.go:117:2:117:14 | expression statement | epilogues.go:117:2:117:14 | Before call to panic | +| epilogues.go:117:8:117:13 | "boom" | epilogues.go:117:8:117:13 | After "boom" | +| epilogues.go:117:8:117:13 | After "boom" | epilogues.go:117:2:117:14 | call to panic | +| epilogues.go:117:8:117:13 | Before "boom" | epilogues.go:117:8:117:13 | "boom" | +| equalitytests.go:0:0:0:0 | After equalitytests.go | equalitytests.go:0:0:0:0 | Normal Exit | +| equalitytests.go:0:0:0:0 | Entry | equalitytests.go:0:0:0:0 | equalitytests.go | +| equalitytests.go:0:0:0:0 | Normal Exit | equalitytests.go:0:0:0:0 | Exit | +| equalitytests.go:0:0:0:0 | equalitytests.go | equalitytests.go:3:1:5:1 | type declaration | +| equalitytests.go:3:1:5:1 | After type declaration | equalitytests.go:7:1:9:1 | type declaration | +| equalitytests.go:3:1:5:1 | type declaration | equalitytests.go:3:6:5:1 | type declaration specifier | +| equalitytests.go:3:6:5:1 | type declaration specifier | equalitytests.go:3:1:5:1 | After type declaration | +| equalitytests.go:7:1:9:1 | After type declaration | equalitytests.go:11:1:13:1 | Before function declaration | +| equalitytests.go:7:1:9:1 | type declaration | equalitytests.go:7:6:9:1 | type declaration specifier | +| equalitytests.go:7:6:9:1 | type declaration specifier | equalitytests.go:7:1:9:1 | After type declaration | +| equalitytests.go:11:1:13:1 | After function declaration | equalitytests.go:0:0:0:0 | After equalitytests.go | +| equalitytests.go:11:1:13:1 | Before function declaration | equalitytests.go:11:1:13:1 | function declaration | +| equalitytests.go:11:1:13:1 | Entry | equalitytests.go:11:211:13:1 | block statement | +| equalitytests.go:11:1:13:1 | Normal Exit | equalitytests.go:11:1:13:1 | Exit | +| equalitytests.go:11:1:13:1 | function declaration | equalitytests.go:11:1:13:1 | After function declaration | +| equalitytests.go:11:211:13:1 | arg:0 block statement | equalitytests.go:11:211:13:1 | param-init:0 block statement | +| equalitytests.go:11:211:13:1 | arg:1 block statement | equalitytests.go:11:211:13:1 | param-init:1 block statement | +| equalitytests.go:11:211:13:1 | arg:2 block statement | equalitytests.go:11:211:13:1 | param-init:2 block statement | +| equalitytests.go:11:211:13:1 | arg:3 block statement | equalitytests.go:11:211:13:1 | param-init:3 block statement | +| equalitytests.go:11:211:13:1 | arg:4 block statement | equalitytests.go:11:211:13:1 | param-init:4 block statement | +| equalitytests.go:11:211:13:1 | arg:5 block statement | equalitytests.go:11:211:13:1 | param-init:5 block statement | +| equalitytests.go:11:211:13:1 | arg:6 block statement | equalitytests.go:11:211:13:1 | param-init:6 block statement | +| equalitytests.go:11:211:13:1 | arg:7 block statement | equalitytests.go:11:211:13:1 | param-init:7 block statement | +| equalitytests.go:11:211:13:1 | arg:8 block statement | equalitytests.go:11:211:13:1 | param-init:8 block statement | +| equalitytests.go:11:211:13:1 | arg:9 block statement | equalitytests.go:11:211:13:1 | param-init:9 block statement | +| equalitytests.go:11:211:13:1 | arg:10 block statement | equalitytests.go:11:211:13:1 | param-init:10 block statement | +| equalitytests.go:11:211:13:1 | arg:11 block statement | equalitytests.go:11:211:13:1 | param-init:11 block statement | +| equalitytests.go:11:211:13:1 | block statement | equalitytests.go:11:211:13:1 | arg:0 block statement | +| equalitytests.go:11:211:13:1 | param-init:0 block statement | equalitytests.go:11:211:13:1 | arg:1 block statement | +| equalitytests.go:11:211:13:1 | param-init:1 block statement | equalitytests.go:11:211:13:1 | arg:2 block statement | +| equalitytests.go:11:211:13:1 | param-init:2 block statement | equalitytests.go:11:211:13:1 | arg:3 block statement | +| equalitytests.go:11:211:13:1 | param-init:3 block statement | equalitytests.go:11:211:13:1 | arg:4 block statement | +| equalitytests.go:11:211:13:1 | param-init:4 block statement | equalitytests.go:11:211:13:1 | arg:5 block statement | +| equalitytests.go:11:211:13:1 | param-init:5 block statement | equalitytests.go:11:211:13:1 | arg:6 block statement | +| equalitytests.go:11:211:13:1 | param-init:6 block statement | equalitytests.go:11:211:13:1 | arg:7 block statement | +| equalitytests.go:11:211:13:1 | param-init:7 block statement | equalitytests.go:11:211:13:1 | arg:8 block statement | +| equalitytests.go:11:211:13:1 | param-init:8 block statement | equalitytests.go:11:211:13:1 | arg:9 block statement | +| equalitytests.go:11:211:13:1 | param-init:9 block statement | equalitytests.go:11:211:13:1 | arg:10 block statement | +| equalitytests.go:11:211:13:1 | param-init:10 block statement | equalitytests.go:11:211:13:1 | arg:11 block statement | +| equalitytests.go:11:211:13:1 | param-init:11 block statement | equalitytests.go:12:2:12:76 | Before return statement | +| equalitytests.go:12:2:12:76 | Before return statement | equalitytests.go:12:9:12:76 | ...&&... | +| equalitytests.go:12:2:12:76 | return statement | equalitytests.go:11:1:13:1 | Normal Exit | +| equalitytests.go:12:9:12:10 | After i1 | equalitytests.go:12:15:12:16 | Before i2 | +| equalitytests.go:12:9:12:10 | Before i1 | equalitytests.go:12:9:12:10 | i1 | +| equalitytests.go:12:9:12:10 | i1 | equalitytests.go:12:9:12:10 | After i1 | +| equalitytests.go:12:9:12:16 | ...==... | equalitytests.go:12:9:12:16 | After ...==... [false] | +| equalitytests.go:12:9:12:16 | ...==... | equalitytests.go:12:9:12:16 | After ...==... [true] | +| equalitytests.go:12:9:12:16 | After ...==... [false] | equalitytests.go:12:9:12:28 | After ...&&... [false] | +| equalitytests.go:12:9:12:16 | After ...==... [true] | equalitytests.go:12:21:12:28 | Before ...==... | +| equalitytests.go:12:9:12:16 | Before ...==... | equalitytests.go:12:9:12:10 | Before i1 | +| equalitytests.go:12:9:12:28 | ...&&... | equalitytests.go:12:9:12:16 | Before ...==... | +| equalitytests.go:12:9:12:28 | After ...&&... [false] | equalitytests.go:12:9:12:40 | After ...&&... [false] | +| equalitytests.go:12:9:12:28 | After ...&&... [true] | equalitytests.go:12:33:12:40 | Before ...==... | +| equalitytests.go:12:9:12:40 | ...&&... | equalitytests.go:12:9:12:28 | ...&&... | +| equalitytests.go:12:9:12:40 | After ...&&... [false] | equalitytests.go:12:9:12:52 | After ...&&... [false] | +| equalitytests.go:12:9:12:40 | After ...&&... [true] | equalitytests.go:12:45:12:52 | Before ...==... | +| equalitytests.go:12:9:12:52 | ...&&... | equalitytests.go:12:9:12:40 | ...&&... | +| equalitytests.go:12:9:12:52 | After ...&&... [false] | equalitytests.go:12:9:12:64 | After ...&&... [false] | +| equalitytests.go:12:9:12:52 | After ...&&... [true] | equalitytests.go:12:57:12:64 | Before ...==... | +| equalitytests.go:12:9:12:64 | ...&&... | equalitytests.go:12:9:12:52 | ...&&... | +| equalitytests.go:12:9:12:64 | After ...&&... [false] | equalitytests.go:12:9:12:76 | After ...&&... | +| equalitytests.go:12:9:12:64 | After ...&&... [true] | equalitytests.go:12:69:12:76 | Before ...==... | +| equalitytests.go:12:9:12:76 | ...&&... | equalitytests.go:12:9:12:64 | ...&&... | +| equalitytests.go:12:9:12:76 | After ...&&... | equalitytests.go:12:2:12:76 | return statement | +| equalitytests.go:12:15:12:16 | After i2 | equalitytests.go:12:9:12:16 | ...==... | +| equalitytests.go:12:15:12:16 | Before i2 | equalitytests.go:12:15:12:16 | i2 | +| equalitytests.go:12:15:12:16 | i2 | equalitytests.go:12:15:12:16 | After i2 | +| equalitytests.go:12:21:12:22 | After e1 | equalitytests.go:12:27:12:28 | Before e2 | +| equalitytests.go:12:21:12:22 | Before e1 | equalitytests.go:12:21:12:22 | e1 | +| equalitytests.go:12:21:12:22 | e1 | equalitytests.go:12:21:12:22 | After e1 | +| equalitytests.go:12:21:12:28 | ...==... | equalitytests.go:12:21:12:28 | After ...==... [false] | +| equalitytests.go:12:21:12:28 | ...==... | equalitytests.go:12:21:12:28 | After ...==... [true] | +| equalitytests.go:12:21:12:28 | After ...==... [false] | equalitytests.go:12:9:12:28 | After ...&&... [false] | +| equalitytests.go:12:21:12:28 | After ...==... [true] | equalitytests.go:12:9:12:28 | After ...&&... [true] | +| equalitytests.go:12:21:12:28 | Before ...==... | equalitytests.go:12:21:12:22 | Before e1 | +| equalitytests.go:12:27:12:28 | After e2 | equalitytests.go:12:21:12:28 | ...==... | +| equalitytests.go:12:27:12:28 | Before e2 | equalitytests.go:12:27:12:28 | e2 | +| equalitytests.go:12:27:12:28 | e2 | equalitytests.go:12:27:12:28 | After e2 | +| equalitytests.go:12:33:12:34 | After s1 | equalitytests.go:12:39:12:40 | Before s2 | +| equalitytests.go:12:33:12:34 | Before s1 | equalitytests.go:12:33:12:34 | s1 | +| equalitytests.go:12:33:12:34 | s1 | equalitytests.go:12:33:12:34 | After s1 | +| equalitytests.go:12:33:12:40 | ...==... | equalitytests.go:12:33:12:40 | After ...==... [false] | +| equalitytests.go:12:33:12:40 | ...==... | equalitytests.go:12:33:12:40 | After ...==... [true] | +| equalitytests.go:12:33:12:40 | After ...==... [false] | equalitytests.go:12:9:12:40 | After ...&&... [false] | +| equalitytests.go:12:33:12:40 | After ...==... [true] | equalitytests.go:12:9:12:40 | After ...&&... [true] | +| equalitytests.go:12:33:12:40 | Before ...==... | equalitytests.go:12:33:12:34 | Before s1 | +| equalitytests.go:12:39:12:40 | After s2 | equalitytests.go:12:33:12:40 | ...==... | +| equalitytests.go:12:39:12:40 | Before s2 | equalitytests.go:12:39:12:40 | s2 | +| equalitytests.go:12:39:12:40 | s2 | equalitytests.go:12:39:12:40 | After s2 | +| equalitytests.go:12:45:12:46 | After s3 | equalitytests.go:12:51:12:52 | Before s4 | +| equalitytests.go:12:45:12:46 | Before s3 | equalitytests.go:12:45:12:46 | s3 | +| equalitytests.go:12:45:12:46 | s3 | equalitytests.go:12:45:12:46 | After s3 | +| equalitytests.go:12:45:12:52 | ...==... | equalitytests.go:12:45:12:52 | After ...==... [false] | +| equalitytests.go:12:45:12:52 | ...==... | equalitytests.go:12:45:12:52 | After ...==... [true] | +| equalitytests.go:12:45:12:52 | After ...==... [false] | equalitytests.go:12:9:12:52 | After ...&&... [false] | +| equalitytests.go:12:45:12:52 | After ...==... [true] | equalitytests.go:12:9:12:52 | After ...&&... [true] | +| equalitytests.go:12:45:12:52 | Before ...==... | equalitytests.go:12:45:12:46 | Before s3 | +| equalitytests.go:12:51:12:52 | After s4 | equalitytests.go:12:45:12:52 | ...==... | +| equalitytests.go:12:51:12:52 | Before s4 | equalitytests.go:12:51:12:52 | s4 | +| equalitytests.go:12:51:12:52 | s4 | equalitytests.go:12:51:12:52 | After s4 | +| equalitytests.go:12:57:12:58 | After a1 | equalitytests.go:12:63:12:64 | Before a2 | +| equalitytests.go:12:57:12:58 | Before a1 | equalitytests.go:12:57:12:58 | a1 | +| equalitytests.go:12:57:12:58 | a1 | equalitytests.go:12:57:12:58 | After a1 | +| equalitytests.go:12:57:12:64 | ...==... | equalitytests.go:12:57:12:64 | After ...==... [false] | +| equalitytests.go:12:57:12:64 | ...==... | equalitytests.go:12:57:12:64 | After ...==... [true] | +| equalitytests.go:12:57:12:64 | After ...==... [false] | equalitytests.go:12:9:12:64 | After ...&&... [false] | +| equalitytests.go:12:57:12:64 | After ...==... [true] | equalitytests.go:12:9:12:64 | After ...&&... [true] | +| equalitytests.go:12:57:12:64 | Before ...==... | equalitytests.go:12:57:12:58 | Before a1 | +| equalitytests.go:12:63:12:64 | After a2 | equalitytests.go:12:57:12:64 | ...==... | +| equalitytests.go:12:63:12:64 | Before a2 | equalitytests.go:12:63:12:64 | a2 | +| equalitytests.go:12:63:12:64 | a2 | equalitytests.go:12:63:12:64 | After a2 | +| equalitytests.go:12:69:12:70 | After a3 | equalitytests.go:12:75:12:76 | Before a4 | +| equalitytests.go:12:69:12:70 | Before a3 | equalitytests.go:12:69:12:70 | a3 | +| equalitytests.go:12:69:12:70 | a3 | equalitytests.go:12:69:12:70 | After a3 | +| equalitytests.go:12:69:12:76 | ...==... | equalitytests.go:12:69:12:76 | After ...==... | +| equalitytests.go:12:69:12:76 | After ...==... | equalitytests.go:12:9:12:76 | After ...&&... | +| equalitytests.go:12:69:12:76 | Before ...==... | equalitytests.go:12:69:12:70 | Before a3 | +| equalitytests.go:12:75:12:76 | After a4 | equalitytests.go:12:69:12:76 | ...==... | +| equalitytests.go:12:75:12:76 | Before a4 | equalitytests.go:12:75:12:76 | a4 | +| equalitytests.go:12:75:12:76 | a4 | equalitytests.go:12:75:12:76 | After a4 | +| exprs.go:0:0:0:0 | After exprs.go | exprs.go:0:0:0:0 | Normal Exit | +| exprs.go:0:0:0:0 | Entry | exprs.go:0:0:0:0 | exprs.go | +| exprs.go:0:0:0:0 | Exceptional Exit | exprs.go:0:0:0:0 | Exit | +| exprs.go:0:0:0:0 | Normal Exit | exprs.go:0:0:0:0 | Exit | +| exprs.go:0:0:0:0 | exprs.go | exprs.go:3:1:3:29 | type declaration | +| exprs.go:3:1:3:29 | After type declaration | exprs.go:5:1:26:1 | Before function declaration | +| exprs.go:3:1:3:29 | type declaration | exprs.go:3:6:3:29 | type declaration specifier | +| exprs.go:3:6:3:29 | type declaration specifier | exprs.go:3:1:3:29 | After type declaration | +| exprs.go:5:1:26:1 | After function declaration | exprs.go:28:1:30:1 | Before function declaration | +| exprs.go:5:1:26:1 | Before function declaration | exprs.go:5:1:26:1 | function declaration | +| exprs.go:5:1:26:1 | Entry | exprs.go:5:19:26:1 | block statement | +| exprs.go:5:1:26:1 | Exceptional Exit | exprs.go:5:1:26:1 | Exit | +| exprs.go:5:1:26:1 | Normal Exit | exprs.go:5:1:26:1 | Exit | +| exprs.go:5:1:26:1 | function declaration | exprs.go:5:1:26:1 | After function declaration | +| exprs.go:5:19:26:1 | block statement | exprs.go:6:2:6:26 | declaration statement | +| exprs.go:6:2:6:26 | After declaration statement | exprs.go:7:2:7:16 | declaration statement | +| exprs.go:6:2:6:26 | After variable declaration | exprs.go:6:2:6:26 | After declaration statement | +| exprs.go:6:2:6:26 | declaration statement | exprs.go:6:2:6:26 | variable declaration | +| exprs.go:6:2:6:26 | variable declaration | exprs.go:6:6:6:26 | value declaration specifier | +| exprs.go:6:6:6:26 | After value declaration specifier | exprs.go:6:2:6:26 | After variable declaration | +| exprs.go:6:6:6:26 | assign:0 value declaration specifier | exprs.go:6:6:6:26 | assign:1 value declaration specifier | +| exprs.go:6:6:6:26 | assign:1 value declaration specifier | exprs.go:6:6:6:26 | After value declaration specifier | +| exprs.go:6:6:6:26 | value declaration specifier | exprs.go:6:13:6:13 | Before 0 | +| exprs.go:6:13:6:13 | 0 | exprs.go:6:13:6:13 | After 0 | +| exprs.go:6:13:6:13 | After 0 | exprs.go:6:16:6:26 | Before ...+... | +| exprs.go:6:13:6:13 | Before 0 | exprs.go:6:13:6:13 | 0 | +| exprs.go:6:16:6:16 | 1 | exprs.go:6:16:6:16 | After 1 | +| exprs.go:6:16:6:16 | After 1 | exprs.go:6:21:6:25 | Before ...+... | +| exprs.go:6:16:6:16 | Before 1 | exprs.go:6:16:6:16 | 1 | +| exprs.go:6:16:6:26 | ...+... | exprs.go:6:16:6:26 | After ...+... | +| exprs.go:6:16:6:26 | After ...+... | exprs.go:6:6:6:26 | assign:0 value declaration specifier | +| exprs.go:6:16:6:26 | Before ...+... | exprs.go:6:16:6:16 | Before 1 | +| exprs.go:6:21:6:21 | 2 | exprs.go:6:21:6:21 | After 2 | +| exprs.go:6:21:6:21 | After 2 | exprs.go:6:25:6:25 | Before 3 | +| exprs.go:6:21:6:21 | Before 2 | exprs.go:6:21:6:21 | 2 | +| exprs.go:6:21:6:25 | ...+... | exprs.go:6:21:6:25 | After ...+... | +| exprs.go:6:21:6:25 | After ...+... | exprs.go:6:16:6:26 | ...+... | +| exprs.go:6:21:6:25 | Before ...+... | exprs.go:6:21:6:21 | Before 2 | +| exprs.go:6:25:6:25 | 3 | exprs.go:6:25:6:25 | After 3 | +| exprs.go:6:25:6:25 | After 3 | exprs.go:6:21:6:25 | ...+... | +| exprs.go:6:25:6:25 | Before 3 | exprs.go:6:25:6:25 | 3 | +| exprs.go:7:2:7:16 | After declaration statement | exprs.go:8:2:8:24 | ... := ... | +| exprs.go:7:2:7:16 | After variable declaration | exprs.go:7:2:7:16 | After declaration statement | +| exprs.go:7:2:7:16 | declaration statement | exprs.go:7:2:7:16 | variable declaration | +| exprs.go:7:2:7:16 | variable declaration | exprs.go:7:6:7:16 | value declaration specifier | +| exprs.go:7:6:7:16 | After value declaration specifier | exprs.go:7:2:7:16 | After variable declaration | +| exprs.go:7:6:7:16 | assign:0 value declaration specifier | exprs.go:7:6:7:16 | After value declaration specifier | +| exprs.go:7:6:7:16 | value declaration specifier | exprs.go:7:10:7:16 | Before ...+... | +| exprs.go:7:10:7:10 | After i | exprs.go:7:14:7:16 | Before ...*... | +| exprs.go:7:10:7:10 | Before i | exprs.go:7:10:7:10 | i | +| exprs.go:7:10:7:10 | i | exprs.go:7:10:7:10 | After i | +| exprs.go:7:10:7:16 | ...+... | exprs.go:7:10:7:16 | After ...+... | +| exprs.go:7:10:7:16 | After ...+... | exprs.go:7:6:7:16 | assign:0 value declaration specifier | +| exprs.go:7:10:7:16 | Before ...+... | exprs.go:7:10:7:10 | Before i | +| exprs.go:7:14:7:14 | 2 | exprs.go:7:14:7:14 | After 2 | +| exprs.go:7:14:7:14 | After 2 | exprs.go:7:16:7:16 | Before j | +| exprs.go:7:14:7:14 | Before 2 | exprs.go:7:14:7:14 | 2 | +| exprs.go:7:14:7:16 | ...*... | exprs.go:7:14:7:16 | After ...*... | +| exprs.go:7:14:7:16 | After ...*... | exprs.go:7:10:7:16 | ...+... | +| exprs.go:7:14:7:16 | Before ...*... | exprs.go:7:14:7:14 | Before 2 | +| exprs.go:7:16:7:16 | After j | exprs.go:7:14:7:16 | ...*... | +| exprs.go:7:16:7:16 | Before j | exprs.go:7:16:7:16 | j | +| exprs.go:7:16:7:16 | j | exprs.go:7:16:7:16 | After j | +| exprs.go:8:2:8:24 | ... := ... | exprs.go:8:7:8:24 | Before ...+... | +| exprs.go:8:2:8:24 | After ... := ... | exprs.go:9:2:9:61 | ... := ... | +| exprs.go:8:2:8:24 | assign:0 ... := ... | exprs.go:8:2:8:24 | After ... := ... | +| exprs.go:8:7:8:12 | "k = " | exprs.go:8:7:8:12 | After "k = " | +| exprs.go:8:7:8:12 | After "k = " | exprs.go:8:16:8:24 | Before type conversion | +| exprs.go:8:7:8:12 | Before "k = " | exprs.go:8:7:8:12 | "k = " | +| exprs.go:8:7:8:24 | ...+... | exprs.go:8:7:8:24 | After ...+... | +| exprs.go:8:7:8:24 | After ...+... | exprs.go:8:2:8:24 | assign:0 ... := ... | +| exprs.go:8:7:8:24 | Before ...+... | exprs.go:8:7:8:12 | Before "k = " | +| exprs.go:8:16:8:24 | After type conversion | exprs.go:8:7:8:24 | ...+... | +| exprs.go:8:16:8:24 | Before type conversion | exprs.go:8:23:8:23 | Before k | +| exprs.go:8:16:8:24 | type conversion | exprs.go:8:16:8:24 | After type conversion | +| exprs.go:8:23:8:23 | After k | exprs.go:8:16:8:24 | type conversion | +| exprs.go:8:23:8:23 | Before k | exprs.go:8:23:8:23 | k | +| exprs.go:8:23:8:23 | k | exprs.go:8:23:8:23 | After k | +| exprs.go:9:2:9:61 | ... := ... | exprs.go:9:8:9:61 | Before function literal | +| exprs.go:9:2:9:61 | After ... := ... | exprs.go:10:2:10:32 | ... := ... | +| exprs.go:9:2:9:61 | assign:0 ... := ... | exprs.go:9:2:9:61 | After ... := ... | +| exprs.go:9:8:9:61 | After function literal | exprs.go:9:2:9:61 | assign:0 ... := ... | +| exprs.go:9:8:9:61 | Before function literal | exprs.go:9:8:9:61 | function literal | +| exprs.go:9:8:9:61 | Entry | exprs.go:9:39:9:61 | block statement | +| exprs.go:9:8:9:61 | Normal Exit | exprs.go:9:8:9:61 | Exit | +| exprs.go:9:8:9:61 | function literal | exprs.go:9:8:9:61 | After function literal | +| exprs.go:9:39:9:61 | arg:0 block statement | exprs.go:9:39:9:61 | param-init:0 block statement | +| exprs.go:9:39:9:61 | arg:1 block statement | exprs.go:9:39:9:61 | param-init:1 block statement | +| exprs.go:9:39:9:61 | arg:2 block statement | exprs.go:9:39:9:61 | param-init:2 block statement | +| exprs.go:9:39:9:61 | block statement | exprs.go:9:39:9:61 | arg:0 block statement | +| exprs.go:9:39:9:61 | param-init:0 block statement | exprs.go:9:39:9:61 | arg:1 block statement | +| exprs.go:9:39:9:61 | param-init:1 block statement | exprs.go:9:39:9:61 | arg:2 block statement | +| exprs.go:9:39:9:61 | param-init:2 block statement | exprs.go:9:41:9:59 | Before return statement | +| exprs.go:9:41:9:59 | Before return statement | exprs.go:9:48:9:59 | Before ...<... | +| exprs.go:9:41:9:59 | return statement | exprs.go:9:8:9:61 | Normal Exit | +| exprs.go:9:48:9:48 | After a | exprs.go:9:50:9:50 | Before b | +| exprs.go:9:48:9:48 | Before a | exprs.go:9:48:9:48 | a | +| exprs.go:9:48:9:48 | a | exprs.go:9:48:9:48 | After a | +| exprs.go:9:48:9:50 | ...*... | exprs.go:9:48:9:50 | After ...*... | +| exprs.go:9:48:9:50 | After ...*... | exprs.go:9:54:9:59 | Before type conversion | +| exprs.go:9:48:9:50 | Before ...*... | exprs.go:9:48:9:48 | Before a | +| exprs.go:9:48:9:59 | ...<... | exprs.go:9:48:9:59 | After ...<... | +| exprs.go:9:48:9:59 | After ...<... | exprs.go:9:41:9:59 | return statement | +| exprs.go:9:48:9:59 | Before ...<... | exprs.go:9:48:9:50 | Before ...*... | +| exprs.go:9:50:9:50 | After b | exprs.go:9:48:9:50 | ...*... | +| exprs.go:9:50:9:50 | Before b | exprs.go:9:50:9:50 | b | +| exprs.go:9:50:9:50 | b | exprs.go:9:50:9:50 | After b | +| exprs.go:9:54:9:59 | After type conversion | exprs.go:9:48:9:59 | ...<... | +| exprs.go:9:54:9:59 | Before type conversion | exprs.go:9:58:9:58 | Before z | +| exprs.go:9:54:9:59 | type conversion | exprs.go:9:54:9:59 | After type conversion | +| exprs.go:9:58:9:58 | After z | exprs.go:9:54:9:59 | type conversion | +| exprs.go:9:58:9:58 | Before z | exprs.go:9:58:9:58 | z | +| exprs.go:9:58:9:58 | z | exprs.go:9:58:9:58 | After z | +| exprs.go:10:2:10:32 | ... := ... | exprs.go:10:13:10:32 | Before struct literal | +| exprs.go:10:2:10:32 | After ... := ... | exprs.go:11:2:14:21 | ... := ... | +| exprs.go:10:2:10:32 | assign:0 ... := ... | exprs.go:10:2:10:32 | After ... := ... | +| exprs.go:10:13:10:32 | After struct literal | exprs.go:10:2:10:32 | assign:0 ... := ... | +| exprs.go:10:13:10:32 | Before struct literal | exprs.go:10:13:10:32 | struct literal | +| exprs.go:10:13:10:32 | struct literal | exprs.go:10:13:10:32 | After struct literal | +| exprs.go:11:2:14:21 | ... := ... | exprs.go:11:13:14:21 | Before struct literal | +| exprs.go:11:2:14:21 | After ... := ... | exprs.go:15:2:15:58 | ... := ... | +| exprs.go:11:2:14:21 | assign:0 ... := ... | exprs.go:11:2:14:21 | After ... := ... | +| exprs.go:11:13:14:21 | After struct literal | exprs.go:11:2:14:21 | assign:0 ... := ... | +| exprs.go:11:13:14:21 | Before struct literal | exprs.go:11:13:14:21 | struct literal | +| exprs.go:11:13:14:21 | struct literal | exprs.go:14:4:14:4 | Before k | +| exprs.go:14:4:14:4 | After k | exprs.go:14:4:14:4 | lit-init k | +| exprs.go:14:4:14:4 | Before k | exprs.go:14:4:14:4 | k | +| exprs.go:14:4:14:4 | k | exprs.go:14:4:14:4 | After k | +| exprs.go:14:4:14:4 | lit-init k | exprs.go:14:7:14:20 | Before call to fn | +| exprs.go:14:7:14:8 | After fn | exprs.go:14:10:14:10 | Before i | +| exprs.go:14:7:14:8 | Before fn | exprs.go:14:7:14:8 | fn | +| exprs.go:14:7:14:8 | fn | exprs.go:14:7:14:8 | After fn | +| exprs.go:14:7:14:20 | After call to fn | exprs.go:14:7:14:20 | lit-init call to fn | +| exprs.go:14:7:14:20 | Before call to fn | exprs.go:14:7:14:8 | Before fn | +| exprs.go:14:7:14:20 | call to fn | exprs.go:5:1:26:1 | Exceptional Exit | +| exprs.go:14:7:14:20 | call to fn | exprs.go:14:7:14:20 | After call to fn | +| exprs.go:14:7:14:20 | lit-init call to fn | exprs.go:11:13:14:21 | After struct literal | +| exprs.go:14:10:14:10 | After i | exprs.go:14:13:14:13 | Before j | +| exprs.go:14:10:14:10 | Before i | exprs.go:14:10:14:10 | i | +| exprs.go:14:10:14:10 | i | exprs.go:14:10:14:10 | After i | +| exprs.go:14:13:14:13 | After j | exprs.go:14:16:14:19 | Before .../... | +| exprs.go:14:13:14:13 | Before j | exprs.go:14:13:14:13 | j | +| exprs.go:14:13:14:13 | j | exprs.go:14:13:14:13 | After j | +| exprs.go:14:16:14:16 | 3 | exprs.go:14:16:14:16 | After 3 | +| exprs.go:14:16:14:16 | After 3 | exprs.go:14:18:14:19 | Before 14 | +| exprs.go:14:16:14:16 | Before 3 | exprs.go:14:16:14:16 | 3 | +| exprs.go:14:16:14:19 | .../... | exprs.go:14:16:14:19 | After .../... | +| exprs.go:14:16:14:19 | After .../... | exprs.go:14:7:14:20 | call to fn | +| exprs.go:14:16:14:19 | Before .../... | exprs.go:14:16:14:16 | Before 3 | +| exprs.go:14:18:14:19 | 14 | exprs.go:14:18:14:19 | After 14 | +| exprs.go:14:18:14:19 | After 14 | exprs.go:14:16:14:19 | .../... | +| exprs.go:14:18:14:19 | Before 14 | exprs.go:14:18:14:19 | 14 | +| exprs.go:15:2:15:58 | ... := ... | exprs.go:15:13:15:58 | Before struct literal | +| exprs.go:15:2:15:58 | After ... := ... | exprs.go:16:2:16:26 | ... := ... | +| exprs.go:15:2:15:58 | assign:0 ... := ... | exprs.go:15:2:15:58 | After ... := ... | +| exprs.go:15:13:15:58 | After struct literal | exprs.go:15:2:15:58 | assign:0 ... := ... | +| exprs.go:15:13:15:58 | Before struct literal | exprs.go:15:13:15:58 | struct literal | +| exprs.go:15:13:15:58 | struct literal | exprs.go:15:32:15:43 | Before key-value pair | +| exprs.go:15:32:15:43 | After key-value pair | exprs.go:15:32:15:43 | lit-init key-value pair | +| exprs.go:15:32:15:43 | Before key-value pair | exprs.go:15:35:15:43 | Before selection of x | +| exprs.go:15:32:15:43 | key-value pair | exprs.go:15:32:15:43 | After key-value pair | +| exprs.go:15:32:15:43 | lit-init key-value pair | exprs.go:15:46:15:57 | Before key-value pair | +| exprs.go:15:35:15:41 | After struct1 | exprs.go:15:35:15:43 | selection of x | +| exprs.go:15:35:15:41 | Before struct1 | exprs.go:15:35:15:41 | struct1 | +| exprs.go:15:35:15:41 | struct1 | exprs.go:15:35:15:41 | After struct1 | +| exprs.go:15:35:15:43 | After selection of x | exprs.go:15:32:15:43 | key-value pair | +| exprs.go:15:35:15:43 | Before selection of x | exprs.go:15:35:15:41 | Before struct1 | +| exprs.go:15:35:15:43 | selection of x | exprs.go:15:35:15:43 | After selection of x | +| exprs.go:15:46:15:57 | After key-value pair | exprs.go:15:46:15:57 | lit-init key-value pair | +| exprs.go:15:46:15:57 | Before key-value pair | exprs.go:15:49:15:57 | Before selection of x | +| exprs.go:15:46:15:57 | key-value pair | exprs.go:15:46:15:57 | After key-value pair | +| exprs.go:15:46:15:57 | lit-init key-value pair | exprs.go:15:13:15:58 | After struct literal | +| exprs.go:15:49:15:55 | After struct2 | exprs.go:15:49:15:57 | selection of x | +| exprs.go:15:49:15:55 | Before struct2 | exprs.go:15:49:15:55 | struct2 | +| exprs.go:15:49:15:55 | struct2 | exprs.go:15:49:15:55 | After struct2 | +| exprs.go:15:49:15:57 | After selection of x | exprs.go:15:46:15:57 | key-value pair | +| exprs.go:15:49:15:57 | Before selection of x | exprs.go:15:49:15:55 | Before struct2 | +| exprs.go:15:49:15:57 | selection of x | exprs.go:15:49:15:57 | After selection of x | +| exprs.go:16:2:16:26 | ... := ... | exprs.go:16:10:16:26 | Before array literal | +| exprs.go:16:2:16:26 | After ... := ... | exprs.go:17:2:17:40 | ... := ... | +| exprs.go:16:2:16:26 | assign:0 ... := ... | exprs.go:16:2:16:26 | After ... := ... | +| exprs.go:16:10:16:26 | After array literal | exprs.go:16:2:16:26 | assign:0 ... := ... | +| exprs.go:16:10:16:26 | Before array literal | exprs.go:16:10:16:26 | array literal | +| exprs.go:16:10:16:26 | array literal | exprs.go:16:17:16:25 | Before selection of x | +| exprs.go:16:17:16:23 | After struct3 | exprs.go:16:17:16:25 | selection of x | +| exprs.go:16:17:16:23 | Before struct3 | exprs.go:16:17:16:23 | struct3 | +| exprs.go:16:17:16:23 | struct3 | exprs.go:16:17:16:23 | After struct3 | +| exprs.go:16:17:16:25 | After selection of x | exprs.go:16:17:16:25 | lit-index selection of x | +| exprs.go:16:17:16:25 | Before selection of x | exprs.go:16:17:16:23 | Before struct3 | +| exprs.go:16:17:16:25 | lit-index selection of x | exprs.go:16:17:16:25 | lit-init selection of x | +| exprs.go:16:17:16:25 | lit-init selection of x | exprs.go:16:10:16:26 | After array literal | +| exprs.go:16:17:16:25 | selection of x | exprs.go:16:17:16:25 | After selection of x | +| exprs.go:17:2:17:40 | ... := ... | exprs.go:17:10:17:40 | Before array literal | +| exprs.go:17:2:17:40 | After ... := ... | exprs.go:18:2:18:22 | ... := ... | +| exprs.go:17:2:17:40 | assign:0 ... := ... | exprs.go:17:2:17:40 | After ... := ... | +| exprs.go:17:10:17:40 | After array literal | exprs.go:17:2:17:40 | assign:0 ... := ... | +| exprs.go:17:10:17:40 | Before array literal | exprs.go:17:10:17:40 | array literal | +| exprs.go:17:10:17:40 | array literal | exprs.go:17:19:17:27 | Before selection of x | +| exprs.go:17:19:17:25 | After struct3 | exprs.go:17:19:17:27 | selection of x | +| exprs.go:17:19:17:25 | Before struct3 | exprs.go:17:19:17:25 | struct3 | +| exprs.go:17:19:17:25 | struct3 | exprs.go:17:19:17:25 | After struct3 | +| exprs.go:17:19:17:27 | After selection of x | exprs.go:17:19:17:27 | lit-index selection of x | +| exprs.go:17:19:17:27 | Before selection of x | exprs.go:17:19:17:25 | Before struct3 | +| exprs.go:17:19:17:27 | lit-index selection of x | exprs.go:17:19:17:27 | lit-init selection of x | +| exprs.go:17:19:17:27 | lit-init selection of x | exprs.go:17:30:17:39 | Before key-value pair | +| exprs.go:17:19:17:27 | selection of x | exprs.go:17:19:17:27 | After selection of x | +| exprs.go:17:30:17:30 | 2 | exprs.go:17:30:17:30 | After 2 | +| exprs.go:17:30:17:30 | After 2 | exprs.go:17:33:17:39 | Before index expression | +| exprs.go:17:30:17:30 | Before 2 | exprs.go:17:30:17:30 | 2 | +| exprs.go:17:30:17:39 | After key-value pair | exprs.go:17:30:17:39 | lit-init key-value pair | +| exprs.go:17:30:17:39 | Before key-value pair | exprs.go:17:30:17:30 | Before 2 | +| exprs.go:17:30:17:39 | key-value pair | exprs.go:17:30:17:39 | After key-value pair | +| exprs.go:17:30:17:39 | lit-init key-value pair | exprs.go:17:10:17:40 | After array literal | +| exprs.go:17:33:17:36 | After arr1 | exprs.go:17:38:17:38 | Before 0 | +| exprs.go:17:33:17:36 | Before arr1 | exprs.go:17:33:17:36 | arr1 | +| exprs.go:17:33:17:36 | arr1 | exprs.go:17:33:17:36 | After arr1 | +| exprs.go:17:33:17:39 | After index expression | exprs.go:17:30:17:39 | key-value pair | +| exprs.go:17:33:17:39 | Before index expression | exprs.go:17:33:17:36 | Before arr1 | +| exprs.go:17:33:17:39 | index expression | exprs.go:5:1:26:1 | Exceptional Exit | +| exprs.go:17:33:17:39 | index expression | exprs.go:17:33:17:39 | After index expression | +| exprs.go:17:38:17:38 | 0 | exprs.go:17:38:17:38 | After 0 | +| exprs.go:17:38:17:38 | After 0 | exprs.go:17:33:17:39 | index expression | +| exprs.go:17:38:17:38 | Before 0 | exprs.go:17:38:17:38 | 0 | +| exprs.go:18:2:18:22 | ... := ... | exprs.go:18:9:18:22 | Before slice literal | +| exprs.go:18:2:18:22 | After ... := ... | exprs.go:19:2:19:38 | ... := ... | +| exprs.go:18:2:18:22 | assign:0 ... := ... | exprs.go:18:2:18:22 | After ... := ... | +| exprs.go:18:9:18:22 | After slice literal | exprs.go:18:2:18:22 | assign:0 ... := ... | +| exprs.go:18:9:18:22 | Before slice literal | exprs.go:18:9:18:22 | slice literal | +| exprs.go:18:9:18:22 | slice literal | exprs.go:18:18:18:18 | Before s | +| exprs.go:18:18:18:18 | After s | exprs.go:18:18:18:18 | lit-index s | +| exprs.go:18:18:18:18 | Before s | exprs.go:18:18:18:18 | s | +| exprs.go:18:18:18:18 | lit-index s | exprs.go:18:18:18:18 | lit-init s | +| exprs.go:18:18:18:18 | lit-init s | exprs.go:18:21:18:21 | Before s | +| exprs.go:18:18:18:18 | s | exprs.go:18:18:18:18 | After s | +| exprs.go:18:21:18:21 | After s | exprs.go:18:21:18:21 | lit-index s | +| exprs.go:18:21:18:21 | Before s | exprs.go:18:21:18:21 | s | +| exprs.go:18:21:18:21 | lit-index s | exprs.go:18:21:18:21 | lit-init s | +| exprs.go:18:21:18:21 | lit-init s | exprs.go:18:9:18:22 | After slice literal | +| exprs.go:18:21:18:21 | s | exprs.go:18:21:18:21 | After s | +| exprs.go:19:2:19:38 | ... := ... | exprs.go:19:8:19:38 | Before map literal | +| exprs.go:19:2:19:38 | After ... := ... | exprs.go:20:2:20:19 | ... := ... | +| exprs.go:19:2:19:38 | assign:0 ... := ... | exprs.go:19:2:19:38 | After ... := ... | +| exprs.go:19:8:19:38 | After map literal | exprs.go:19:2:19:38 | assign:0 ... := ... | +| exprs.go:19:8:19:38 | Before map literal | exprs.go:19:8:19:38 | map literal | +| exprs.go:19:8:19:38 | map literal | exprs.go:19:23:19:37 | Before key-value pair | +| exprs.go:19:23:19:25 | After slc | exprs.go:19:27:19:27 | Before 0 | +| exprs.go:19:23:19:25 | Before slc | exprs.go:19:23:19:25 | slc | +| exprs.go:19:23:19:25 | slc | exprs.go:19:23:19:25 | After slc | +| exprs.go:19:23:19:28 | After index expression | exprs.go:19:31:19:37 | Before index expression | +| exprs.go:19:23:19:28 | Before index expression | exprs.go:19:23:19:25 | Before slc | +| exprs.go:19:23:19:28 | index expression | exprs.go:5:1:26:1 | Exceptional Exit | +| exprs.go:19:23:19:28 | index expression | exprs.go:19:23:19:28 | After index expression | +| exprs.go:19:23:19:37 | After key-value pair | exprs.go:19:23:19:37 | lit-init key-value pair | +| exprs.go:19:23:19:37 | Before key-value pair | exprs.go:19:23:19:28 | Before index expression | +| exprs.go:19:23:19:37 | key-value pair | exprs.go:19:23:19:37 | After key-value pair | +| exprs.go:19:23:19:37 | lit-init key-value pair | exprs.go:19:8:19:38 | After map literal | +| exprs.go:19:27:19:27 | 0 | exprs.go:19:27:19:27 | After 0 | +| exprs.go:19:27:19:27 | After 0 | exprs.go:19:23:19:28 | index expression | +| exprs.go:19:27:19:27 | Before 0 | exprs.go:19:27:19:27 | 0 | +| exprs.go:19:31:19:34 | After arr2 | exprs.go:19:36:19:36 | Before 1 | +| exprs.go:19:31:19:34 | Before arr2 | exprs.go:19:31:19:34 | arr2 | +| exprs.go:19:31:19:34 | arr2 | exprs.go:19:31:19:34 | After arr2 | +| exprs.go:19:31:19:37 | After index expression | exprs.go:19:23:19:37 | key-value pair | +| exprs.go:19:31:19:37 | Before index expression | exprs.go:19:31:19:34 | Before arr2 | +| exprs.go:19:31:19:37 | index expression | exprs.go:5:1:26:1 | Exceptional Exit | +| exprs.go:19:31:19:37 | index expression | exprs.go:19:31:19:37 | After index expression | +| exprs.go:19:36:19:36 | 1 | exprs.go:19:36:19:36 | After 1 | +| exprs.go:19:36:19:36 | After 1 | exprs.go:19:31:19:37 | index expression | +| exprs.go:19:36:19:36 | Before 1 | exprs.go:19:36:19:36 | 1 | +| exprs.go:20:2:20:19 | ... := ... | exprs.go:20:10:20:19 | Before slice expression | +| exprs.go:20:2:20:19 | After ... := ... | exprs.go:21:2:21:19 | ... := ... | +| exprs.go:20:2:20:19 | assign:0 ... := ... | exprs.go:20:2:20:19 | After ... := ... | +| exprs.go:20:10:20:12 | After slc | exprs.go:20:14:20:14 | Before 1 | +| exprs.go:20:10:20:12 | Before slc | exprs.go:20:10:20:12 | slc | +| exprs.go:20:10:20:12 | slc | exprs.go:20:10:20:12 | After slc | +| exprs.go:20:10:20:19 | After slice expression | exprs.go:20:2:20:19 | assign:0 ... := ... | +| exprs.go:20:10:20:19 | Before slice expression | exprs.go:20:10:20:12 | Before slc | +| exprs.go:20:10:20:19 | slice expression | exprs.go:20:10:20:19 | After slice expression | +| exprs.go:20:14:20:14 | 1 | exprs.go:20:14:20:14 | After 1 | +| exprs.go:20:14:20:14 | After 1 | exprs.go:20:16:20:16 | Before 2 | +| exprs.go:20:14:20:14 | Before 1 | exprs.go:20:14:20:14 | 1 | +| exprs.go:20:16:20:16 | 2 | exprs.go:20:16:20:16 | After 2 | +| exprs.go:20:16:20:16 | After 2 | exprs.go:20:18:20:18 | Before 3 | +| exprs.go:20:16:20:16 | Before 2 | exprs.go:20:16:20:16 | 2 | +| exprs.go:20:18:20:18 | 3 | exprs.go:20:18:20:18 | After 3 | +| exprs.go:20:18:20:18 | After 3 | exprs.go:20:10:20:19 | slice expression | +| exprs.go:20:18:20:18 | Before 3 | exprs.go:20:18:20:18 | 3 | +| exprs.go:21:2:21:19 | ... := ... | exprs.go:21:10:21:19 | Before slice expression | +| exprs.go:21:2:21:19 | After ... := ... | exprs.go:22:2:22:18 | ... := ... | +| exprs.go:21:2:21:19 | assign:0 ... := ... | exprs.go:21:2:21:19 | After ... := ... | +| exprs.go:21:10:21:13 | After slc2 | exprs.go:21:10:21:19 | implicit-low slice expression | +| exprs.go:21:10:21:13 | Before slc2 | exprs.go:21:10:21:13 | slc2 | +| exprs.go:21:10:21:13 | slc2 | exprs.go:21:10:21:13 | After slc2 | +| exprs.go:21:10:21:19 | After slice expression | exprs.go:21:2:21:19 | assign:0 ... := ... | +| exprs.go:21:10:21:19 | Before slice expression | exprs.go:21:10:21:13 | Before slc2 | +| exprs.go:21:10:21:19 | implicit-low slice expression | exprs.go:21:16:21:16 | Before 2 | +| exprs.go:21:10:21:19 | slice expression | exprs.go:21:10:21:19 | After slice expression | +| exprs.go:21:16:21:16 | 2 | exprs.go:21:16:21:16 | After 2 | +| exprs.go:21:16:21:16 | After 2 | exprs.go:21:18:21:18 | Before 3 | +| exprs.go:21:16:21:16 | Before 2 | exprs.go:21:16:21:16 | 2 | +| exprs.go:21:18:21:18 | 3 | exprs.go:21:18:21:18 | After 3 | +| exprs.go:21:18:21:18 | After 3 | exprs.go:21:10:21:19 | slice expression | +| exprs.go:21:18:21:18 | Before 3 | exprs.go:21:18:21:18 | 3 | +| exprs.go:22:2:22:18 | ... := ... | exprs.go:22:10:22:18 | Before slice expression | +| exprs.go:22:2:22:18 | After ... := ... | exprs.go:23:2:23:17 | ... := ... | +| exprs.go:22:2:22:18 | assign:0 ... := ... | exprs.go:22:2:22:18 | After ... := ... | +| exprs.go:22:10:22:13 | After slc3 | exprs.go:22:15:22:15 | Before 0 | +| exprs.go:22:10:22:13 | Before slc3 | exprs.go:22:10:22:13 | slc3 | +| exprs.go:22:10:22:13 | slc3 | exprs.go:22:10:22:13 | After slc3 | +| exprs.go:22:10:22:18 | After slice expression | exprs.go:22:2:22:18 | assign:0 ... := ... | +| exprs.go:22:10:22:18 | Before slice expression | exprs.go:22:10:22:13 | Before slc3 | +| exprs.go:22:10:22:18 | implicit-max slice expression | exprs.go:22:10:22:18 | slice expression | +| exprs.go:22:10:22:18 | slice expression | exprs.go:22:10:22:18 | After slice expression | +| exprs.go:22:15:22:15 | 0 | exprs.go:22:15:22:15 | After 0 | +| exprs.go:22:15:22:15 | After 0 | exprs.go:22:17:22:17 | Before 2 | +| exprs.go:22:15:22:15 | Before 0 | exprs.go:22:15:22:15 | 0 | +| exprs.go:22:17:22:17 | 2 | exprs.go:22:17:22:17 | After 2 | +| exprs.go:22:17:22:17 | After 2 | exprs.go:22:10:22:18 | implicit-max slice expression | +| exprs.go:22:17:22:17 | Before 2 | exprs.go:22:17:22:17 | 2 | +| exprs.go:23:2:23:17 | ... := ... | exprs.go:23:10:23:17 | Before slice expression | +| exprs.go:23:2:23:17 | After ... := ... | exprs.go:24:2:24:17 | ... := ... | +| exprs.go:23:2:23:17 | assign:0 ... := ... | exprs.go:23:2:23:17 | After ... := ... | +| exprs.go:23:10:23:13 | After slc4 | exprs.go:23:15:23:15 | Before 0 | +| exprs.go:23:10:23:13 | Before slc4 | exprs.go:23:10:23:13 | slc4 | +| exprs.go:23:10:23:13 | slc4 | exprs.go:23:10:23:13 | After slc4 | +| exprs.go:23:10:23:17 | After slice expression | exprs.go:23:2:23:17 | assign:0 ... := ... | +| exprs.go:23:10:23:17 | Before slice expression | exprs.go:23:10:23:13 | Before slc4 | +| exprs.go:23:10:23:17 | implicit-high slice expression | exprs.go:23:10:23:17 | implicit-max slice expression | +| exprs.go:23:10:23:17 | implicit-max slice expression | exprs.go:23:10:23:17 | slice expression | +| exprs.go:23:10:23:17 | slice expression | exprs.go:23:10:23:17 | After slice expression | +| exprs.go:23:15:23:15 | 0 | exprs.go:23:15:23:15 | After 0 | +| exprs.go:23:15:23:15 | After 0 | exprs.go:23:10:23:17 | implicit-high slice expression | +| exprs.go:23:15:23:15 | Before 0 | exprs.go:23:15:23:15 | 0 | +| exprs.go:24:2:24:17 | ... := ... | exprs.go:24:10:24:17 | Before slice expression | +| exprs.go:24:2:24:17 | After ... := ... | exprs.go:25:2:25:34 | Before return statement | +| exprs.go:24:2:24:17 | assign:0 ... := ... | exprs.go:24:2:24:17 | After ... := ... | +| exprs.go:24:10:24:13 | After slc5 | exprs.go:24:10:24:17 | implicit-low slice expression | +| exprs.go:24:10:24:13 | Before slc5 | exprs.go:24:10:24:13 | slc5 | +| exprs.go:24:10:24:13 | slc5 | exprs.go:24:10:24:13 | After slc5 | +| exprs.go:24:10:24:17 | After slice expression | exprs.go:24:2:24:17 | assign:0 ... := ... | +| exprs.go:24:10:24:17 | Before slice expression | exprs.go:24:10:24:13 | Before slc5 | +| exprs.go:24:10:24:17 | implicit-low slice expression | exprs.go:24:16:24:16 | Before 2 | +| exprs.go:24:10:24:17 | implicit-max slice expression | exprs.go:24:10:24:17 | slice expression | +| exprs.go:24:10:24:17 | slice expression | exprs.go:24:10:24:17 | After slice expression | +| exprs.go:24:16:24:16 | 2 | exprs.go:24:16:24:16 | After 2 | +| exprs.go:24:16:24:16 | After 2 | exprs.go:24:10:24:17 | implicit-max slice expression | +| exprs.go:24:16:24:16 | Before 2 | exprs.go:24:16:24:16 | 2 | +| exprs.go:25:2:25:34 | Before return statement | exprs.go:25:9:25:34 | Before struct literal | +| exprs.go:25:2:25:34 | return statement | exprs.go:5:1:26:1 | Normal Exit | +| exprs.go:25:9:25:34 | After struct literal | exprs.go:25:2:25:34 | return statement | +| exprs.go:25:9:25:34 | Before struct literal | exprs.go:25:9:25:34 | struct literal | +| exprs.go:25:9:25:34 | struct literal | exprs.go:25:15:25:19 | Before index expression | +| exprs.go:25:15:25:16 | After mp | exprs.go:25:18:25:18 | Before s | +| exprs.go:25:15:25:16 | Before mp | exprs.go:25:15:25:16 | mp | +| exprs.go:25:15:25:16 | mp | exprs.go:25:15:25:16 | After mp | +| exprs.go:25:15:25:19 | After index expression | exprs.go:25:15:25:19 | lit-init index expression | +| exprs.go:25:15:25:19 | Before index expression | exprs.go:25:15:25:16 | Before mp | +| exprs.go:25:15:25:19 | index expression | exprs.go:5:1:26:1 | Exceptional Exit | +| exprs.go:25:15:25:19 | index expression | exprs.go:25:15:25:19 | After index expression | +| exprs.go:25:15:25:19 | lit-init index expression | exprs.go:25:22:25:33 | Before call to len | +| exprs.go:25:18:25:18 | After s | exprs.go:25:15:25:19 | index expression | +| exprs.go:25:18:25:18 | Before s | exprs.go:25:18:25:18 | s | +| exprs.go:25:18:25:18 | s | exprs.go:25:18:25:18 | After s | +| exprs.go:25:22:25:24 | After len | exprs.go:25:26:25:32 | Before index expression | +| exprs.go:25:22:25:24 | Before len | exprs.go:25:22:25:24 | len | +| exprs.go:25:22:25:24 | len | exprs.go:25:22:25:24 | After len | +| exprs.go:25:22:25:33 | After call to len | exprs.go:25:22:25:33 | lit-init call to len | +| exprs.go:25:22:25:33 | Before call to len | exprs.go:25:22:25:24 | Before len | +| exprs.go:25:22:25:33 | call to len | exprs.go:25:22:25:33 | After call to len | +| exprs.go:25:22:25:33 | lit-init call to len | exprs.go:25:9:25:34 | After struct literal | +| exprs.go:25:26:25:29 | After slc6 | exprs.go:25:31:25:31 | Before 0 | +| exprs.go:25:26:25:29 | Before slc6 | exprs.go:25:26:25:29 | slc6 | +| exprs.go:25:26:25:29 | slc6 | exprs.go:25:26:25:29 | After slc6 | +| exprs.go:25:26:25:32 | After index expression | exprs.go:25:22:25:33 | call to len | +| exprs.go:25:26:25:32 | Before index expression | exprs.go:25:26:25:29 | Before slc6 | +| exprs.go:25:26:25:32 | index expression | exprs.go:5:1:26:1 | Exceptional Exit | +| exprs.go:25:26:25:32 | index expression | exprs.go:25:26:25:32 | After index expression | +| exprs.go:25:31:25:31 | 0 | exprs.go:25:31:25:31 | After 0 | +| exprs.go:25:31:25:31 | After 0 | exprs.go:25:26:25:32 | index expression | +| exprs.go:25:31:25:31 | Before 0 | exprs.go:25:31:25:31 | 0 | +| exprs.go:28:1:30:1 | After function declaration | exprs.go:32:1:37:1 | Before function declaration | +| exprs.go:28:1:30:1 | Before function declaration | exprs.go:28:1:30:1 | function declaration | +| exprs.go:28:1:30:1 | Entry | exprs.go:28:33:30:1 | block statement | +| exprs.go:28:1:30:1 | Exceptional Exit | exprs.go:28:1:30:1 | Exit | +| exprs.go:28:1:30:1 | Normal Exit | exprs.go:28:1:30:1 | Exit | +| exprs.go:28:1:30:1 | function declaration | exprs.go:28:1:30:1 | After function declaration | +| exprs.go:28:33:30:1 | arg:0 block statement | exprs.go:28:33:30:1 | param-init:0 block statement | +| exprs.go:28:33:30:1 | block statement | exprs.go:28:33:30:1 | arg:0 block statement | +| exprs.go:28:33:30:1 | param-init:0 block statement | exprs.go:29:2:29:21 | Before return statement | +| exprs.go:29:2:29:21 | Before return statement | exprs.go:29:9:29:21 | Before selection of x | +| exprs.go:29:2:29:21 | return statement | exprs.go:28:1:30:1 | Normal Exit | +| exprs.go:29:9:29:11 | After arg | exprs.go:29:9:29:19 | type assertion | +| exprs.go:29:9:29:11 | Before arg | exprs.go:29:9:29:11 | arg | +| exprs.go:29:9:29:11 | arg | exprs.go:29:9:29:11 | After arg | +| exprs.go:29:9:29:19 | After type assertion | exprs.go:29:9:29:21 | selection of x | +| exprs.go:29:9:29:19 | Before type assertion | exprs.go:29:9:29:11 | Before arg | +| exprs.go:29:9:29:19 | type assertion | exprs.go:28:1:30:1 | Exceptional Exit | +| exprs.go:29:9:29:19 | type assertion | exprs.go:29:9:29:19 | After type assertion | +| exprs.go:29:9:29:21 | After selection of x | exprs.go:29:2:29:21 | return statement | +| exprs.go:29:9:29:21 | Before selection of x | exprs.go:29:9:29:19 | Before type assertion | +| exprs.go:29:9:29:21 | selection of x | exprs.go:29:9:29:21 | After selection of x | +| exprs.go:32:1:37:1 | After function declaration | exprs.go:39:1:47:1 | Before function declaration | +| exprs.go:32:1:37:1 | Before function declaration | exprs.go:32:1:37:1 | function declaration | +| exprs.go:32:1:37:1 | Entry | exprs.go:32:33:37:1 | block statement | +| exprs.go:32:1:37:1 | Normal Exit | exprs.go:32:1:37:1 | Exit | +| exprs.go:32:1:37:1 | function declaration | exprs.go:32:1:37:1 | After function declaration | +| exprs.go:32:33:37:1 | arg:0 block statement | exprs.go:32:33:37:1 | param-init:0 block statement | +| exprs.go:32:33:37:1 | block statement | exprs.go:32:33:37:1 | arg:0 block statement | +| exprs.go:32:33:37:1 | param-init:0 block statement | exprs.go:33:2:35:2 | if statement | +| exprs.go:33:2:35:2 | After if statement | exprs.go:36:2:36:10 | Before return statement | +| exprs.go:33:2:35:2 | if statement | exprs.go:33:5:33:24 | ... := ... | +| exprs.go:33:5:33:24 | ... := ... | exprs.go:33:14:33:24 | Before type assertion | +| exprs.go:33:5:33:24 | After ... := ... | exprs.go:33:27:33:28 | Before ok | +| exprs.go:33:5:33:24 | assign:0 ... := ... | exprs.go:33:5:33:24 | extract:1 ... := ... | +| exprs.go:33:5:33:24 | assign:1 ... := ... | exprs.go:33:5:33:24 | After ... := ... | +| exprs.go:33:5:33:24 | extract:0 ... := ... | exprs.go:33:5:33:24 | assign:0 ... := ... | +| exprs.go:33:5:33:24 | extract:1 ... := ... | exprs.go:33:5:33:24 | assign:1 ... := ... | +| exprs.go:33:14:33:16 | After arg | exprs.go:33:14:33:24 | type assertion | +| exprs.go:33:14:33:16 | Before arg | exprs.go:33:14:33:16 | arg | +| exprs.go:33:14:33:16 | arg | exprs.go:33:14:33:16 | After arg | +| exprs.go:33:14:33:24 | After type assertion | exprs.go:33:5:33:24 | extract:0 ... := ... | +| exprs.go:33:14:33:24 | Before type assertion | exprs.go:33:14:33:16 | Before arg | +| exprs.go:33:14:33:24 | type assertion | exprs.go:33:14:33:24 | After type assertion | +| exprs.go:33:27:33:28 | After ok [false] | exprs.go:33:2:35:2 | After if statement | +| exprs.go:33:27:33:28 | After ok [true] | exprs.go:33:30:35:2 | block statement | +| exprs.go:33:27:33:28 | Before ok | exprs.go:33:27:33:28 | ok | +| exprs.go:33:27:33:28 | ok | exprs.go:33:27:33:28 | After ok [false] | +| exprs.go:33:27:33:28 | ok | exprs.go:33:27:33:28 | After ok [true] | +| exprs.go:33:30:35:2 | block statement | exprs.go:34:3:34:12 | Before return statement | +| exprs.go:34:3:34:12 | Before return statement | exprs.go:34:10:34:12 | Before selection of x | +| exprs.go:34:3:34:12 | return statement | exprs.go:32:1:37:1 | Normal Exit | +| exprs.go:34:10:34:10 | After p | exprs.go:34:10:34:12 | selection of x | +| exprs.go:34:10:34:10 | Before p | exprs.go:34:10:34:10 | p | +| exprs.go:34:10:34:10 | p | exprs.go:34:10:34:10 | After p | +| exprs.go:34:10:34:12 | After selection of x | exprs.go:34:3:34:12 | return statement | +| exprs.go:34:10:34:12 | Before selection of x | exprs.go:34:10:34:10 | Before p | +| exprs.go:34:10:34:12 | selection of x | exprs.go:34:10:34:12 | After selection of x | +| exprs.go:36:2:36:10 | Before return statement | exprs.go:36:9:36:10 | Before -... | +| exprs.go:36:2:36:10 | return statement | exprs.go:32:1:37:1 | Normal Exit | +| exprs.go:36:9:36:10 | -... | exprs.go:36:9:36:10 | After -... | +| exprs.go:36:9:36:10 | After -... | exprs.go:36:2:36:10 | return statement | +| exprs.go:36:9:36:10 | Before -... | exprs.go:36:10:36:10 | Before 1 | +| exprs.go:36:10:36:10 | 1 | exprs.go:36:10:36:10 | After 1 | +| exprs.go:36:10:36:10 | After 1 | exprs.go:36:9:36:10 | -... | +| exprs.go:36:10:36:10 | Before 1 | exprs.go:36:10:36:10 | 1 | +| exprs.go:39:1:47:1 | After function declaration | exprs.go:49:1:54:1 | Before function declaration | +| exprs.go:39:1:47:1 | Before function declaration | exprs.go:39:1:47:1 | function declaration | +| exprs.go:39:1:47:1 | Entry | exprs.go:39:33:47:1 | block statement | +| exprs.go:39:1:47:1 | Normal Exit | exprs.go:39:1:47:1 | Exit | +| exprs.go:39:1:47:1 | function declaration | exprs.go:39:1:47:1 | After function declaration | +| exprs.go:39:33:47:1 | arg:0 block statement | exprs.go:39:33:47:1 | param-init:0 block statement | +| exprs.go:39:33:47:1 | block statement | exprs.go:39:33:47:1 | arg:0 block statement | +| exprs.go:39:33:47:1 | param-init:0 block statement | exprs.go:40:2:40:12 | declaration statement | +| exprs.go:40:2:40:12 | After declaration statement | exprs.go:41:2:41:12 | declaration statement | +| exprs.go:40:2:40:12 | After variable declaration | exprs.go:40:2:40:12 | After declaration statement | +| exprs.go:40:2:40:12 | declaration statement | exprs.go:40:2:40:12 | variable declaration | +| exprs.go:40:2:40:12 | variable declaration | exprs.go:40:6:40:12 | value declaration specifier | +| exprs.go:40:6:40:12 | After value declaration specifier | exprs.go:40:2:40:12 | After variable declaration | +| exprs.go:40:6:40:12 | assign:0 value declaration specifier | exprs.go:40:6:40:12 | After value declaration specifier | +| exprs.go:40:6:40:12 | value declaration specifier | exprs.go:40:6:40:12 | zero-init:0 value declaration specifier | +| exprs.go:40:6:40:12 | zero-init:0 value declaration specifier | exprs.go:40:6:40:12 | assign:0 value declaration specifier | +| exprs.go:41:2:41:12 | After declaration statement | exprs.go:42:2:42:20 | ... = ... | +| exprs.go:41:2:41:12 | After variable declaration | exprs.go:41:2:41:12 | After declaration statement | +| exprs.go:41:2:41:12 | declaration statement | exprs.go:41:2:41:12 | variable declaration | +| exprs.go:41:2:41:12 | variable declaration | exprs.go:41:6:41:12 | value declaration specifier | +| exprs.go:41:6:41:12 | After value declaration specifier | exprs.go:41:2:41:12 | After variable declaration | +| exprs.go:41:6:41:12 | assign:0 value declaration specifier | exprs.go:41:6:41:12 | After value declaration specifier | +| exprs.go:41:6:41:12 | value declaration specifier | exprs.go:41:6:41:12 | zero-init:0 value declaration specifier | +| exprs.go:41:6:41:12 | zero-init:0 value declaration specifier | exprs.go:41:6:41:12 | assign:0 value declaration specifier | +| exprs.go:42:2:42:20 | ... = ... | exprs.go:42:10:42:20 | Before type assertion | +| exprs.go:42:2:42:20 | After ... = ... | exprs.go:43:2:45:2 | if statement | +| exprs.go:42:2:42:20 | assign:0 ... = ... | exprs.go:42:2:42:20 | extract:1 ... = ... | +| exprs.go:42:2:42:20 | assign:1 ... = ... | exprs.go:42:2:42:20 | After ... = ... | +| exprs.go:42:2:42:20 | extract:0 ... = ... | exprs.go:42:2:42:20 | assign:0 ... = ... | +| exprs.go:42:2:42:20 | extract:1 ... = ... | exprs.go:42:2:42:20 | assign:1 ... = ... | +| exprs.go:42:10:42:12 | After arg | exprs.go:42:10:42:20 | type assertion | +| exprs.go:42:10:42:12 | Before arg | exprs.go:42:10:42:12 | arg | +| exprs.go:42:10:42:12 | arg | exprs.go:42:10:42:12 | After arg | +| exprs.go:42:10:42:20 | After type assertion | exprs.go:42:2:42:20 | extract:0 ... = ... | +| exprs.go:42:10:42:20 | Before type assertion | exprs.go:42:10:42:12 | Before arg | +| exprs.go:42:10:42:20 | type assertion | exprs.go:42:10:42:20 | After type assertion | +| exprs.go:43:2:45:2 | After if statement | exprs.go:46:2:46:10 | Before return statement | +| exprs.go:43:2:45:2 | if statement | exprs.go:43:5:43:6 | Before ok | +| exprs.go:43:5:43:6 | After ok [false] | exprs.go:43:2:45:2 | After if statement | +| exprs.go:43:5:43:6 | After ok [true] | exprs.go:43:8:45:2 | block statement | +| exprs.go:43:5:43:6 | Before ok | exprs.go:43:5:43:6 | ok | +| exprs.go:43:5:43:6 | ok | exprs.go:43:5:43:6 | After ok [false] | +| exprs.go:43:5:43:6 | ok | exprs.go:43:5:43:6 | After ok [true] | +| exprs.go:43:8:45:2 | block statement | exprs.go:44:3:44:12 | Before return statement | +| exprs.go:44:3:44:12 | Before return statement | exprs.go:44:10:44:12 | Before selection of x | +| exprs.go:44:3:44:12 | return statement | exprs.go:39:1:47:1 | Normal Exit | +| exprs.go:44:10:44:10 | After p | exprs.go:44:10:44:12 | selection of x | +| exprs.go:44:10:44:10 | Before p | exprs.go:44:10:44:10 | p | +| exprs.go:44:10:44:10 | p | exprs.go:44:10:44:10 | After p | +| exprs.go:44:10:44:12 | After selection of x | exprs.go:44:3:44:12 | return statement | +| exprs.go:44:10:44:12 | Before selection of x | exprs.go:44:10:44:10 | Before p | +| exprs.go:44:10:44:12 | selection of x | exprs.go:44:10:44:12 | After selection of x | +| exprs.go:46:2:46:10 | Before return statement | exprs.go:46:9:46:10 | Before -... | +| exprs.go:46:2:46:10 | return statement | exprs.go:39:1:47:1 | Normal Exit | +| exprs.go:46:9:46:10 | -... | exprs.go:46:9:46:10 | After -... | +| exprs.go:46:9:46:10 | After -... | exprs.go:46:2:46:10 | return statement | +| exprs.go:46:9:46:10 | Before -... | exprs.go:46:10:46:10 | Before 1 | +| exprs.go:46:10:46:10 | 1 | exprs.go:46:10:46:10 | After 1 | +| exprs.go:46:10:46:10 | After 1 | exprs.go:46:9:46:10 | -... | +| exprs.go:46:10:46:10 | Before 1 | exprs.go:46:10:46:10 | 1 | +| exprs.go:49:1:54:1 | After function declaration | exprs.go:56:1:58:1 | Before function declaration | +| exprs.go:49:1:54:1 | Before function declaration | exprs.go:49:1:54:1 | function declaration | +| exprs.go:49:1:54:1 | Entry | exprs.go:49:30:54:1 | block statement | +| exprs.go:49:1:54:1 | Exceptional Exit | exprs.go:49:1:54:1 | Exit | +| exprs.go:49:1:54:1 | Normal Exit | exprs.go:49:1:54:1 | Exit | +| exprs.go:49:1:54:1 | function declaration | exprs.go:49:1:54:1 | After function declaration | +| exprs.go:49:30:54:1 | arg:0 block statement | exprs.go:49:30:54:1 | param-init:0 block statement | +| exprs.go:49:30:54:1 | block statement | exprs.go:49:30:54:1 | arg:0 block statement | +| exprs.go:49:30:54:1 | param-init:0 block statement | exprs.go:49:30:54:1 | result-zero-init:0 block statement | +| exprs.go:49:30:54:1 | result-init:0 block statement | exprs.go:50:2:52:2 | for statement | +| exprs.go:49:30:54:1 | result-zero-init:0 block statement | exprs.go:49:30:54:1 | result-init:0 block statement | +| exprs.go:50:2:52:2 | After for statement | exprs.go:53:2:53:7 | Before return statement | +| exprs.go:50:2:52:2 | [LoopHeader] for statement | exprs.go:50:27:50:29 | Before increment statement | +| exprs.go:50:2:52:2 | for statement | exprs.go:50:6:50:11 | ... := ... | +| exprs.go:50:6:50:11 | ... := ... | exprs.go:50:11:50:11 | Before 0 | +| exprs.go:50:6:50:11 | After ... := ... | exprs.go:50:14:50:24 | Before ...<... | +| exprs.go:50:6:50:11 | assign:0 ... := ... | exprs.go:50:6:50:11 | After ... := ... | +| exprs.go:50:11:50:11 | 0 | exprs.go:50:11:50:11 | After 0 | +| exprs.go:50:11:50:11 | After 0 | exprs.go:50:6:50:11 | assign:0 ... := ... | +| exprs.go:50:11:50:11 | Before 0 | exprs.go:50:11:50:11 | 0 | +| exprs.go:50:14:50:14 | After i | exprs.go:50:18:50:24 | Before call to len | +| exprs.go:50:14:50:14 | Before i | exprs.go:50:14:50:14 | i | +| exprs.go:50:14:50:14 | i | exprs.go:50:14:50:14 | After i | +| exprs.go:50:14:50:24 | ...<... | exprs.go:50:14:50:24 | After ...<... [false] | +| exprs.go:50:14:50:24 | ...<... | exprs.go:50:14:50:24 | After ...<... [true] | +| exprs.go:50:14:50:24 | After ...<... [false] | exprs.go:50:2:52:2 | After for statement | +| exprs.go:50:14:50:24 | After ...<... [true] | exprs.go:50:31:52:2 | block statement | +| exprs.go:50:14:50:24 | Before ...<... | exprs.go:50:14:50:14 | Before i | +| exprs.go:50:18:50:20 | After len | exprs.go:50:22:50:23 | Before xs | +| exprs.go:50:18:50:20 | Before len | exprs.go:50:18:50:20 | len | +| exprs.go:50:18:50:20 | len | exprs.go:50:18:50:20 | After len | +| exprs.go:50:18:50:24 | After call to len | exprs.go:50:14:50:24 | ...<... | +| exprs.go:50:18:50:24 | Before call to len | exprs.go:50:18:50:20 | Before len | +| exprs.go:50:18:50:24 | call to len | exprs.go:50:18:50:24 | After call to len | +| exprs.go:50:22:50:23 | After xs | exprs.go:50:18:50:24 | call to len | +| exprs.go:50:22:50:23 | Before xs | exprs.go:50:22:50:23 | xs | +| exprs.go:50:22:50:23 | xs | exprs.go:50:22:50:23 | After xs | +| exprs.go:50:27:50:27 | After i | exprs.go:50:27:50:29 | implicit-one increment statement | +| exprs.go:50:27:50:27 | Before i | exprs.go:50:27:50:27 | i | +| exprs.go:50:27:50:27 | i | exprs.go:50:27:50:27 | After i | +| exprs.go:50:27:50:29 | After increment statement | exprs.go:50:14:50:24 | Before ...<... | +| exprs.go:50:27:50:29 | Before increment statement | exprs.go:50:27:50:27 | Before i | +| exprs.go:50:27:50:29 | implicit-one increment statement | exprs.go:50:27:50:29 | incdec-rhs increment statement | +| exprs.go:50:27:50:29 | incdec-rhs increment statement | exprs.go:50:27:50:29 | increment statement | +| exprs.go:50:27:50:29 | increment statement | exprs.go:50:27:50:29 | After increment statement | +| exprs.go:50:31:52:2 | After block statement | exprs.go:50:2:52:2 | [LoopHeader] for statement | +| exprs.go:50:31:52:2 | block statement | exprs.go:51:3:51:14 | ... += ... | +| exprs.go:51:3:51:5 | After res | exprs.go:51:10:51:14 | Before index expression | +| exprs.go:51:3:51:5 | Before res | exprs.go:51:3:51:5 | res | +| exprs.go:51:3:51:5 | res | exprs.go:51:3:51:5 | After res | +| exprs.go:51:3:51:14 | ... += ... | exprs.go:51:3:51:5 | Before res | +| exprs.go:51:3:51:14 | After ... += ... | exprs.go:50:31:52:2 | After block statement | +| exprs.go:51:3:51:14 | assign:0 ... += ... | exprs.go:51:3:51:14 | After ... += ... | +| exprs.go:51:3:51:14 | compound-rhs ... += ... | exprs.go:51:3:51:14 | assign:0 ... += ... | +| exprs.go:51:10:51:11 | After xs | exprs.go:51:13:51:13 | Before i | +| exprs.go:51:10:51:11 | Before xs | exprs.go:51:10:51:11 | xs | +| exprs.go:51:10:51:11 | xs | exprs.go:51:10:51:11 | After xs | +| exprs.go:51:10:51:14 | After index expression | exprs.go:51:3:51:14 | compound-rhs ... += ... | +| exprs.go:51:10:51:14 | Before index expression | exprs.go:51:10:51:11 | Before xs | +| exprs.go:51:10:51:14 | index expression | exprs.go:49:1:54:1 | Exceptional Exit | +| exprs.go:51:10:51:14 | index expression | exprs.go:51:10:51:14 | After index expression | +| exprs.go:51:13:51:13 | After i | exprs.go:51:10:51:14 | index expression | +| exprs.go:51:13:51:13 | Before i | exprs.go:51:13:51:13 | i | +| exprs.go:51:13:51:13 | i | exprs.go:51:13:51:13 | After i | +| exprs.go:53:2:53:7 | Before return statement | exprs.go:53:2:53:7 | return statement | +| exprs.go:53:2:53:7 | return statement | exprs.go:49:1:54:1 | Normal Exit | +| exprs.go:53:2:53:7 | return statement | exprs.go:49:30:54:1 | result-read:0 block statement | +| exprs.go:56:1:58:1 | After function declaration | exprs.go:60:1:62:1 | Before function declaration | +| exprs.go:56:1:58:1 | Before function declaration | exprs.go:56:1:58:1 | function declaration | +| exprs.go:56:1:58:1 | Entry | exprs.go:56:26:58:1 | block statement | +| exprs.go:56:1:58:1 | Exceptional Exit | exprs.go:56:1:58:1 | Exit | +| exprs.go:56:1:58:1 | Normal Exit | exprs.go:56:1:58:1 | Exit | +| exprs.go:56:1:58:1 | function declaration | exprs.go:56:1:58:1 | After function declaration | +| exprs.go:56:26:58:1 | arg:0 block statement | exprs.go:56:26:58:1 | param-init:0 block statement | +| exprs.go:56:26:58:1 | block statement | exprs.go:56:26:58:1 | arg:0 block statement | +| exprs.go:56:26:58:1 | param-init:0 block statement | exprs.go:57:2:57:15 | Before return statement | +| exprs.go:57:2:57:15 | Before return statement | exprs.go:57:9:57:15 | Before call to sum | +| exprs.go:57:2:57:15 | return statement | exprs.go:56:1:58:1 | Normal Exit | +| exprs.go:57:9:57:11 | After sum | exprs.go:57:13:57:14 | Before xs | +| exprs.go:57:9:57:11 | Before sum | exprs.go:57:9:57:11 | sum | +| exprs.go:57:9:57:11 | sum | exprs.go:57:9:57:11 | After sum | +| exprs.go:57:9:57:15 | After call to sum | exprs.go:57:2:57:15 | return statement | +| exprs.go:57:9:57:15 | Before call to sum | exprs.go:57:9:57:11 | Before sum | +| exprs.go:57:9:57:15 | call to sum | exprs.go:56:1:58:1 | Exceptional Exit | +| exprs.go:57:9:57:15 | call to sum | exprs.go:57:9:57:15 | After call to sum | +| exprs.go:57:13:57:14 | After xs | exprs.go:57:9:57:15 | call to sum | +| exprs.go:57:13:57:14 | Before xs | exprs.go:57:13:57:14 | xs | +| exprs.go:57:13:57:14 | xs | exprs.go:57:13:57:14 | After xs | +| exprs.go:60:1:62:1 | After function declaration | exprs.go:64:1:64:19 | variable declaration | +| exprs.go:60:1:62:1 | Before function declaration | exprs.go:60:1:62:1 | function declaration | +| exprs.go:60:1:62:1 | Entry | exprs.go:60:19:62:1 | block statement | +| exprs.go:60:1:62:1 | Normal Exit | exprs.go:60:1:62:1 | Exit | +| exprs.go:60:1:62:1 | function declaration | exprs.go:60:1:62:1 | After function declaration | +| exprs.go:60:19:62:1 | block statement | exprs.go:61:2:61:22 | Before return statement | +| exprs.go:61:2:61:22 | Before return statement | exprs.go:61:9:61:22 | Before slice literal | +| exprs.go:61:2:61:22 | return statement | exprs.go:60:1:62:1 | Normal Exit | +| exprs.go:61:9:61:22 | After slice literal | exprs.go:61:2:61:22 | return statement | +| exprs.go:61:9:61:22 | Before slice literal | exprs.go:61:9:61:22 | slice literal | +| exprs.go:61:9:61:22 | slice literal | exprs.go:61:15:61:15 | Before 1 | +| exprs.go:61:15:61:15 | 1 | exprs.go:61:15:61:15 | After 1 | +| exprs.go:61:15:61:15 | After 1 | exprs.go:61:15:61:15 | lit-index 1 | +| exprs.go:61:15:61:15 | Before 1 | exprs.go:61:15:61:15 | 1 | +| exprs.go:61:15:61:15 | lit-index 1 | exprs.go:61:15:61:15 | lit-init 1 | +| exprs.go:61:15:61:15 | lit-init 1 | exprs.go:61:18:61:18 | Before 2 | +| exprs.go:61:18:61:18 | 2 | exprs.go:61:18:61:18 | After 2 | +| exprs.go:61:18:61:18 | After 2 | exprs.go:61:18:61:18 | lit-index 2 | +| exprs.go:61:18:61:18 | Before 2 | exprs.go:61:18:61:18 | 2 | +| exprs.go:61:18:61:18 | lit-index 2 | exprs.go:61:18:61:18 | lit-init 2 | +| exprs.go:61:18:61:18 | lit-init 2 | exprs.go:61:21:61:21 | Before 3 | +| exprs.go:61:21:61:21 | 3 | exprs.go:61:21:61:21 | After 3 | +| exprs.go:61:21:61:21 | After 3 | exprs.go:61:21:61:21 | lit-index 3 | +| exprs.go:61:21:61:21 | Before 3 | exprs.go:61:21:61:21 | 3 | +| exprs.go:61:21:61:21 | lit-index 3 | exprs.go:61:21:61:21 | lit-init 3 | +| exprs.go:61:21:61:21 | lit-init 3 | exprs.go:61:9:61:22 | After slice literal | +| exprs.go:64:1:64:19 | After variable declaration | exprs.go:65:1:65:24 | variable declaration | +| exprs.go:64:1:64:19 | variable declaration | exprs.go:64:5:64:19 | value declaration specifier | +| exprs.go:64:5:64:19 | After value declaration specifier | exprs.go:64:1:64:19 | After variable declaration | +| exprs.go:64:5:64:19 | assign:0 value declaration specifier | exprs.go:64:5:64:19 | After value declaration specifier | +| exprs.go:64:5:64:19 | value declaration specifier | exprs.go:64:9:64:19 | Before call to sum | +| exprs.go:64:9:64:11 | After sum | exprs.go:64:13:64:18 | Before call to ints | +| exprs.go:64:9:64:11 | Before sum | exprs.go:64:9:64:11 | sum | +| exprs.go:64:9:64:11 | sum | exprs.go:64:9:64:11 | After sum | +| exprs.go:64:9:64:19 | After call to sum | exprs.go:64:5:64:19 | assign:0 value declaration specifier | +| exprs.go:64:9:64:19 | Before call to sum | exprs.go:64:9:64:11 | Before sum | +| exprs.go:64:9:64:19 | call to sum | exprs.go:0:0:0:0 | Exceptional Exit | +| exprs.go:64:9:64:19 | call to sum | exprs.go:64:9:64:19 | After call to sum | +| exprs.go:64:13:64:16 | After ints | exprs.go:64:13:64:18 | call to ints | +| exprs.go:64:13:64:16 | Before ints | exprs.go:64:13:64:16 | ints | +| exprs.go:64:13:64:16 | ints | exprs.go:64:13:64:16 | After ints | +| exprs.go:64:13:64:18 | After call to ints | exprs.go:64:9:64:19 | call to sum | +| exprs.go:64:13:64:18 | Before call to ints | exprs.go:64:13:64:16 | Before ints | +| exprs.go:64:13:64:18 | call to ints | exprs.go:0:0:0:0 | Exceptional Exit | +| exprs.go:64:13:64:18 | call to ints | exprs.go:64:13:64:18 | After call to ints | +| exprs.go:65:1:65:24 | After variable declaration | exprs.go:67:1:69:1 | Before function declaration | +| exprs.go:65:1:65:24 | variable declaration | exprs.go:65:5:65:24 | value declaration specifier | +| exprs.go:65:5:65:24 | After value declaration specifier | exprs.go:65:1:65:24 | After variable declaration | +| exprs.go:65:5:65:24 | assign:0 value declaration specifier | exprs.go:65:5:65:24 | After value declaration specifier | +| exprs.go:65:5:65:24 | value declaration specifier | exprs.go:65:10:65:24 | Before call to sum2 | +| exprs.go:65:10:65:13 | After sum2 | exprs.go:65:15:65:20 | Before call to ints | +| exprs.go:65:10:65:13 | Before sum2 | exprs.go:65:10:65:13 | sum2 | +| exprs.go:65:10:65:13 | sum2 | exprs.go:65:10:65:13 | After sum2 | +| exprs.go:65:10:65:24 | After call to sum2 | exprs.go:65:5:65:24 | assign:0 value declaration specifier | +| exprs.go:65:10:65:24 | Before call to sum2 | exprs.go:65:10:65:13 | Before sum2 | +| exprs.go:65:10:65:24 | call to sum2 | exprs.go:0:0:0:0 | Exceptional Exit | +| exprs.go:65:10:65:24 | call to sum2 | exprs.go:65:10:65:24 | After call to sum2 | +| exprs.go:65:15:65:18 | After ints | exprs.go:65:15:65:20 | call to ints | +| exprs.go:65:15:65:18 | Before ints | exprs.go:65:15:65:18 | ints | +| exprs.go:65:15:65:18 | ints | exprs.go:65:15:65:18 | After ints | +| exprs.go:65:15:65:20 | After call to ints | exprs.go:65:10:65:24 | call to sum2 | +| exprs.go:65:15:65:20 | Before call to ints | exprs.go:65:15:65:18 | Before ints | +| exprs.go:65:15:65:20 | call to ints | exprs.go:0:0:0:0 | Exceptional Exit | +| exprs.go:65:15:65:20 | call to ints | exprs.go:65:15:65:20 | After call to ints | +| exprs.go:67:1:69:1 | After function declaration | exprs.go:71:1:73:1 | Before function declaration | +| exprs.go:67:1:69:1 | Before function declaration | exprs.go:67:1:69:1 | function declaration | +| exprs.go:67:1:69:1 | Entry | exprs.go:67:24:69:1 | block statement | +| exprs.go:67:1:69:1 | Normal Exit | exprs.go:67:1:69:1 | Exit | +| exprs.go:67:1:69:1 | function declaration | exprs.go:67:1:69:1 | After function declaration | +| exprs.go:67:24:69:1 | arg:0 block statement | exprs.go:67:24:69:1 | param-init:0 block statement | +| exprs.go:67:24:69:1 | arg:1 block statement | exprs.go:67:24:69:1 | param-init:1 block statement | +| exprs.go:67:24:69:1 | block statement | exprs.go:67:24:69:1 | arg:0 block statement | +| exprs.go:67:24:69:1 | param-init:0 block statement | exprs.go:67:24:69:1 | arg:1 block statement | +| exprs.go:67:24:69:1 | param-init:1 block statement | exprs.go:68:2:68:13 | Before return statement | +| exprs.go:68:2:68:13 | Before return statement | exprs.go:68:9:68:13 | Before ...+... | +| exprs.go:68:2:68:13 | return statement | exprs.go:67:1:69:1 | Normal Exit | +| exprs.go:68:9:68:9 | After x | exprs.go:68:13:68:13 | Before y | +| exprs.go:68:9:68:9 | Before x | exprs.go:68:9:68:9 | x | +| exprs.go:68:9:68:9 | x | exprs.go:68:9:68:9 | After x | +| exprs.go:68:9:68:13 | ...+... | exprs.go:68:9:68:13 | After ...+... | +| exprs.go:68:9:68:13 | After ...+... | exprs.go:68:2:68:13 | return statement | +| exprs.go:68:9:68:13 | Before ...+... | exprs.go:68:9:68:9 | Before x | +| exprs.go:68:13:68:13 | After y | exprs.go:68:9:68:13 | ...+... | +| exprs.go:68:13:68:13 | Before y | exprs.go:68:13:68:13 | y | +| exprs.go:68:13:68:13 | y | exprs.go:68:13:68:13 | After y | +| exprs.go:71:1:73:1 | After function declaration | exprs.go:75:1:75:19 | variable declaration | +| exprs.go:71:1:73:1 | Before function declaration | exprs.go:71:1:73:1 | function declaration | +| exprs.go:71:1:73:1 | Entry | exprs.go:71:23:73:1 | block statement | +| exprs.go:71:1:73:1 | Normal Exit | exprs.go:71:1:73:1 | Exit | +| exprs.go:71:1:73:1 | function declaration | exprs.go:71:1:73:1 | After function declaration | +| exprs.go:71:23:73:1 | block statement | exprs.go:72:2:72:12 | Before return statement | +| exprs.go:72:2:72:12 | Before return statement | exprs.go:72:9:72:9 | Before 1 | +| exprs.go:72:2:72:12 | return statement | exprs.go:71:1:73:1 | Normal Exit | +| exprs.go:72:9:72:9 | 1 | exprs.go:72:9:72:9 | After 1 | +| exprs.go:72:9:72:9 | After 1 | exprs.go:72:12:72:12 | Before 2 | +| exprs.go:72:9:72:9 | Before 1 | exprs.go:72:9:72:9 | 1 | +| exprs.go:72:12:72:12 | 2 | exprs.go:72:12:72:12 | After 2 | +| exprs.go:72:12:72:12 | After 2 | exprs.go:72:2:72:12 | return statement | +| exprs.go:72:12:72:12 | Before 2 | exprs.go:72:12:72:12 | 2 | +| exprs.go:75:1:75:19 | After variable declaration | exprs.go:77:1:79:1 | Before function declaration | +| exprs.go:75:1:75:19 | variable declaration | exprs.go:75:5:75:19 | value declaration specifier | +| exprs.go:75:5:75:19 | After value declaration specifier | exprs.go:75:1:75:19 | After variable declaration | +| exprs.go:75:5:75:19 | assign:0 value declaration specifier | exprs.go:75:5:75:19 | After value declaration specifier | +| exprs.go:75:5:75:19 | value declaration specifier | exprs.go:75:10:75:19 | Before call to add | +| exprs.go:75:10:75:12 | After add | exprs.go:75:14:75:18 | Before call to gen | +| exprs.go:75:10:75:12 | Before add | exprs.go:75:10:75:12 | add | +| exprs.go:75:10:75:12 | add | exprs.go:75:10:75:12 | After add | +| exprs.go:75:10:75:19 | After call to add | exprs.go:75:5:75:19 | assign:0 value declaration specifier | +| exprs.go:75:10:75:19 | Before call to add | exprs.go:75:10:75:12 | Before add | +| exprs.go:75:10:75:19 | call to add | exprs.go:0:0:0:0 | Exceptional Exit | +| exprs.go:75:10:75:19 | call to add | exprs.go:75:10:75:19 | After call to add | +| exprs.go:75:14:75:16 | After gen | exprs.go:75:14:75:18 | call to gen | +| exprs.go:75:14:75:16 | Before gen | exprs.go:75:14:75:16 | gen | +| exprs.go:75:14:75:16 | gen | exprs.go:75:14:75:16 | After gen | +| exprs.go:75:14:75:18 | After call to gen | exprs.go:75:10:75:19 | call to add | +| exprs.go:75:14:75:18 | Before call to gen | exprs.go:75:14:75:16 | Before gen | +| exprs.go:75:14:75:18 | call to gen | exprs.go:0:0:0:0 | Exceptional Exit | +| exprs.go:75:14:75:18 | call to gen | exprs.go:75:14:75:18 | After call to gen | +| exprs.go:77:1:79:1 | After function declaration | exprs.go:81:1:87:1 | Before function declaration | +| exprs.go:77:1:79:1 | Before function declaration | exprs.go:77:1:79:1 | function declaration | +| exprs.go:77:1:79:1 | Entry | exprs.go:77:31:79:1 | block statement | +| exprs.go:77:1:79:1 | Normal Exit | exprs.go:77:1:79:1 | Exit | +| exprs.go:77:1:79:1 | function declaration | exprs.go:77:1:79:1 | After function declaration | +| exprs.go:77:31:79:1 | arg:0 block statement | exprs.go:77:31:79:1 | param-init:0 block statement | +| exprs.go:77:31:79:1 | arg:1 block statement | exprs.go:77:31:79:1 | param-init:1 block statement | +| exprs.go:77:31:79:1 | arg:2 block statement | exprs.go:77:31:79:1 | param-init:2 block statement | +| exprs.go:77:31:79:1 | block statement | exprs.go:77:31:79:1 | arg:0 block statement | +| exprs.go:77:31:79:1 | param-init:0 block statement | exprs.go:77:31:79:1 | arg:1 block statement | +| exprs.go:77:31:79:1 | param-init:1 block statement | exprs.go:77:31:79:1 | arg:2 block statement | +| exprs.go:77:31:79:1 | param-init:2 block statement | exprs.go:78:2:78:22 | Before return statement | +| exprs.go:78:2:78:22 | Before return statement | exprs.go:78:9:78:22 | ...\|\|... | +| exprs.go:78:2:78:22 | return statement | exprs.go:77:1:79:1 | Normal Exit | +| exprs.go:78:9:78:17 | !... | exprs.go:78:10:78:17 | (...) | +| exprs.go:78:9:78:17 | After !... [false] | exprs.go:78:22:78:22 | Before z | +| exprs.go:78:9:78:17 | After !... [true] | exprs.go:78:9:78:22 | After ...\|\|... | +| exprs.go:78:9:78:22 | ...\|\|... | exprs.go:78:9:78:17 | !... | +| exprs.go:78:9:78:22 | After ...\|\|... | exprs.go:78:2:78:22 | return statement | +| exprs.go:78:10:78:17 | (...) | exprs.go:78:10:78:17 | After (...) [false] | +| exprs.go:78:10:78:17 | (...) | exprs.go:78:10:78:17 | After (...) [true] | +| exprs.go:78:10:78:17 | After (...) [false] | exprs.go:78:9:78:17 | After !... [true] | +| exprs.go:78:10:78:17 | After (...) [true] | exprs.go:78:9:78:17 | After !... [false] | +| exprs.go:78:22:78:22 | After z | exprs.go:78:9:78:22 | After ...\|\|... | +| exprs.go:78:22:78:22 | Before z | exprs.go:78:22:78:22 | z | +| exprs.go:78:22:78:22 | z | exprs.go:78:22:78:22 | After z | +| exprs.go:81:1:87:1 | After function declaration | exprs.go:89:1:89:13 | constant declaration | +| exprs.go:81:1:87:1 | Before function declaration | exprs.go:81:1:87:1 | function declaration | +| exprs.go:81:1:87:1 | Entry | exprs.go:81:35:87:1 | block statement | +| exprs.go:81:1:87:1 | Exceptional Exit | exprs.go:81:1:87:1 | Exit | +| exprs.go:81:1:87:1 | Normal Exit | exprs.go:81:1:87:1 | Exit | +| exprs.go:81:1:87:1 | function declaration | exprs.go:81:1:87:1 | After function declaration | +| exprs.go:81:35:87:1 | After block statement | exprs.go:81:1:87:1 | Normal Exit | +| exprs.go:81:35:87:1 | arg:0 block statement | exprs.go:81:35:87:1 | param-init:0 block statement | +| exprs.go:81:35:87:1 | block statement | exprs.go:81:35:87:1 | arg:0 block statement | +| exprs.go:81:35:87:1 | param-init:0 block statement | exprs.go:82:2:82:16 | ... := ... | +| exprs.go:82:2:82:16 | ... := ... | exprs.go:82:13:82:16 | Before <-... | +| exprs.go:82:2:82:16 | After ... := ... | exprs.go:83:2:85:2 | if statement | +| exprs.go:82:2:82:16 | assign:0 ... := ... | exprs.go:82:2:82:16 | extract:1 ... := ... | +| exprs.go:82:2:82:16 | assign:1 ... := ... | exprs.go:82:2:82:16 | After ... := ... | +| exprs.go:82:2:82:16 | extract:0 ... := ... | exprs.go:82:2:82:16 | assign:0 ... := ... | +| exprs.go:82:2:82:16 | extract:1 ... := ... | exprs.go:82:2:82:16 | assign:1 ... := ... | +| exprs.go:82:13:82:16 | <-... | exprs.go:82:13:82:16 | After <-... | +| exprs.go:82:13:82:16 | After <-... | exprs.go:82:2:82:16 | extract:0 ... := ... | +| exprs.go:82:13:82:16 | Before <-... | exprs.go:82:15:82:16 | Before ch | +| exprs.go:82:15:82:16 | After ch | exprs.go:82:13:82:16 | <-... | +| exprs.go:82:15:82:16 | Before ch | exprs.go:82:15:82:16 | ch | +| exprs.go:82:15:82:16 | ch | exprs.go:82:15:82:16 | After ch | +| exprs.go:83:2:85:2 | After if statement | exprs.go:86:2:86:18 | expression statement | +| exprs.go:83:2:85:2 | if statement | exprs.go:83:5:83:6 | Before ok | +| exprs.go:83:5:83:6 | After ok [false] | exprs.go:83:2:85:2 | After if statement | +| exprs.go:83:5:83:6 | After ok [true] | exprs.go:83:8:85:2 | block statement | +| exprs.go:83:5:83:6 | Before ok | exprs.go:83:5:83:6 | ok | +| exprs.go:83:5:83:6 | ok | exprs.go:83:5:83:6 | After ok [false] | +| exprs.go:83:5:83:6 | ok | exprs.go:83:5:83:6 | After ok [true] | +| exprs.go:83:8:85:2 | block statement | exprs.go:84:3:84:12 | Before return statement | +| exprs.go:84:3:84:12 | Before return statement | exprs.go:84:10:84:12 | Before val | +| exprs.go:84:3:84:12 | return statement | exprs.go:81:1:87:1 | Normal Exit | +| exprs.go:84:3:84:12 | return statement | exprs.go:81:35:87:1 | After block statement | +| exprs.go:84:10:84:12 | After val | exprs.go:84:3:84:12 | return statement | +| exprs.go:84:10:84:12 | Before val | exprs.go:84:10:84:12 | val | +| exprs.go:84:10:84:12 | val | exprs.go:84:10:84:12 | After val | +| exprs.go:86:2:86:6 | After panic | exprs.go:86:8:86:17 | Before "No value" | +| exprs.go:86:2:86:6 | Before panic | exprs.go:86:2:86:6 | panic | +| exprs.go:86:2:86:6 | panic | exprs.go:86:2:86:6 | After panic | +| exprs.go:86:2:86:18 | Before call to panic | exprs.go:86:2:86:6 | Before panic | +| exprs.go:86:2:86:18 | call to panic | exprs.go:81:1:87:1 | Exceptional Exit | +| exprs.go:86:2:86:18 | expression statement | exprs.go:86:2:86:18 | Before call to panic | +| exprs.go:86:8:86:17 | "No value" | exprs.go:86:8:86:17 | After "No value" | +| exprs.go:86:8:86:17 | After "No value" | exprs.go:86:2:86:18 | call to panic | +| exprs.go:86:8:86:17 | Before "No value" | exprs.go:86:8:86:17 | "No value" | +| exprs.go:89:1:89:13 | After constant declaration | exprs.go:91:1:91:25 | variable declaration | +| exprs.go:89:1:89:13 | constant declaration | exprs.go:89:7:89:13 | value declaration specifier | +| exprs.go:89:7:89:13 | After value declaration specifier | exprs.go:89:1:89:13 | After constant declaration | +| exprs.go:89:7:89:13 | assign:0 value declaration specifier | exprs.go:89:7:89:13 | After value declaration specifier | +| exprs.go:89:7:89:13 | value declaration specifier | exprs.go:89:13:89:13 | Before 1 | +| exprs.go:89:13:89:13 | 1 | exprs.go:89:13:89:13 | After 1 | +| exprs.go:89:13:89:13 | After 1 | exprs.go:89:7:89:13 | assign:0 value declaration specifier | +| exprs.go:89:13:89:13 | Before 1 | exprs.go:89:13:89:13 | 1 | +| exprs.go:91:1:91:25 | After variable declaration | exprs.go:93:1:95:1 | Before function declaration | +| exprs.go:91:1:91:25 | variable declaration | exprs.go:91:5:91:25 | value declaration specifier | +| exprs.go:91:5:91:25 | After value declaration specifier | exprs.go:91:1:91:25 | After variable declaration | +| exprs.go:91:5:91:25 | assign:0 value declaration specifier | exprs.go:91:5:91:25 | After value declaration specifier | +| exprs.go:91:5:91:25 | value declaration specifier | exprs.go:91:9:91:25 | Before slice literal | +| exprs.go:91:9:91:25 | After slice literal | exprs.go:91:5:91:25 | assign:0 value declaration specifier | +| exprs.go:91:9:91:25 | Before slice literal | exprs.go:91:9:91:25 | slice literal | +| exprs.go:91:9:91:25 | slice literal | exprs.go:91:15:91:24 | Before key-value pair | +| exprs.go:91:15:91:15 | 0 | exprs.go:91:15:91:15 | After 0 | +| exprs.go:91:15:91:15 | After 0 | exprs.go:91:19:91:21 | Before one | +| exprs.go:91:15:91:15 | Before 0 | exprs.go:91:15:91:15 | 0 | +| exprs.go:91:15:91:21 | ...+... | exprs.go:91:15:91:21 | After ...+... | +| exprs.go:91:15:91:21 | After ...+... | exprs.go:91:24:91:24 | Before 2 | +| exprs.go:91:15:91:21 | Before ...+... | exprs.go:91:15:91:15 | Before 0 | +| exprs.go:91:15:91:24 | After key-value pair | exprs.go:91:15:91:24 | lit-init key-value pair | +| exprs.go:91:15:91:24 | Before key-value pair | exprs.go:91:15:91:21 | Before ...+... | +| exprs.go:91:15:91:24 | key-value pair | exprs.go:91:15:91:24 | After key-value pair | +| exprs.go:91:15:91:24 | lit-init key-value pair | exprs.go:91:9:91:25 | After slice literal | +| exprs.go:91:19:91:21 | After one | exprs.go:91:15:91:21 | ...+... | +| exprs.go:91:19:91:21 | Before one | exprs.go:91:19:91:21 | one | +| exprs.go:91:19:91:21 | one | exprs.go:91:19:91:21 | After one | +| exprs.go:91:24:91:24 | 2 | exprs.go:91:24:91:24 | After 2 | +| exprs.go:91:24:91:24 | After 2 | exprs.go:91:15:91:24 | key-value pair | +| exprs.go:91:24:91:24 | Before 2 | exprs.go:91:24:91:24 | 2 | +| exprs.go:93:1:95:1 | After function declaration | exprs.go:0:0:0:0 | After exprs.go | +| exprs.go:93:1:95:1 | Before function declaration | exprs.go:93:1:95:1 | function declaration | +| exprs.go:93:1:95:1 | Entry | exprs.go:93:32:95:1 | block statement | +| exprs.go:93:1:95:1 | Normal Exit | exprs.go:93:1:95:1 | Exit | +| exprs.go:93:1:95:1 | function declaration | exprs.go:93:1:95:1 | After function declaration | +| exprs.go:93:32:95:1 | arg:0 block statement | exprs.go:93:32:95:1 | param-init:0 block statement | +| exprs.go:93:32:95:1 | arg:1 block statement | exprs.go:93:32:95:1 | param-init:1 block statement | +| exprs.go:93:32:95:1 | arg:2 block statement | exprs.go:93:32:95:1 | param-init:2 block statement | +| exprs.go:93:32:95:1 | block statement | exprs.go:93:32:95:1 | arg:0 block statement | +| exprs.go:93:32:95:1 | param-init:0 block statement | exprs.go:93:32:95:1 | arg:1 block statement | +| exprs.go:93:32:95:1 | param-init:1 block statement | exprs.go:93:32:95:1 | arg:2 block statement | +| exprs.go:93:32:95:1 | param-init:2 block statement | exprs.go:94:2:94:21 | Before return statement | +| exprs.go:94:2:94:21 | Before return statement | exprs.go:94:9:94:21 | ...\|\|... | +| exprs.go:94:2:94:21 | return statement | exprs.go:93:1:95:1 | Normal Exit | +| exprs.go:94:9:94:16 | (...) | exprs.go:94:9:94:16 | After (...) [false] | +| exprs.go:94:9:94:16 | (...) | exprs.go:94:9:94:16 | After (...) [true] | +| exprs.go:94:9:94:16 | After (...) [false] | exprs.go:94:21:94:21 | Before z | +| exprs.go:94:9:94:16 | After (...) [true] | exprs.go:94:9:94:21 | After ...\|\|... | +| exprs.go:94:9:94:21 | ...\|\|... | exprs.go:94:9:94:16 | (...) | +| exprs.go:94:9:94:21 | After ...\|\|... | exprs.go:94:2:94:21 | return statement | +| exprs.go:94:21:94:21 | After z | exprs.go:94:9:94:21 | After ...\|\|... | +| exprs.go:94:21:94:21 | Before z | exprs.go:94:21:94:21 | z | +| exprs.go:94:21:94:21 | z | exprs.go:94:21:94:21 | After z | +| generic.go:0:0:0:0 | After generic.go | generic.go:0:0:0:0 | Normal Exit | +| generic.go:0:0:0:0 | Entry | generic.go:0:0:0:0 | generic.go | +| generic.go:0:0:0:0 | Normal Exit | generic.go:0:0:0:0 | Exit | +| generic.go:0:0:0:0 | generic.go | generic.go:3:1:5:1 | type declaration | +| generic.go:3:1:5:1 | After type declaration | generic.go:7:1:7:55 | Before function declaration | +| generic.go:3:1:5:1 | type declaration | generic.go:3:6:5:1 | type declaration specifier | +| generic.go:3:6:5:1 | type declaration specifier | generic.go:3:1:5:1 | After type declaration | +| generic.go:7:1:7:55 | After function declaration | generic.go:9:1:12:1 | type declaration | +| generic.go:7:1:7:55 | Before function declaration | generic.go:7:1:7:55 | function declaration | +| generic.go:7:1:7:55 | Entry | generic.go:7:44:7:55 | block statement | +| generic.go:7:1:7:55 | Normal Exit | generic.go:7:1:7:55 | Exit | +| generic.go:7:1:7:55 | function declaration | generic.go:7:1:7:55 | After function declaration | +| generic.go:7:44:7:55 | arg:0 block statement | generic.go:7:44:7:55 | param-init:0 block statement | +| generic.go:7:44:7:55 | arg:-1 block statement | generic.go:7:44:7:55 | param-init:-1 block statement | +| generic.go:7:44:7:55 | block statement | generic.go:7:44:7:55 | arg:-1 block statement | +| generic.go:7:44:7:55 | param-init:0 block statement | generic.go:7:46:7:53 | Before return statement | +| generic.go:7:44:7:55 | param-init:-1 block statement | generic.go:7:44:7:55 | arg:0 block statement | +| generic.go:7:46:7:53 | Before return statement | generic.go:7:53:7:53 | Before u | +| generic.go:7:46:7:53 | return statement | generic.go:7:1:7:55 | Normal Exit | +| generic.go:7:53:7:53 | After u | generic.go:7:46:7:53 | return statement | +| generic.go:7:53:7:53 | Before u | generic.go:7:53:7:53 | u | +| generic.go:7:53:7:53 | u | generic.go:7:53:7:53 | After u | +| generic.go:9:1:12:1 | After type declaration | generic.go:14:1:14:59 | Before function declaration | +| generic.go:9:1:12:1 | type declaration | generic.go:9:6:12:1 | type declaration specifier | +| generic.go:9:6:12:1 | type declaration specifier | generic.go:9:1:12:1 | After type declaration | +| generic.go:14:1:14:59 | After function declaration | generic.go:16:1:18:1 | Before function declaration | +| generic.go:14:1:14:59 | Before function declaration | generic.go:14:1:14:59 | function declaration | +| generic.go:14:1:14:59 | Entry | generic.go:14:48:14:59 | block statement | +| generic.go:14:1:14:59 | Normal Exit | generic.go:14:1:14:59 | Exit | +| generic.go:14:1:14:59 | function declaration | generic.go:14:1:14:59 | After function declaration | +| generic.go:14:48:14:59 | arg:0 block statement | generic.go:14:48:14:59 | param-init:0 block statement | +| generic.go:14:48:14:59 | arg:-1 block statement | generic.go:14:48:14:59 | param-init:-1 block statement | +| generic.go:14:48:14:59 | block statement | generic.go:14:48:14:59 | arg:-1 block statement | +| generic.go:14:48:14:59 | param-init:0 block statement | generic.go:14:50:14:57 | Before return statement | +| generic.go:14:48:14:59 | param-init:-1 block statement | generic.go:14:48:14:59 | arg:0 block statement | +| generic.go:14:50:14:57 | Before return statement | generic.go:14:57:14:57 | Before u | +| generic.go:14:50:14:57 | return statement | generic.go:14:1:14:59 | Normal Exit | +| generic.go:14:57:14:57 | After u | generic.go:14:50:14:57 | return statement | +| generic.go:14:57:14:57 | Before u | generic.go:14:57:14:57 | u | +| generic.go:14:57:14:57 | u | generic.go:14:57:14:57 | After u | +| generic.go:16:1:18:1 | After function declaration | generic.go:20:1:22:1 | Before function declaration | +| generic.go:16:1:18:1 | Before function declaration | generic.go:16:1:18:1 | function declaration | +| generic.go:16:1:18:1 | Entry | generic.go:16:37:18:1 | block statement | +| generic.go:16:1:18:1 | Normal Exit | generic.go:16:1:18:1 | Exit | +| generic.go:16:1:18:1 | function declaration | generic.go:16:1:18:1 | After function declaration | +| generic.go:16:37:18:1 | arg:0 block statement | generic.go:16:37:18:1 | param-init:0 block statement | +| generic.go:16:37:18:1 | block statement | generic.go:16:37:18:1 | arg:0 block statement | +| generic.go:16:37:18:1 | param-init:0 block statement | generic.go:17:2:17:9 | Before return statement | +| generic.go:17:2:17:9 | Before return statement | generic.go:17:9:17:9 | Before t | +| generic.go:17:2:17:9 | return statement | generic.go:16:1:18:1 | Normal Exit | +| generic.go:17:9:17:9 | After t | generic.go:17:2:17:9 | return statement | +| generic.go:17:9:17:9 | Before t | generic.go:17:9:17:9 | t | +| generic.go:17:9:17:9 | t | generic.go:17:9:17:9 | After t | +| generic.go:20:1:22:1 | After function declaration | generic.go:24:1:35:1 | Before function declaration | +| generic.go:20:1:22:1 | Before function declaration | generic.go:20:1:22:1 | function declaration | +| generic.go:20:1:22:1 | Entry | generic.go:20:50:22:1 | block statement | +| generic.go:20:1:22:1 | Normal Exit | generic.go:20:1:22:1 | Exit | +| generic.go:20:1:22:1 | function declaration | generic.go:20:1:22:1 | After function declaration | +| generic.go:20:50:22:1 | arg:0 block statement | generic.go:20:50:22:1 | param-init:0 block statement | +| generic.go:20:50:22:1 | arg:1 block statement | generic.go:20:50:22:1 | param-init:1 block statement | +| generic.go:20:50:22:1 | block statement | generic.go:20:50:22:1 | arg:0 block statement | +| generic.go:20:50:22:1 | param-init:0 block statement | generic.go:20:50:22:1 | arg:1 block statement | +| generic.go:20:50:22:1 | param-init:1 block statement | generic.go:21:2:21:12 | Before return statement | +| generic.go:21:2:21:12 | Before return statement | generic.go:21:9:21:9 | Before s | +| generic.go:21:2:21:12 | return statement | generic.go:20:1:22:1 | Normal Exit | +| generic.go:21:9:21:9 | After s | generic.go:21:12:21:12 | Before t | +| generic.go:21:9:21:9 | Before s | generic.go:21:9:21:9 | s | +| generic.go:21:9:21:9 | s | generic.go:21:9:21:9 | After s | +| generic.go:21:12:21:12 | After t | generic.go:21:2:21:12 | return statement | +| generic.go:21:12:21:12 | Before t | generic.go:21:12:21:12 | t | +| generic.go:21:12:21:12 | t | generic.go:21:12:21:12 | After t | +| generic.go:24:1:35:1 | After function declaration | generic.go:0:0:0:0 | After generic.go | +| generic.go:24:1:35:1 | Before function declaration | generic.go:24:1:35:1 | function declaration | +| generic.go:24:1:35:1 | Entry | generic.go:24:16:35:1 | block statement | +| generic.go:24:1:35:1 | Exceptional Exit | generic.go:24:1:35:1 | Exit | +| generic.go:24:1:35:1 | Normal Exit | generic.go:24:1:35:1 | Exit | +| generic.go:24:1:35:1 | function declaration | generic.go:24:1:35:1 | After function declaration | +| generic.go:24:16:35:1 | After block statement | generic.go:24:1:35:1 | Normal Exit | +| generic.go:24:16:35:1 | block statement | generic.go:25:2:25:35 | ... := ... | +| generic.go:25:2:25:35 | ... := ... | generic.go:25:9:25:35 | Before struct literal | +| generic.go:25:2:25:35 | After ... := ... | generic.go:26:2:26:27 | ... := ... | +| generic.go:25:2:25:35 | assign:0 ... := ... | generic.go:25:2:25:35 | After ... := ... | +| generic.go:25:9:25:35 | After struct literal | generic.go:25:2:25:35 | assign:0 ... := ... | +| generic.go:25:9:25:35 | Before struct literal | generic.go:25:9:25:35 | struct literal | +| generic.go:25:9:25:35 | struct literal | generic.go:25:32:25:34 | Before "x" | +| generic.go:25:32:25:34 | "x" | generic.go:25:32:25:34 | After "x" | +| generic.go:25:32:25:34 | After "x" | generic.go:25:32:25:34 | lit-init "x" | +| generic.go:25:32:25:34 | Before "x" | generic.go:25:32:25:34 | "x" | +| generic.go:25:32:25:34 | lit-init "x" | generic.go:25:9:25:35 | After struct literal | +| generic.go:26:2:26:27 | ... := ... | generic.go:26:7:26:27 | Before call to Identity | +| generic.go:26:2:26:27 | After ... := ... | generic.go:27:2:27:48 | ... := ... | +| generic.go:26:2:26:27 | assign:0 ... := ... | generic.go:26:2:26:27 | After ... := ... | +| generic.go:26:7:26:9 | After gs1 | generic.go:26:7:26:18 | selection of Identity | +| generic.go:26:7:26:9 | Before gs1 | generic.go:26:7:26:9 | gs1 | +| generic.go:26:7:26:9 | gs1 | generic.go:26:7:26:9 | After gs1 | +| generic.go:26:7:26:18 | After selection of Identity | generic.go:26:20:26:26 | Before "hello" | +| generic.go:26:7:26:18 | Before selection of Identity | generic.go:26:7:26:9 | Before gs1 | +| generic.go:26:7:26:18 | selection of Identity | generic.go:26:7:26:18 | After selection of Identity | +| generic.go:26:7:26:27 | After call to Identity | generic.go:26:2:26:27 | assign:0 ... := ... | +| generic.go:26:7:26:27 | Before call to Identity | generic.go:26:7:26:18 | Before selection of Identity | +| generic.go:26:7:26:27 | call to Identity | generic.go:24:1:35:1 | Exceptional Exit | +| generic.go:26:7:26:27 | call to Identity | generic.go:26:7:26:27 | After call to Identity | +| generic.go:26:20:26:26 | "hello" | generic.go:26:20:26:26 | After "hello" | +| generic.go:26:20:26:26 | After "hello" | generic.go:26:7:26:27 | call to Identity | +| generic.go:26:20:26:26 | Before "hello" | generic.go:26:20:26:26 | "hello" | +| generic.go:27:2:27:48 | ... := ... | generic.go:27:9:27:48 | Before struct literal | +| generic.go:27:2:27:48 | After ... := ... | generic.go:28:2:28:22 | ... := ... | +| generic.go:27:2:27:48 | assign:0 ... := ... | generic.go:27:2:27:48 | After ... := ... | +| generic.go:27:9:27:48 | After struct literal | generic.go:27:2:27:48 | assign:0 ... := ... | +| generic.go:27:9:27:48 | Before struct literal | generic.go:27:9:27:48 | struct literal | +| generic.go:27:9:27:48 | struct literal | generic.go:27:40:27:42 | Before "y" | +| generic.go:27:40:27:42 | "y" | generic.go:27:40:27:42 | After "y" | +| generic.go:27:40:27:42 | After "y" | generic.go:27:40:27:42 | lit-init "y" | +| generic.go:27:40:27:42 | Before "y" | generic.go:27:40:27:42 | "y" | +| generic.go:27:40:27:42 | lit-init "y" | generic.go:27:45:27:47 | Before "z" | +| generic.go:27:45:27:47 | "z" | generic.go:27:45:27:47 | After "z" | +| generic.go:27:45:27:47 | After "z" | generic.go:27:45:27:47 | lit-init "z" | +| generic.go:27:45:27:47 | Before "z" | generic.go:27:45:27:47 | "z" | +| generic.go:27:45:27:47 | lit-init "z" | generic.go:27:9:27:48 | After struct literal | +| generic.go:28:2:28:22 | ... := ... | generic.go:28:7:28:22 | Before call to Identity1 | +| generic.go:28:2:28:22 | After ... := ... | generic.go:29:2:29:33 | ... := ... | +| generic.go:28:2:28:22 | assign:0 ... := ... | generic.go:28:2:28:22 | After ... := ... | +| generic.go:28:7:28:9 | After gs2 | generic.go:28:7:28:19 | selection of Identity1 | +| generic.go:28:7:28:9 | Before gs2 | generic.go:28:7:28:9 | gs2 | +| generic.go:28:7:28:9 | gs2 | generic.go:28:7:28:9 | After gs2 | +| generic.go:28:7:28:19 | After selection of Identity1 | generic.go:28:21:28:21 | Before a | +| generic.go:28:7:28:19 | Before selection of Identity1 | generic.go:28:7:28:9 | Before gs2 | +| generic.go:28:7:28:19 | selection of Identity1 | generic.go:28:7:28:19 | After selection of Identity1 | +| generic.go:28:7:28:22 | After call to Identity1 | generic.go:28:2:28:22 | assign:0 ... := ... | +| generic.go:28:7:28:22 | Before call to Identity1 | generic.go:28:7:28:19 | Before selection of Identity1 | +| generic.go:28:7:28:22 | call to Identity1 | generic.go:24:1:35:1 | Exceptional Exit | +| generic.go:28:7:28:22 | call to Identity1 | generic.go:28:7:28:22 | After call to Identity1 | +| generic.go:28:21:28:21 | After a | generic.go:28:7:28:22 | call to Identity1 | +| generic.go:28:21:28:21 | Before a | generic.go:28:21:28:21 | a | +| generic.go:28:21:28:21 | a | generic.go:28:21:28:21 | After a | +| generic.go:29:2:29:33 | ... := ... | generic.go:29:7:29:33 | Before call to genericIdentity1 | +| generic.go:29:2:29:33 | After ... := ... | generic.go:30:2:30:25 | ... := ... | +| generic.go:29:2:29:33 | assign:0 ... := ... | generic.go:29:2:29:33 | After ... := ... | +| generic.go:29:7:29:22 | After genericIdentity1 | generic.go:29:7:29:30 | generic function instantiation expression | +| generic.go:29:7:29:22 | Before genericIdentity1 | generic.go:29:7:29:22 | genericIdentity1 | +| generic.go:29:7:29:22 | genericIdentity1 | generic.go:29:7:29:22 | After genericIdentity1 | +| generic.go:29:7:29:30 | After generic function instantiation expression | generic.go:29:32:29:32 | Before b | +| generic.go:29:7:29:30 | Before generic function instantiation expression | generic.go:29:7:29:22 | Before genericIdentity1 | +| generic.go:29:7:29:30 | generic function instantiation expression | generic.go:29:7:29:30 | After generic function instantiation expression | +| generic.go:29:7:29:33 | After call to genericIdentity1 | generic.go:29:2:29:33 | assign:0 ... := ... | +| generic.go:29:7:29:33 | Before call to genericIdentity1 | generic.go:29:7:29:30 | Before generic function instantiation expression | +| generic.go:29:7:29:33 | call to genericIdentity1 | generic.go:24:1:35:1 | Exceptional Exit | +| generic.go:29:7:29:33 | call to genericIdentity1 | generic.go:29:7:29:33 | After call to genericIdentity1 | +| generic.go:29:32:29:32 | After b | generic.go:29:7:29:33 | call to genericIdentity1 | +| generic.go:29:32:29:32 | Before b | generic.go:29:32:29:32 | b | +| generic.go:29:32:29:32 | b | generic.go:29:32:29:32 | After b | +| generic.go:30:2:30:25 | ... := ... | generic.go:30:7:30:25 | Before call to genericIdentity1 | +| generic.go:30:2:30:25 | After ... := ... | generic.go:31:2:31:53 | ... := ... | +| generic.go:30:2:30:25 | assign:0 ... := ... | generic.go:30:2:30:25 | After ... := ... | +| generic.go:30:7:30:22 | After genericIdentity1 | generic.go:30:24:30:24 | Before c | +| generic.go:30:7:30:22 | Before genericIdentity1 | generic.go:30:7:30:22 | genericIdentity1 | +| generic.go:30:7:30:22 | genericIdentity1 | generic.go:30:7:30:22 | After genericIdentity1 | +| generic.go:30:7:30:25 | After call to genericIdentity1 | generic.go:30:2:30:25 | assign:0 ... := ... | +| generic.go:30:7:30:25 | Before call to genericIdentity1 | generic.go:30:7:30:22 | Before genericIdentity1 | +| generic.go:30:7:30:25 | call to genericIdentity1 | generic.go:24:1:35:1 | Exceptional Exit | +| generic.go:30:7:30:25 | call to genericIdentity1 | generic.go:30:7:30:25 | After call to genericIdentity1 | +| generic.go:30:24:30:24 | After c | generic.go:30:7:30:25 | call to genericIdentity1 | +| generic.go:30:24:30:24 | Before c | generic.go:30:24:30:24 | c | +| generic.go:30:24:30:24 | c | generic.go:30:24:30:24 | After c | +| generic.go:31:2:31:53 | ... := ... | generic.go:31:10:31:53 | Before call to genericIdentity2 | +| generic.go:31:2:31:53 | After ... := ... | generic.go:32:2:32:31 | ... := ... | +| generic.go:31:2:31:53 | assign:0 ... := ... | generic.go:31:2:31:53 | extract:1 ... := ... | +| generic.go:31:2:31:53 | assign:1 ... := ... | generic.go:31:2:31:53 | After ... := ... | +| generic.go:31:2:31:53 | extract:0 ... := ... | generic.go:31:2:31:53 | assign:0 ... := ... | +| generic.go:31:2:31:53 | extract:1 ... := ... | generic.go:31:2:31:53 | assign:1 ... := ... | +| generic.go:31:10:31:25 | After genericIdentity2 | generic.go:31:10:31:41 | generic function instantiation expression | +| generic.go:31:10:31:25 | Before genericIdentity2 | generic.go:31:10:31:25 | genericIdentity2 | +| generic.go:31:10:31:25 | genericIdentity2 | generic.go:31:10:31:25 | After genericIdentity2 | +| generic.go:31:10:31:41 | After generic function instantiation expression | generic.go:31:43:31:43 | Before d | +| generic.go:31:10:31:41 | Before generic function instantiation expression | generic.go:31:10:31:25 | Before genericIdentity2 | +| generic.go:31:10:31:41 | generic function instantiation expression | generic.go:31:10:31:41 | After generic function instantiation expression | +| generic.go:31:10:31:53 | After call to genericIdentity2 | generic.go:31:2:31:53 | extract:0 ... := ... | +| generic.go:31:10:31:53 | Before call to genericIdentity2 | generic.go:31:10:31:41 | Before generic function instantiation expression | +| generic.go:31:10:31:53 | call to genericIdentity2 | generic.go:24:1:35:1 | Exceptional Exit | +| generic.go:31:10:31:53 | call to genericIdentity2 | generic.go:31:10:31:53 | After call to genericIdentity2 | +| generic.go:31:43:31:43 | After d | generic.go:31:46:31:52 | Before "hello" | +| generic.go:31:43:31:43 | Before d | generic.go:31:43:31:43 | d | +| generic.go:31:43:31:43 | d | generic.go:31:43:31:43 | After d | +| generic.go:31:46:31:52 | "hello" | generic.go:31:46:31:52 | After "hello" | +| generic.go:31:46:31:52 | After "hello" | generic.go:31:10:31:53 | call to genericIdentity2 | +| generic.go:31:46:31:52 | Before "hello" | generic.go:31:46:31:52 | "hello" | +| generic.go:32:2:32:31 | ... := ... | generic.go:32:10:32:31 | Before call to genericIdentity2 | +| generic.go:32:2:32:31 | After ... := ... | generic.go:33:2:33:6 | ... = ... | +| generic.go:32:2:32:31 | assign:0 ... := ... | generic.go:32:2:32:31 | extract:1 ... := ... | +| generic.go:32:2:32:31 | assign:1 ... := ... | generic.go:32:2:32:31 | After ... := ... | +| generic.go:32:2:32:31 | extract:0 ... := ... | generic.go:32:2:32:31 | assign:0 ... := ... | +| generic.go:32:2:32:31 | extract:1 ... := ... | generic.go:32:2:32:31 | assign:1 ... := ... | +| generic.go:32:10:32:25 | After genericIdentity2 | generic.go:32:27:32:27 | Before e | +| generic.go:32:10:32:25 | Before genericIdentity2 | generic.go:32:10:32:25 | genericIdentity2 | +| generic.go:32:10:32:25 | genericIdentity2 | generic.go:32:10:32:25 | After genericIdentity2 | +| generic.go:32:10:32:31 | After call to genericIdentity2 | generic.go:32:2:32:31 | extract:0 ... := ... | +| generic.go:32:10:32:31 | Before call to genericIdentity2 | generic.go:32:10:32:25 | Before genericIdentity2 | +| generic.go:32:10:32:31 | call to genericIdentity2 | generic.go:24:1:35:1 | Exceptional Exit | +| generic.go:32:10:32:31 | call to genericIdentity2 | generic.go:32:10:32:31 | After call to genericIdentity2 | +| generic.go:32:27:32:27 | After e | generic.go:32:30:32:30 | Before f | +| generic.go:32:27:32:27 | Before e | generic.go:32:27:32:27 | e | +| generic.go:32:27:32:27 | e | generic.go:32:27:32:27 | After e | +| generic.go:32:30:32:30 | After f | generic.go:32:10:32:31 | call to genericIdentity2 | +| generic.go:32:30:32:30 | Before f | generic.go:32:30:32:30 | f | +| generic.go:32:30:32:30 | f | generic.go:32:30:32:30 | After f | +| generic.go:33:2:33:6 | ... = ... | generic.go:33:6:33:6 | Before g | +| generic.go:33:2:33:6 | After ... = ... | generic.go:34:2:34:6 | ... = ... | +| generic.go:33:6:33:6 | After g | generic.go:33:2:33:6 | After ... = ... | +| generic.go:33:6:33:6 | Before g | generic.go:33:6:33:6 | g | +| generic.go:33:6:33:6 | g | generic.go:33:6:33:6 | After g | +| generic.go:34:2:34:6 | ... = ... | generic.go:34:6:34:6 | Before h | +| generic.go:34:2:34:6 | After ... = ... | generic.go:24:16:35:1 | After block statement | +| generic.go:34:6:34:6 | After h | generic.go:34:2:34:6 | After ... = ... | +| generic.go:34:6:34:6 | Before h | generic.go:34:6:34:6 | h | +| generic.go:34:6:34:6 | h | generic.go:34:6:34:6 | After h | +| hello.go:0:0:0:0 | After hello.go | hello.go:0:0:0:0 | Normal Exit | +| hello.go:0:0:0:0 | Entry | hello.go:0:0:0:0 | hello.go | +| hello.go:0:0:0:0 | Normal Exit | hello.go:0:0:0:0 | Exit | +| hello.go:0:0:0:0 | hello.go | hello.go:3:1:3:12 | import declaration | +| hello.go:3:1:3:12 | After import declaration | hello.go:5:1:5:31 | constant declaration | +| hello.go:3:1:3:12 | import declaration | hello.go:3:8:3:12 | import specifier | +| hello.go:3:8:3:12 | import specifier | hello.go:3:1:3:12 | After import declaration | +| hello.go:5:1:5:31 | After constant declaration | hello.go:7:1:9:1 | Before function declaration | +| hello.go:5:1:5:31 | constant declaration | hello.go:5:7:5:31 | value declaration specifier | +| hello.go:5:7:5:31 | After value declaration specifier | hello.go:5:1:5:31 | After constant declaration | +| hello.go:5:7:5:31 | assign:0 value declaration specifier | hello.go:5:7:5:31 | After value declaration specifier | +| hello.go:5:7:5:31 | value declaration specifier | hello.go:5:17:5:31 | Before "Hello, world!" | +| hello.go:5:17:5:31 | "Hello, world!" | hello.go:5:17:5:31 | After "Hello, world!" | +| hello.go:5:17:5:31 | After "Hello, world!" | hello.go:5:7:5:31 | assign:0 value declaration specifier | +| hello.go:5:17:5:31 | Before "Hello, world!" | hello.go:5:17:5:31 | "Hello, world!" | +| hello.go:7:1:9:1 | After function declaration | hello.go:0:0:0:0 | After hello.go | +| hello.go:7:1:9:1 | Before function declaration | hello.go:7:1:9:1 | function declaration | +| hello.go:7:1:9:1 | Entry | hello.go:7:17:9:1 | block statement | +| hello.go:7:1:9:1 | Exceptional Exit | hello.go:7:1:9:1 | Exit | +| hello.go:7:1:9:1 | Normal Exit | hello.go:7:1:9:1 | Exit | +| hello.go:7:1:9:1 | function declaration | hello.go:7:1:9:1 | After function declaration | +| hello.go:7:17:9:1 | After block statement | hello.go:7:1:9:1 | Normal Exit | +| hello.go:7:17:9:1 | block statement | hello.go:8:2:8:21 | expression statement | +| hello.go:8:2:8:12 | After selection of Println | hello.go:8:14:8:20 | Before message | +| hello.go:8:2:8:12 | Before selection of Println | hello.go:8:2:8:12 | selection of Println | +| hello.go:8:2:8:12 | selection of Println | hello.go:8:2:8:12 | After selection of Println | +| hello.go:8:2:8:21 | After call to Println | hello.go:8:2:8:21 | After expression statement | +| hello.go:8:2:8:21 | After expression statement | hello.go:7:17:9:1 | After block statement | +| hello.go:8:2:8:21 | Before call to Println | hello.go:8:2:8:12 | Before selection of Println | +| hello.go:8:2:8:21 | call to Println | hello.go:7:1:9:1 | Exceptional Exit | +| hello.go:8:2:8:21 | call to Println | hello.go:8:2:8:21 | After call to Println | +| hello.go:8:2:8:21 | expression statement | hello.go:8:2:8:21 | Before call to Println | +| hello.go:8:14:8:20 | After message | hello.go:8:2:8:21 | call to Println | +| hello.go:8:14:8:20 | Before message | hello.go:8:14:8:20 | message | +| hello.go:8:14:8:20 | message | hello.go:8:14:8:20 | After message | +| main.go:0:0:0:0 | After main.go | main.go:0:0:0:0 | Normal Exit | +| main.go:0:0:0:0 | Entry | main.go:0:0:0:0 | main.go | +| main.go:0:0:0:0 | Normal Exit | main.go:0:0:0:0 | Exit | +| main.go:0:0:0:0 | main.go | main.go:3:1:6:1 | import declaration | +| main.go:3:1:6:1 | After import declaration | main.go:8:1:10:1 | Before function declaration | +| main.go:3:1:6:1 | import declaration | main.go:4:2:4:6 | import specifier | +| main.go:4:2:4:6 | import specifier | main.go:5:2:5:12 | import specifier | +| main.go:5:2:5:12 | import specifier | main.go:3:1:6:1 | After import declaration | +| main.go:8:1:10:1 | After function declaration | main.go:12:1:24:1 | Before function declaration | +| main.go:8:1:10:1 | Before function declaration | main.go:8:1:10:1 | function declaration | +| main.go:8:1:10:1 | Entry | main.go:8:18:10:1 | block statement | +| main.go:8:1:10:1 | Exceptional Exit | main.go:8:1:10:1 | Exit | +| main.go:8:1:10:1 | Normal Exit | main.go:8:1:10:1 | Exit | +| main.go:8:1:10:1 | function declaration | main.go:8:1:10:1 | After function declaration | +| main.go:8:18:10:1 | block statement | main.go:9:2:9:29 | Before return statement | +| main.go:9:2:9:29 | Before return statement | main.go:9:9:9:29 | Before ...>=... | +| main.go:9:2:9:29 | return statement | main.go:8:1:10:1 | Normal Exit | +| main.go:9:9:9:20 | After selection of Float64 | main.go:9:9:9:22 | call to Float64 | +| main.go:9:9:9:20 | Before selection of Float64 | main.go:9:9:9:20 | selection of Float64 | +| main.go:9:9:9:20 | selection of Float64 | main.go:9:9:9:20 | After selection of Float64 | +| main.go:9:9:9:22 | After call to Float64 | main.go:9:27:9:29 | Before 0.5 | +| main.go:9:9:9:22 | Before call to Float64 | main.go:9:9:9:20 | Before selection of Float64 | +| main.go:9:9:9:22 | call to Float64 | main.go:8:1:10:1 | Exceptional Exit | +| main.go:9:9:9:22 | call to Float64 | main.go:9:9:9:22 | After call to Float64 | +| main.go:9:9:9:29 | ...>=... | main.go:9:9:9:29 | After ...>=... | +| main.go:9:9:9:29 | After ...>=... | main.go:9:2:9:29 | return statement | +| main.go:9:9:9:29 | Before ...>=... | main.go:9:9:9:22 | Before call to Float64 | +| main.go:9:27:9:29 | 0.5 | main.go:9:27:9:29 | After 0.5 | +| main.go:9:27:9:29 | After 0.5 | main.go:9:9:9:29 | ...>=... | +| main.go:9:27:9:29 | Before 0.5 | main.go:9:27:9:29 | 0.5 | +| main.go:12:1:24:1 | After function declaration | main.go:26:1:32:1 | Before function declaration | +| main.go:12:1:24:1 | Before function declaration | main.go:12:1:24:1 | function declaration | +| main.go:12:1:24:1 | Entry | main.go:12:13:24:1 | block statement | +| main.go:12:1:24:1 | Exceptional Exit | main.go:12:1:24:1 | Exit | +| main.go:12:1:24:1 | Normal Exit | main.go:12:1:24:1 | Exit | +| main.go:12:1:24:1 | function declaration | main.go:12:1:24:1 | After function declaration | +| main.go:12:13:24:1 | After block statement | main.go:12:1:24:1 | Normal Exit | +| main.go:12:13:24:1 | block statement | main.go:13:2:13:10 | declaration statement | +| main.go:13:2:13:10 | After declaration statement | main.go:14:2:14:8 | ... := ... | +| main.go:13:2:13:10 | After variable declaration | main.go:13:2:13:10 | After declaration statement | +| main.go:13:2:13:10 | declaration statement | main.go:13:2:13:10 | variable declaration | +| main.go:13:2:13:10 | variable declaration | main.go:13:6:13:10 | value declaration specifier | +| main.go:13:6:13:10 | After value declaration specifier | main.go:13:2:13:10 | After variable declaration | +| main.go:13:6:13:10 | assign:0 value declaration specifier | main.go:13:6:13:10 | After value declaration specifier | +| main.go:13:6:13:10 | value declaration specifier | main.go:13:6:13:10 | zero-init:0 value declaration specifier | +| main.go:13:6:13:10 | zero-init:0 value declaration specifier | main.go:13:6:13:10 | assign:0 value declaration specifier | +| main.go:14:2:14:8 | ... := ... | main.go:14:7:14:8 | Before 23 | +| main.go:14:2:14:8 | After ... := ... | main.go:15:2:15:16 | expression statement | +| main.go:14:2:14:8 | assign:0 ... := ... | main.go:14:2:14:8 | After ... := ... | +| main.go:14:7:14:8 | 23 | main.go:14:7:14:8 | After 23 | +| main.go:14:7:14:8 | After 23 | main.go:14:2:14:8 | assign:0 ... := ... | +| main.go:14:7:14:8 | Before 23 | main.go:14:7:14:8 | 23 | +| main.go:15:2:15:10 | After selection of Print | main.go:15:12:15:12 | Before x | +| main.go:15:2:15:10 | Before selection of Print | main.go:15:2:15:10 | selection of Print | +| main.go:15:2:15:10 | selection of Print | main.go:15:2:15:10 | After selection of Print | +| main.go:15:2:15:16 | After call to Print | main.go:15:2:15:16 | After expression statement | +| main.go:15:2:15:16 | After expression statement | main.go:16:2:18:2 | if statement | +| main.go:15:2:15:16 | Before call to Print | main.go:15:2:15:10 | Before selection of Print | +| main.go:15:2:15:16 | call to Print | main.go:12:1:24:1 | Exceptional Exit | +| main.go:15:2:15:16 | call to Print | main.go:15:2:15:16 | After call to Print | +| main.go:15:2:15:16 | expression statement | main.go:15:2:15:16 | Before call to Print | +| main.go:15:12:15:12 | After x | main.go:15:15:15:15 | Before y | +| main.go:15:12:15:12 | Before x | main.go:15:12:15:12 | x | +| main.go:15:12:15:12 | x | main.go:15:12:15:12 | After x | +| main.go:15:15:15:15 | After y | main.go:15:2:15:16 | call to Print | +| main.go:15:15:15:15 | Before y | main.go:15:15:15:15 | y | +| main.go:15:15:15:15 | y | main.go:15:15:15:15 | After y | +| main.go:16:2:18:2 | After if statement | main.go:19:2:19:16 | expression statement | +| main.go:16:2:18:2 | if statement | main.go:16:5:16:10 | Before call to cond | +| main.go:16:5:16:8 | After cond | main.go:16:5:16:10 | call to cond | +| main.go:16:5:16:8 | Before cond | main.go:16:5:16:8 | cond | +| main.go:16:5:16:8 | cond | main.go:16:5:16:8 | After cond | +| main.go:16:5:16:10 | After call to cond [false] | main.go:16:2:18:2 | After if statement | +| main.go:16:5:16:10 | After call to cond [true] | main.go:16:12:18:2 | block statement | +| main.go:16:5:16:10 | Before call to cond | main.go:16:5:16:8 | Before cond | +| main.go:16:5:16:10 | call to cond | main.go:12:1:24:1 | Exceptional Exit | +| main.go:16:5:16:10 | call to cond | main.go:16:5:16:10 | After call to cond [false] | +| main.go:16:5:16:10 | call to cond | main.go:16:5:16:10 | After call to cond [true] | +| main.go:16:12:18:2 | After block statement | main.go:16:2:18:2 | After if statement | +| main.go:16:12:18:2 | block statement | main.go:17:3:17:9 | ... += ... | +| main.go:17:3:17:3 | After y | main.go:17:8:17:9 | Before 19 | +| main.go:17:3:17:3 | Before y | main.go:17:3:17:3 | y | +| main.go:17:3:17:3 | y | main.go:17:3:17:3 | After y | +| main.go:17:3:17:9 | ... += ... | main.go:17:3:17:3 | Before y | +| main.go:17:3:17:9 | After ... += ... | main.go:16:12:18:2 | After block statement | +| main.go:17:3:17:9 | assign:0 ... += ... | main.go:17:3:17:9 | After ... += ... | +| main.go:17:3:17:9 | compound-rhs ... += ... | main.go:17:3:17:9 | assign:0 ... += ... | +| main.go:17:8:17:9 | 19 | main.go:17:8:17:9 | After 19 | +| main.go:17:8:17:9 | After 19 | main.go:17:3:17:9 | compound-rhs ... += ... | +| main.go:17:8:17:9 | Before 19 | main.go:17:8:17:9 | 19 | +| main.go:19:2:19:10 | After selection of Print | main.go:19:12:19:12 | Before x | +| main.go:19:2:19:10 | Before selection of Print | main.go:19:2:19:10 | selection of Print | +| main.go:19:2:19:10 | selection of Print | main.go:19:2:19:10 | After selection of Print | +| main.go:19:2:19:16 | After call to Print | main.go:19:2:19:16 | After expression statement | +| main.go:19:2:19:16 | After expression statement | main.go:20:2:22:2 | if statement | +| main.go:19:2:19:16 | Before call to Print | main.go:19:2:19:10 | Before selection of Print | +| main.go:19:2:19:16 | call to Print | main.go:12:1:24:1 | Exceptional Exit | +| main.go:19:2:19:16 | call to Print | main.go:19:2:19:16 | After call to Print | +| main.go:19:2:19:16 | expression statement | main.go:19:2:19:16 | Before call to Print | +| main.go:19:12:19:12 | After x | main.go:19:15:19:15 | Before y | +| main.go:19:12:19:12 | Before x | main.go:19:12:19:12 | x | +| main.go:19:12:19:12 | x | main.go:19:12:19:12 | After x | +| main.go:19:15:19:15 | After y | main.go:19:2:19:16 | call to Print | +| main.go:19:15:19:15 | Before y | main.go:19:15:19:15 | y | +| main.go:19:15:19:15 | y | main.go:19:15:19:15 | After y | +| main.go:20:2:22:2 | After if statement | main.go:23:2:23:16 | expression statement | +| main.go:20:2:22:2 | if statement | main.go:20:5:20:10 | Before call to cond | +| main.go:20:5:20:8 | After cond | main.go:20:5:20:10 | call to cond | +| main.go:20:5:20:8 | Before cond | main.go:20:5:20:8 | cond | +| main.go:20:5:20:8 | cond | main.go:20:5:20:8 | After cond | +| main.go:20:5:20:10 | After call to cond [false] | main.go:20:2:22:2 | After if statement | +| main.go:20:5:20:10 | After call to cond [true] | main.go:20:12:22:2 | block statement | +| main.go:20:5:20:10 | Before call to cond | main.go:20:5:20:8 | Before cond | +| main.go:20:5:20:10 | call to cond | main.go:12:1:24:1 | Exceptional Exit | +| main.go:20:5:20:10 | call to cond | main.go:20:5:20:10 | After call to cond [false] | +| main.go:20:5:20:10 | call to cond | main.go:20:5:20:10 | After call to cond [true] | +| main.go:20:12:22:2 | After block statement | main.go:20:2:22:2 | After if statement | +| main.go:20:12:22:2 | block statement | main.go:21:3:21:7 | ... = ... | +| main.go:21:3:21:7 | ... = ... | main.go:21:7:21:7 | Before y | +| main.go:21:3:21:7 | After ... = ... | main.go:20:12:22:2 | After block statement | +| main.go:21:3:21:7 | assign:0 ... = ... | main.go:21:3:21:7 | After ... = ... | +| main.go:21:7:21:7 | After y | main.go:21:3:21:7 | assign:0 ... = ... | +| main.go:21:7:21:7 | Before y | main.go:21:7:21:7 | y | +| main.go:21:7:21:7 | y | main.go:21:7:21:7 | After y | +| main.go:23:2:23:10 | After selection of Print | main.go:23:12:23:12 | Before x | +| main.go:23:2:23:10 | Before selection of Print | main.go:23:2:23:10 | selection of Print | +| main.go:23:2:23:10 | selection of Print | main.go:23:2:23:10 | After selection of Print | +| main.go:23:2:23:16 | After call to Print | main.go:23:2:23:16 | After expression statement | +| main.go:23:2:23:16 | After expression statement | main.go:12:13:24:1 | After block statement | +| main.go:23:2:23:16 | Before call to Print | main.go:23:2:23:10 | Before selection of Print | +| main.go:23:2:23:16 | call to Print | main.go:12:1:24:1 | Exceptional Exit | +| main.go:23:2:23:16 | call to Print | main.go:23:2:23:16 | After call to Print | +| main.go:23:2:23:16 | expression statement | main.go:23:2:23:16 | Before call to Print | +| main.go:23:12:23:12 | After x | main.go:23:15:23:15 | Before y | +| main.go:23:12:23:12 | Before x | main.go:23:12:23:12 | x | +| main.go:23:12:23:12 | x | main.go:23:12:23:12 | After x | +| main.go:23:15:23:15 | After y | main.go:23:2:23:16 | call to Print | +| main.go:23:15:23:15 | Before y | main.go:23:15:23:15 | y | +| main.go:23:15:23:15 | y | main.go:23:15:23:15 | After y | +| main.go:26:1:32:1 | After function declaration | main.go:34:1:36:1 | Before function declaration | +| main.go:26:1:32:1 | Before function declaration | main.go:26:1:32:1 | function declaration | +| main.go:26:1:32:1 | Entry | main.go:26:28:32:1 | block statement | +| main.go:26:1:32:1 | Exceptional Exit | main.go:26:1:32:1 | Exit | +| main.go:26:1:32:1 | Normal Exit | main.go:26:1:32:1 | Exit | +| main.go:26:1:32:1 | function declaration | main.go:26:1:32:1 | After function declaration | +| main.go:26:28:32:1 | arg:0 block statement | main.go:26:28:32:1 | param-init:0 block statement | +| main.go:26:28:32:1 | block statement | main.go:26:28:32:1 | arg:0 block statement | +| main.go:26:28:32:1 | param-init:0 block statement | main.go:27:2:27:13 | ... := ... | +| main.go:27:2:27:13 | ... := ... | main.go:27:10:27:10 | Before x | +| main.go:27:2:27:13 | After ... := ... | main.go:28:2:30:2 | if statement | +| main.go:27:2:27:13 | assign:0 ... := ... | main.go:27:2:27:13 | assign:1 ... := ... | +| main.go:27:2:27:13 | assign:1 ... := ... | main.go:27:2:27:13 | After ... := ... | +| main.go:27:10:27:10 | After x | main.go:27:13:27:13 | Before 0 | +| main.go:27:10:27:10 | Before x | main.go:27:10:27:10 | x | +| main.go:27:10:27:10 | x | main.go:27:10:27:10 | After x | +| main.go:27:13:27:13 | 0 | main.go:27:13:27:13 | After 0 | +| main.go:27:13:27:13 | After 0 | main.go:27:2:27:13 | assign:0 ... := ... | +| main.go:27:13:27:13 | Before 0 | main.go:27:13:27:13 | 0 | +| main.go:28:2:30:2 | After if statement | main.go:31:2:31:12 | Before return statement | +| main.go:28:2:30:2 | if statement | main.go:28:5:28:10 | Before call to cond | +| main.go:28:5:28:8 | After cond | main.go:28:5:28:10 | call to cond | +| main.go:28:5:28:8 | Before cond | main.go:28:5:28:8 | cond | +| main.go:28:5:28:8 | cond | main.go:28:5:28:8 | After cond | +| main.go:28:5:28:10 | After call to cond [false] | main.go:28:2:30:2 | After if statement | +| main.go:28:5:28:10 | After call to cond [true] | main.go:28:12:30:2 | block statement | +| main.go:28:5:28:10 | Before call to cond | main.go:28:5:28:8 | Before cond | +| main.go:28:5:28:10 | call to cond | main.go:26:1:32:1 | Exceptional Exit | +| main.go:28:5:28:10 | call to cond | main.go:28:5:28:10 | After call to cond [false] | +| main.go:28:5:28:10 | call to cond | main.go:28:5:28:10 | After call to cond [true] | +| main.go:28:12:30:2 | After block statement | main.go:28:2:30:2 | After if statement | +| main.go:28:12:30:2 | block statement | main.go:29:3:29:13 | ... = ... | +| main.go:29:3:29:13 | ... = ... | main.go:29:10:29:10 | Before b | +| main.go:29:3:29:13 | After ... = ... | main.go:28:12:30:2 | After block statement | +| main.go:29:3:29:13 | assign:0 ... = ... | main.go:29:3:29:13 | assign:1 ... = ... | +| main.go:29:3:29:13 | assign:1 ... = ... | main.go:29:3:29:13 | After ... = ... | +| main.go:29:10:29:10 | After b | main.go:29:13:29:13 | Before a | +| main.go:29:10:29:10 | Before b | main.go:29:10:29:10 | b | +| main.go:29:10:29:10 | b | main.go:29:10:29:10 | After b | +| main.go:29:13:29:13 | After a | main.go:29:3:29:13 | assign:0 ... = ... | +| main.go:29:13:29:13 | Before a | main.go:29:13:29:13 | a | +| main.go:29:13:29:13 | a | main.go:29:13:29:13 | After a | +| main.go:31:2:31:12 | Before return statement | main.go:31:9:31:9 | Before a | +| main.go:31:2:31:12 | return statement | main.go:26:1:32:1 | Normal Exit | +| main.go:31:9:31:9 | After a | main.go:31:12:31:12 | Before b | +| main.go:31:9:31:9 | Before a | main.go:31:9:31:9 | a | +| main.go:31:9:31:9 | a | main.go:31:9:31:9 | After a | +| main.go:31:12:31:12 | After b | main.go:31:2:31:12 | return statement | +| main.go:31:12:31:12 | Before b | main.go:31:12:31:12 | b | +| main.go:31:12:31:12 | b | main.go:31:12:31:12 | After b | +| main.go:34:1:36:1 | After function declaration | main.go:38:1:45:1 | Before function declaration | +| main.go:34:1:36:1 | Before function declaration | main.go:34:1:36:1 | function declaration | +| main.go:34:1:36:1 | Entry | main.go:34:19:36:1 | block statement | +| main.go:34:1:36:1 | Normal Exit | main.go:34:1:36:1 | Exit | +| main.go:34:1:36:1 | function declaration | main.go:34:1:36:1 | After function declaration | +| main.go:34:19:36:1 | After block statement | main.go:34:1:36:1 | Normal Exit | +| main.go:34:19:36:1 | arg:0 block statement | main.go:34:19:36:1 | param-init:0 block statement | +| main.go:34:19:36:1 | block statement | main.go:34:19:36:1 | arg:0 block statement | +| main.go:34:19:36:1 | param-init:0 block statement | main.go:35:2:35:9 | ... += ... | +| main.go:35:2:35:3 | After star expression | main.go:35:8:35:9 | Before 19 | +| main.go:35:2:35:3 | Before star expression | main.go:35:3:35:3 | Before x | +| main.go:35:2:35:3 | star expression | main.go:35:2:35:3 | After star expression | +| main.go:35:2:35:9 | ... += ... | main.go:35:2:35:3 | Before star expression | +| main.go:35:2:35:9 | After ... += ... | main.go:34:19:36:1 | After block statement | +| main.go:35:2:35:9 | assign:0 ... += ... | main.go:35:2:35:9 | After ... += ... | +| main.go:35:2:35:9 | compound-rhs ... += ... | main.go:35:2:35:9 | assign:0 ... += ... | +| main.go:35:3:35:3 | After x | main.go:35:2:35:3 | star expression | +| main.go:35:3:35:3 | Before x | main.go:35:3:35:3 | x | +| main.go:35:3:35:3 | x | main.go:35:3:35:3 | After x | +| main.go:35:8:35:9 | 19 | main.go:35:8:35:9 | After 19 | +| main.go:35:8:35:9 | After 19 | main.go:35:2:35:9 | compound-rhs ... += ... | +| main.go:35:8:35:9 | Before 19 | main.go:35:8:35:9 | 19 | +| main.go:38:1:45:1 | After function declaration | main.go:47:1:50:1 | Before function declaration | +| main.go:38:1:45:1 | Before function declaration | main.go:38:1:45:1 | function declaration | +| main.go:38:1:45:1 | Entry | main.go:38:12:45:1 | block statement | +| main.go:38:1:45:1 | Exceptional Exit | main.go:38:1:45:1 | Exit | +| main.go:38:1:45:1 | Normal Exit | main.go:38:1:45:1 | Exit | +| main.go:38:1:45:1 | function declaration | main.go:38:1:45:1 | After function declaration | +| main.go:38:12:45:1 | After block statement | main.go:38:1:45:1 | Normal Exit | +| main.go:38:12:45:1 | block statement | main.go:39:2:39:8 | ... := ... | +| main.go:39:2:39:8 | ... := ... | main.go:39:7:39:8 | Before 23 | +| main.go:39:2:39:8 | After ... := ... | main.go:40:2:40:10 | ... := ... | +| main.go:39:2:39:8 | assign:0 ... := ... | main.go:39:2:39:8 | After ... := ... | +| main.go:39:7:39:8 | 23 | main.go:39:7:39:8 | After 23 | +| main.go:39:7:39:8 | After 23 | main.go:39:2:39:8 | assign:0 ... := ... | +| main.go:39:7:39:8 | Before 23 | main.go:39:7:39:8 | 23 | +| main.go:40:2:40:10 | ... := ... | main.go:40:9:40:10 | Before &... | +| main.go:40:2:40:10 | After ... := ... | main.go:41:2:43:2 | if statement | +| main.go:40:2:40:10 | assign:0 ... := ... | main.go:40:2:40:10 | After ... := ... | +| main.go:40:9:40:10 | &... | main.go:40:9:40:10 | After &... | +| main.go:40:9:40:10 | After &... | main.go:40:2:40:10 | assign:0 ... := ... | +| main.go:40:9:40:10 | Before &... | main.go:40:10:40:10 | Before x | +| main.go:40:10:40:10 | After x | main.go:40:9:40:10 | &... | +| main.go:40:10:40:10 | Before x | main.go:40:10:40:10 | x | +| main.go:40:10:40:10 | x | main.go:40:10:40:10 | After x | +| main.go:41:2:43:2 | After if statement | main.go:44:2:44:13 | expression statement | +| main.go:41:2:43:2 | if statement | main.go:41:5:41:10 | Before call to cond | +| main.go:41:5:41:8 | After cond | main.go:41:5:41:10 | call to cond | +| main.go:41:5:41:8 | Before cond | main.go:41:5:41:8 | cond | +| main.go:41:5:41:8 | cond | main.go:41:5:41:8 | After cond | +| main.go:41:5:41:10 | After call to cond [false] | main.go:41:2:43:2 | After if statement | +| main.go:41:5:41:10 | After call to cond [true] | main.go:41:12:43:2 | block statement | +| main.go:41:5:41:10 | Before call to cond | main.go:41:5:41:8 | Before cond | +| main.go:41:5:41:10 | call to cond | main.go:38:1:45:1 | Exceptional Exit | +| main.go:41:5:41:10 | call to cond | main.go:41:5:41:10 | After call to cond [false] | +| main.go:41:5:41:10 | call to cond | main.go:41:5:41:10 | After call to cond [true] | +| main.go:41:12:43:2 | After block statement | main.go:41:2:43:2 | After if statement | +| main.go:41:12:43:2 | block statement | main.go:42:3:42:11 | expression statement | +| main.go:42:3:42:6 | After bump | main.go:42:8:42:10 | Before ptr | +| main.go:42:3:42:6 | Before bump | main.go:42:3:42:6 | bump | +| main.go:42:3:42:6 | bump | main.go:42:3:42:6 | After bump | +| main.go:42:3:42:11 | After call to bump | main.go:42:3:42:11 | After expression statement | +| main.go:42:3:42:11 | After expression statement | main.go:41:12:43:2 | After block statement | +| main.go:42:3:42:11 | Before call to bump | main.go:42:3:42:6 | Before bump | +| main.go:42:3:42:11 | call to bump | main.go:38:1:45:1 | Exceptional Exit | +| main.go:42:3:42:11 | call to bump | main.go:42:3:42:11 | After call to bump | +| main.go:42:3:42:11 | expression statement | main.go:42:3:42:11 | Before call to bump | +| main.go:42:8:42:10 | After ptr | main.go:42:3:42:11 | call to bump | +| main.go:42:8:42:10 | Before ptr | main.go:42:8:42:10 | ptr | +| main.go:42:8:42:10 | ptr | main.go:42:8:42:10 | After ptr | +| main.go:44:2:44:10 | After selection of Print | main.go:44:12:44:12 | Before x | +| main.go:44:2:44:10 | Before selection of Print | main.go:44:2:44:10 | selection of Print | +| main.go:44:2:44:10 | selection of Print | main.go:44:2:44:10 | After selection of Print | +| main.go:44:2:44:13 | After call to Print | main.go:44:2:44:13 | After expression statement | +| main.go:44:2:44:13 | After expression statement | main.go:38:12:45:1 | After block statement | +| main.go:44:2:44:13 | Before call to Print | main.go:44:2:44:10 | Before selection of Print | +| main.go:44:2:44:13 | call to Print | main.go:38:1:45:1 | Exceptional Exit | +| main.go:44:2:44:13 | call to Print | main.go:44:2:44:13 | After call to Print | +| main.go:44:2:44:13 | expression statement | main.go:44:2:44:13 | Before call to Print | +| main.go:44:12:44:12 | After x | main.go:44:2:44:13 | call to Print | +| main.go:44:12:44:12 | Before x | main.go:44:12:44:12 | x | +| main.go:44:12:44:12 | x | main.go:44:12:44:12 | After x | +| main.go:47:1:50:1 | After function declaration | main.go:52:1:54:1 | Before function declaration | +| main.go:47:1:50:1 | Before function declaration | main.go:47:1:50:1 | function declaration | +| main.go:47:1:50:1 | Entry | main.go:47:25:50:1 | block statement | +| main.go:47:1:50:1 | Normal Exit | main.go:47:1:50:1 | Exit | +| main.go:47:1:50:1 | function declaration | main.go:47:1:50:1 | After function declaration | +| main.go:47:25:50:1 | block statement | main.go:47:25:50:1 | result-zero-init:0 block statement | +| main.go:47:25:50:1 | result-init:0 block statement | main.go:48:2:48:12 | ... = ... | +| main.go:47:25:50:1 | result-zero-init:0 block statement | main.go:47:25:50:1 | result-init:0 block statement | +| main.go:48:2:48:12 | ... = ... | main.go:48:11:48:12 | Before 42 | +| main.go:48:2:48:12 | After ... = ... | main.go:49:2:49:7 | Before return statement | +| main.go:48:2:48:12 | assign:0 ... = ... | main.go:48:2:48:12 | After ... = ... | +| main.go:48:11:48:12 | 42 | main.go:48:11:48:12 | After 42 | +| main.go:48:11:48:12 | After 42 | main.go:48:2:48:12 | assign:0 ... = ... | +| main.go:48:11:48:12 | Before 42 | main.go:48:11:48:12 | 42 | +| main.go:49:2:49:7 | Before return statement | main.go:49:2:49:7 | return statement | +| main.go:49:2:49:7 | return statement | main.go:47:1:50:1 | Normal Exit | +| main.go:49:2:49:7 | return statement | main.go:47:25:50:1 | result-read:0 block statement | +| main.go:52:1:54:1 | After function declaration | main.go:56:1:64:1 | Before function declaration | +| main.go:52:1:54:1 | Before function declaration | main.go:52:1:54:1 | function declaration | +| main.go:52:1:54:1 | Entry | main.go:52:26:54:1 | block statement | +| main.go:52:1:54:1 | Normal Exit | main.go:52:1:54:1 | Exit | +| main.go:52:1:54:1 | function declaration | main.go:52:1:54:1 | After function declaration | +| main.go:52:26:54:1 | block statement | main.go:52:26:54:1 | result-zero-init:0 block statement | +| main.go:52:26:54:1 | result-init:0 block statement | main.go:53:2:53:7 | Before return statement | +| main.go:52:26:54:1 | result-zero-init:0 block statement | main.go:52:26:54:1 | result-init:0 block statement | +| main.go:53:2:53:7 | Before return statement | main.go:53:2:53:7 | return statement | +| main.go:53:2:53:7 | return statement | main.go:52:1:54:1 | Normal Exit | +| main.go:53:2:53:7 | return statement | main.go:52:26:54:1 | result-read:0 block statement | +| main.go:56:1:64:1 | After function declaration | main.go:66:1:90:1 | Before function declaration | +| main.go:56:1:64:1 | Before function declaration | main.go:56:1:64:1 | function declaration | +| main.go:56:1:64:1 | Entry | main.go:56:38:64:1 | block statement | +| main.go:56:1:64:1 | Normal Exit | main.go:56:1:64:1 | Exit | +| main.go:56:1:64:1 | function declaration | main.go:56:1:64:1 | After function declaration | +| main.go:56:38:64:1 | arg:0 block statement | main.go:56:38:64:1 | param-init:0 block statement | +| main.go:56:38:64:1 | block statement | main.go:56:38:64:1 | arg:0 block statement | +| main.go:56:38:64:1 | param-init:0 block statement | main.go:56:38:64:1 | result-zero-init:0 block statement | +| main.go:56:38:64:1 | result-init:0 block statement | main.go:57:2:57:11 | ... = ... | +| main.go:56:38:64:1 | result-zero-init:0 block statement | main.go:56:38:64:1 | result-init:0 block statement | +| main.go:57:2:57:11 | ... = ... | main.go:57:11:57:11 | Before 0 | +| main.go:57:2:57:11 | After ... = ... | main.go:58:2:62:2 | if statement | +| main.go:57:2:57:11 | assign:0 ... = ... | main.go:57:2:57:11 | After ... = ... | +| main.go:57:11:57:11 | 0 | main.go:57:11:57:11 | After 0 | +| main.go:57:11:57:11 | After 0 | main.go:57:2:57:11 | assign:0 ... = ... | +| main.go:57:11:57:11 | Before 0 | main.go:57:11:57:11 | 0 | +| main.go:58:2:62:2 | After if statement | main.go:63:2:63:7 | Before return statement | +| main.go:58:2:62:2 | if statement | main.go:58:5:58:17 | Before ...==... | +| main.go:58:5:58:12 | After selector | main.go:58:17:58:17 | Before 1 | +| main.go:58:5:58:12 | Before selector | main.go:58:5:58:12 | selector | +| main.go:58:5:58:12 | selector | main.go:58:5:58:12 | After selector | +| main.go:58:5:58:17 | ...==... | main.go:58:5:58:17 | After ...==... [false] | +| main.go:58:5:58:17 | ...==... | main.go:58:5:58:17 | After ...==... [true] | +| main.go:58:5:58:17 | After ...==... [false] | main.go:60:9:62:2 | block statement | +| main.go:58:5:58:17 | After ...==... [true] | main.go:58:19:60:2 | block statement | +| main.go:58:5:58:17 | Before ...==... | main.go:58:5:58:12 | Before selector | +| main.go:58:17:58:17 | 1 | main.go:58:17:58:17 | After 1 | +| main.go:58:17:58:17 | After 1 | main.go:58:5:58:17 | ...==... | +| main.go:58:17:58:17 | Before 1 | main.go:58:17:58:17 | 1 | +| main.go:58:19:60:2 | block statement | main.go:59:3:59:10 | Before return statement | +| main.go:59:3:59:10 | Before return statement | main.go:59:10:59:10 | Before 1 | +| main.go:59:3:59:10 | result-write:0 return statement | main.go:59:3:59:10 | return statement | +| main.go:59:3:59:10 | return statement | main.go:56:1:64:1 | Normal Exit | +| main.go:59:3:59:10 | return statement | main.go:56:38:64:1 | result-read:0 block statement | +| main.go:59:10:59:10 | 1 | main.go:59:10:59:10 | After 1 | +| main.go:59:10:59:10 | After 1 | main.go:59:3:59:10 | result-write:0 return statement | +| main.go:59:10:59:10 | Before 1 | main.go:59:10:59:10 | 1 | +| main.go:60:9:62:2 | After block statement | main.go:58:2:62:2 | After if statement | +| main.go:60:9:62:2 | block statement | main.go:61:3:61:12 | ... = ... | +| main.go:61:3:61:12 | ... = ... | main.go:61:12:61:12 | Before 2 | +| main.go:61:3:61:12 | After ... = ... | main.go:60:9:62:2 | After block statement | +| main.go:61:3:61:12 | assign:0 ... = ... | main.go:61:3:61:12 | After ... = ... | +| main.go:61:12:61:12 | 2 | main.go:61:12:61:12 | After 2 | +| main.go:61:12:61:12 | After 2 | main.go:61:3:61:12 | assign:0 ... = ... | +| main.go:61:12:61:12 | Before 2 | main.go:61:12:61:12 | 2 | +| main.go:63:2:63:7 | Before return statement | main.go:63:2:63:7 | return statement | +| main.go:63:2:63:7 | return statement | main.go:56:1:64:1 | Normal Exit | +| main.go:63:2:63:7 | return statement | main.go:56:38:64:1 | result-read:0 block statement | +| main.go:66:1:90:1 | After function declaration | main.go:92:1:96:1 | Before function declaration | +| main.go:66:1:90:1 | Before function declaration | main.go:66:1:90:1 | function declaration | +| main.go:66:1:90:1 | Entry | main.go:66:14:90:1 | block statement | +| main.go:66:1:90:1 | Exceptional Exit | main.go:66:1:90:1 | Exit | +| main.go:66:1:90:1 | Normal Exit | main.go:66:1:90:1 | Exit | +| main.go:66:1:90:1 | function declaration | main.go:66:1:90:1 | After function declaration | +| main.go:66:14:90:1 | After block statement | main.go:66:1:90:1 | Normal Exit | +| main.go:66:14:90:1 | block statement | main.go:67:2:67:10 | declaration statement | +| main.go:67:2:67:10 | After declaration statement | main.go:68:2:70:2 | for statement | +| main.go:67:2:67:10 | After variable declaration | main.go:67:2:67:10 | After declaration statement | +| main.go:67:2:67:10 | declaration statement | main.go:67:2:67:10 | variable declaration | +| main.go:67:2:67:10 | variable declaration | main.go:67:6:67:10 | value declaration specifier | +| main.go:67:6:67:10 | After value declaration specifier | main.go:67:2:67:10 | After variable declaration | +| main.go:67:6:67:10 | assign:0 value declaration specifier | main.go:67:6:67:10 | After value declaration specifier | +| main.go:67:6:67:10 | value declaration specifier | main.go:67:6:67:10 | zero-init:0 value declaration specifier | +| main.go:67:6:67:10 | zero-init:0 value declaration specifier | main.go:67:6:67:10 | assign:0 value declaration specifier | +| main.go:68:2:70:2 | After for statement | main.go:71:2:71:13 | expression statement | +| main.go:68:2:70:2 | [LoopHeader] for statement | main.go:68:6:68:11 | Before call to cond | +| main.go:68:2:70:2 | for statement | main.go:68:6:68:11 | Before call to cond | +| main.go:68:6:68:9 | After cond | main.go:68:6:68:11 | call to cond | +| main.go:68:6:68:9 | Before cond | main.go:68:6:68:9 | cond | +| main.go:68:6:68:9 | cond | main.go:68:6:68:9 | After cond | +| main.go:68:6:68:11 | After call to cond [false] | main.go:68:2:70:2 | After for statement | +| main.go:68:6:68:11 | After call to cond [true] | main.go:68:13:70:2 | block statement | +| main.go:68:6:68:11 | Before call to cond | main.go:68:6:68:9 | Before cond | +| main.go:68:6:68:11 | call to cond | main.go:66:1:90:1 | Exceptional Exit | +| main.go:68:6:68:11 | call to cond | main.go:68:6:68:11 | After call to cond [false] | +| main.go:68:6:68:11 | call to cond | main.go:68:6:68:11 | After call to cond [true] | +| main.go:68:13:70:2 | After block statement | main.go:68:2:70:2 | [LoopHeader] for statement | +| main.go:68:13:70:2 | block statement | main.go:69:3:69:7 | ... = ... | +| main.go:69:3:69:7 | ... = ... | main.go:69:7:69:7 | Before 2 | +| main.go:69:3:69:7 | After ... = ... | main.go:68:13:70:2 | After block statement | +| main.go:69:3:69:7 | assign:0 ... = ... | main.go:69:3:69:7 | After ... = ... | +| main.go:69:7:69:7 | 2 | main.go:69:7:69:7 | After 2 | +| main.go:69:7:69:7 | After 2 | main.go:69:3:69:7 | assign:0 ... = ... | +| main.go:69:7:69:7 | Before 2 | main.go:69:7:69:7 | 2 | +| main.go:71:2:71:10 | After selection of Print | main.go:71:12:71:12 | Before x | +| main.go:71:2:71:10 | Before selection of Print | main.go:71:2:71:10 | selection of Print | +| main.go:71:2:71:10 | selection of Print | main.go:71:2:71:10 | After selection of Print | +| main.go:71:2:71:13 | After call to Print | main.go:71:2:71:13 | After expression statement | +| main.go:71:2:71:13 | After expression statement | main.go:73:2:73:7 | ... := ... | +| main.go:71:2:71:13 | Before call to Print | main.go:71:2:71:10 | Before selection of Print | +| main.go:71:2:71:13 | call to Print | main.go:66:1:90:1 | Exceptional Exit | +| main.go:71:2:71:13 | call to Print | main.go:71:2:71:13 | After call to Print | +| main.go:71:2:71:13 | expression statement | main.go:71:2:71:13 | Before call to Print | +| main.go:71:12:71:12 | After x | main.go:71:2:71:13 | call to Print | +| main.go:71:12:71:12 | Before x | main.go:71:12:71:12 | x | +| main.go:71:12:71:12 | x | main.go:71:12:71:12 | After x | +| main.go:73:2:73:7 | ... := ... | main.go:73:7:73:7 | Before 1 | +| main.go:73:2:73:7 | After ... := ... | main.go:74:2:79:2 | for statement | +| main.go:73:2:73:7 | assign:0 ... := ... | main.go:73:2:73:7 | After ... := ... | +| main.go:73:7:73:7 | 1 | main.go:73:7:73:7 | After 1 | +| main.go:73:7:73:7 | After 1 | main.go:73:2:73:7 | assign:0 ... := ... | +| main.go:73:7:73:7 | Before 1 | main.go:73:7:73:7 | 1 | +| main.go:74:2:79:2 | After for statement | main.go:80:2:80:13 | expression statement | +| main.go:74:2:79:2 | [LoopHeader] for statement | main.go:74:16:74:18 | Before increment statement | +| main.go:74:2:79:2 | for statement | main.go:74:6:74:11 | ... := ... | +| main.go:74:6:74:11 | ... := ... | main.go:74:11:74:11 | Before 0 | +| main.go:74:6:74:11 | After ... := ... | main.go:74:20:79:2 | block statement | +| main.go:74:6:74:11 | assign:0 ... := ... | main.go:74:6:74:11 | After ... := ... | +| main.go:74:11:74:11 | 0 | main.go:74:11:74:11 | After 0 | +| main.go:74:11:74:11 | After 0 | main.go:74:6:74:11 | assign:0 ... := ... | +| main.go:74:11:74:11 | Before 0 | main.go:74:11:74:11 | 0 | +| main.go:74:16:74:16 | After i | main.go:74:16:74:18 | implicit-one increment statement | +| main.go:74:16:74:16 | Before i | main.go:74:16:74:16 | i | +| main.go:74:16:74:16 | i | main.go:74:16:74:16 | After i | +| main.go:74:16:74:18 | After increment statement | main.go:74:20:79:2 | block statement | +| main.go:74:16:74:18 | Before increment statement | main.go:74:16:74:16 | Before i | +| main.go:74:16:74:18 | implicit-one increment statement | main.go:74:16:74:18 | incdec-rhs increment statement | +| main.go:74:16:74:18 | incdec-rhs increment statement | main.go:74:16:74:18 | increment statement | +| main.go:74:16:74:18 | increment statement | main.go:74:16:74:18 | After increment statement | +| main.go:74:20:79:2 | After block statement | main.go:74:2:79:2 | [LoopHeader] for statement | +| main.go:74:20:79:2 | block statement | main.go:75:3:77:3 | if statement | +| main.go:75:3:77:3 | After if statement | main.go:78:3:78:7 | ... = ... | +| main.go:75:3:77:3 | if statement | main.go:75:6:75:11 | Before call to cond | +| main.go:75:6:75:9 | After cond | main.go:75:6:75:11 | call to cond | +| main.go:75:6:75:9 | Before cond | main.go:75:6:75:9 | cond | +| main.go:75:6:75:9 | cond | main.go:75:6:75:9 | After cond | +| main.go:75:6:75:11 | After call to cond [false] | main.go:75:3:77:3 | After if statement | +| main.go:75:6:75:11 | After call to cond [true] | main.go:75:13:77:3 | block statement | +| main.go:75:6:75:11 | Before call to cond | main.go:75:6:75:9 | Before cond | +| main.go:75:6:75:11 | call to cond | main.go:66:1:90:1 | Exceptional Exit | +| main.go:75:6:75:11 | call to cond | main.go:75:6:75:11 | After call to cond [false] | +| main.go:75:6:75:11 | call to cond | main.go:75:6:75:11 | After call to cond [true] | +| main.go:75:13:77:3 | block statement | main.go:76:4:76:8 | Before break statement | +| main.go:76:4:76:8 | Before break statement | main.go:76:4:76:8 | break statement | +| main.go:76:4:76:8 | break statement | main.go:74:2:79:2 | After for statement | +| main.go:78:3:78:7 | ... = ... | main.go:78:7:78:7 | Before 2 | +| main.go:78:3:78:7 | After ... = ... | main.go:74:20:79:2 | After block statement | +| main.go:78:3:78:7 | assign:0 ... = ... | main.go:78:3:78:7 | After ... = ... | +| main.go:78:7:78:7 | 2 | main.go:78:7:78:7 | After 2 | +| main.go:78:7:78:7 | After 2 | main.go:78:3:78:7 | assign:0 ... = ... | +| main.go:78:7:78:7 | Before 2 | main.go:78:7:78:7 | 2 | +| main.go:80:2:80:10 | After selection of Print | main.go:80:12:80:12 | Before y | +| main.go:80:2:80:10 | Before selection of Print | main.go:80:2:80:10 | selection of Print | +| main.go:80:2:80:10 | selection of Print | main.go:80:2:80:10 | After selection of Print | +| main.go:80:2:80:13 | After call to Print | main.go:80:2:80:13 | After expression statement | +| main.go:80:2:80:13 | After expression statement | main.go:82:2:82:7 | ... := ... | +| main.go:80:2:80:13 | Before call to Print | main.go:80:2:80:10 | Before selection of Print | +| main.go:80:2:80:13 | call to Print | main.go:66:1:90:1 | Exceptional Exit | +| main.go:80:2:80:13 | call to Print | main.go:80:2:80:13 | After call to Print | +| main.go:80:2:80:13 | expression statement | main.go:80:2:80:13 | Before call to Print | +| main.go:80:12:80:12 | After y | main.go:80:2:80:13 | call to Print | +| main.go:80:12:80:12 | Before y | main.go:80:12:80:12 | y | +| main.go:80:12:80:12 | y | main.go:80:12:80:12 | After y | +| main.go:82:2:82:7 | ... := ... | main.go:82:7:82:7 | Before 1 | +| main.go:82:2:82:7 | After ... := ... | main.go:83:2:88:2 | for statement | +| main.go:82:2:82:7 | assign:0 ... := ... | main.go:82:2:82:7 | After ... := ... | +| main.go:82:7:82:7 | 1 | main.go:82:7:82:7 | After 1 | +| main.go:82:7:82:7 | After 1 | main.go:82:2:82:7 | assign:0 ... := ... | +| main.go:82:7:82:7 | Before 1 | main.go:82:7:82:7 | 1 | +| main.go:83:2:88:2 | After for statement | main.go:89:2:89:13 | expression statement | +| main.go:83:2:88:2 | [LoopHeader] for statement | main.go:83:16:83:18 | Before increment statement | +| main.go:83:2:88:2 | for statement | main.go:83:6:83:11 | ... := ... | +| main.go:83:6:83:11 | ... := ... | main.go:83:11:83:11 | Before 0 | +| main.go:83:6:83:11 | After ... := ... | main.go:83:20:88:2 | block statement | +| main.go:83:6:83:11 | assign:0 ... := ... | main.go:83:6:83:11 | After ... := ... | +| main.go:83:11:83:11 | 0 | main.go:83:11:83:11 | After 0 | +| main.go:83:11:83:11 | After 0 | main.go:83:6:83:11 | assign:0 ... := ... | +| main.go:83:11:83:11 | Before 0 | main.go:83:11:83:11 | 0 | +| main.go:83:16:83:16 | After i | main.go:83:16:83:18 | implicit-one increment statement | +| main.go:83:16:83:16 | Before i | main.go:83:16:83:16 | i | +| main.go:83:16:83:16 | i | main.go:83:16:83:16 | After i | +| main.go:83:16:83:18 | After increment statement | main.go:83:20:88:2 | block statement | +| main.go:83:16:83:18 | Before increment statement | main.go:83:16:83:16 | Before i | +| main.go:83:16:83:18 | implicit-one increment statement | main.go:83:16:83:18 | incdec-rhs increment statement | +| main.go:83:16:83:18 | incdec-rhs increment statement | main.go:83:16:83:18 | increment statement | +| main.go:83:16:83:18 | increment statement | main.go:83:16:83:18 | After increment statement | +| main.go:83:20:88:2 | After block statement | main.go:83:2:88:2 | [LoopHeader] for statement | +| main.go:83:20:88:2 | block statement | main.go:84:3:84:7 | ... = ... | +| main.go:84:3:84:7 | ... = ... | main.go:84:7:84:7 | Before 2 | +| main.go:84:3:84:7 | After ... = ... | main.go:85:3:87:3 | if statement | +| main.go:84:3:84:7 | assign:0 ... = ... | main.go:84:3:84:7 | After ... = ... | +| main.go:84:7:84:7 | 2 | main.go:84:7:84:7 | After 2 | +| main.go:84:7:84:7 | After 2 | main.go:84:3:84:7 | assign:0 ... = ... | +| main.go:84:7:84:7 | Before 2 | main.go:84:7:84:7 | 2 | +| main.go:85:3:87:3 | After if statement | main.go:83:20:88:2 | After block statement | +| main.go:85:3:87:3 | if statement | main.go:85:6:85:11 | Before call to cond | +| main.go:85:6:85:9 | After cond | main.go:85:6:85:11 | call to cond | +| main.go:85:6:85:9 | Before cond | main.go:85:6:85:9 | cond | +| main.go:85:6:85:9 | cond | main.go:85:6:85:9 | After cond | +| main.go:85:6:85:11 | After call to cond [false] | main.go:85:3:87:3 | After if statement | +| main.go:85:6:85:11 | After call to cond [true] | main.go:85:13:87:3 | block statement | +| main.go:85:6:85:11 | Before call to cond | main.go:85:6:85:9 | Before cond | +| main.go:85:6:85:11 | call to cond | main.go:66:1:90:1 | Exceptional Exit | +| main.go:85:6:85:11 | call to cond | main.go:85:6:85:11 | After call to cond [false] | +| main.go:85:6:85:11 | call to cond | main.go:85:6:85:11 | After call to cond [true] | +| main.go:85:13:87:3 | block statement | main.go:86:4:86:8 | Before break statement | +| main.go:86:4:86:8 | Before break statement | main.go:86:4:86:8 | break statement | +| main.go:86:4:86:8 | break statement | main.go:83:2:88:2 | After for statement | +| main.go:89:2:89:10 | After selection of Print | main.go:89:12:89:12 | Before z | +| main.go:89:2:89:10 | Before selection of Print | main.go:89:2:89:10 | selection of Print | +| main.go:89:2:89:10 | selection of Print | main.go:89:2:89:10 | After selection of Print | +| main.go:89:2:89:13 | After call to Print | main.go:89:2:89:13 | After expression statement | +| main.go:89:2:89:13 | After expression statement | main.go:66:14:90:1 | After block statement | +| main.go:89:2:89:13 | Before call to Print | main.go:89:2:89:10 | Before selection of Print | +| main.go:89:2:89:13 | call to Print | main.go:66:1:90:1 | Exceptional Exit | +| main.go:89:2:89:13 | call to Print | main.go:89:2:89:13 | After call to Print | +| main.go:89:2:89:13 | expression statement | main.go:89:2:89:13 | Before call to Print | +| main.go:89:12:89:12 | After z | main.go:89:2:89:13 | call to Print | +| main.go:89:12:89:12 | Before z | main.go:89:12:89:12 | z | +| main.go:89:12:89:12 | z | main.go:89:12:89:12 | After z | +| main.go:92:1:96:1 | After function declaration | main.go:98:1:106:1 | Before function declaration | +| main.go:92:1:96:1 | Before function declaration | main.go:92:1:96:1 | function declaration | +| main.go:92:1:96:1 | Entry | main.go:92:36:96:1 | block statement | +| main.go:92:1:96:1 | Normal Exit | main.go:92:1:96:1 | Exit | +| main.go:92:1:96:1 | function declaration | main.go:92:1:96:1 | After function declaration | +| main.go:92:36:96:1 | block statement | main.go:92:36:96:1 | result-zero-init:0 block statement | +| main.go:92:36:96:1 | result-init:0 block statement | main.go:92:36:96:1 | result-zero-init:1 block statement | +| main.go:92:36:96:1 | result-init:1 block statement | main.go:93:2:93:8 | ... := ... | +| main.go:92:36:96:1 | result-read:0 block statement | main.go:92:36:96:1 | result-read:1 block statement | +| main.go:92:36:96:1 | result-zero-init:0 block statement | main.go:92:36:96:1 | result-init:0 block statement | +| main.go:92:36:96:1 | result-zero-init:1 block statement | main.go:92:36:96:1 | result-init:1 block statement | +| main.go:93:2:93:8 | ... := ... | main.go:93:7:93:8 | Before 23 | +| main.go:93:2:93:8 | After ... := ... | main.go:94:2:94:15 | ... = ... | +| main.go:93:2:93:8 | assign:0 ... := ... | main.go:93:2:93:8 | After ... := ... | +| main.go:93:7:93:8 | 23 | main.go:93:7:93:8 | After 23 | +| main.go:93:7:93:8 | After 23 | main.go:93:2:93:8 | assign:0 ... := ... | +| main.go:93:7:93:8 | Before 23 | main.go:93:7:93:8 | 23 | +| main.go:94:2:94:15 | ... = ... | main.go:94:9:94:12 | Before ...+... | +| main.go:94:2:94:15 | After ... = ... | main.go:95:2:95:7 | Before return statement | +| main.go:94:2:94:15 | assign:0 ... = ... | main.go:94:2:94:15 | assign:1 ... = ... | +| main.go:94:2:94:15 | assign:1 ... = ... | main.go:94:2:94:15 | After ... = ... | +| main.go:94:9:94:9 | After x | main.go:94:11:94:12 | Before 19 | +| main.go:94:9:94:9 | Before x | main.go:94:9:94:9 | x | +| main.go:94:9:94:9 | x | main.go:94:9:94:9 | After x | +| main.go:94:9:94:12 | ...+... | main.go:94:9:94:12 | After ...+... | +| main.go:94:9:94:12 | After ...+... | main.go:94:15:94:15 | Before x | +| main.go:94:9:94:12 | Before ...+... | main.go:94:9:94:9 | Before x | +| main.go:94:11:94:12 | 19 | main.go:94:11:94:12 | After 19 | +| main.go:94:11:94:12 | After 19 | main.go:94:9:94:12 | ...+... | +| main.go:94:11:94:12 | Before 19 | main.go:94:11:94:12 | 19 | +| main.go:94:15:94:15 | After x | main.go:94:2:94:15 | assign:0 ... = ... | +| main.go:94:15:94:15 | Before x | main.go:94:15:94:15 | x | +| main.go:94:15:94:15 | x | main.go:94:15:94:15 | After x | +| main.go:95:2:95:7 | Before return statement | main.go:95:2:95:7 | return statement | +| main.go:95:2:95:7 | return statement | main.go:92:1:96:1 | Normal Exit | +| main.go:95:2:95:7 | return statement | main.go:92:36:96:1 | result-read:0 block statement | +| main.go:98:1:106:1 | After function declaration | main.go:0:0:0:0 | After main.go | +| main.go:98:1:106:1 | Before function declaration | main.go:98:1:106:1 | function declaration | +| main.go:98:1:106:1 | Entry | main.go:98:43:106:1 | block statement | +| main.go:98:1:106:1 | Exceptional Exit | main.go:98:1:106:1 | Exit | +| main.go:98:1:106:1 | Normal Exit | main.go:98:1:106:1 | Exit | +| main.go:98:1:106:1 | function declaration | main.go:98:1:106:1 | After function declaration | +| main.go:98:43:106:1 | arg:0 block statement | main.go:98:43:106:1 | param-init:0 block statement | +| main.go:98:43:106:1 | block statement | main.go:98:43:106:1 | arg:0 block statement | +| main.go:98:43:106:1 | param-init:0 block statement | main.go:99:2:99:13 | ... := ... | +| main.go:99:2:99:13 | ... := ... | main.go:99:10:99:10 | Before x | +| main.go:99:2:99:13 | After ... := ... | main.go:100:2:104:2 | if statement | +| main.go:99:2:99:13 | assign:0 ... := ... | main.go:99:2:99:13 | assign:1 ... := ... | +| main.go:99:2:99:13 | assign:1 ... := ... | main.go:99:2:99:13 | After ... := ... | +| main.go:99:10:99:10 | After x | main.go:99:13:99:13 | Before 0 | +| main.go:99:10:99:10 | Before x | main.go:99:10:99:10 | x | +| main.go:99:10:99:10 | x | main.go:99:10:99:10 | After x | +| main.go:99:13:99:13 | 0 | main.go:99:13:99:13 | After 0 | +| main.go:99:13:99:13 | After 0 | main.go:99:2:99:13 | assign:0 ... := ... | +| main.go:99:13:99:13 | Before 0 | main.go:99:13:99:13 | 0 | +| main.go:100:2:104:2 | After if statement | main.go:105:2:105:12 | Before return statement | +| main.go:100:2:104:2 | if statement | main.go:100:5:100:10 | Before call to cond | +| main.go:100:5:100:8 | After cond | main.go:100:5:100:10 | call to cond | +| main.go:100:5:100:8 | Before cond | main.go:100:5:100:8 | cond | +| main.go:100:5:100:8 | cond | main.go:100:5:100:8 | After cond | +| main.go:100:5:100:10 | After call to cond [false] | main.go:102:9:104:2 | block statement | +| main.go:100:5:100:10 | After call to cond [true] | main.go:100:12:102:2 | block statement | +| main.go:100:5:100:10 | Before call to cond | main.go:100:5:100:8 | Before cond | +| main.go:100:5:100:10 | call to cond | main.go:98:1:106:1 | Exceptional Exit | +| main.go:100:5:100:10 | call to cond | main.go:100:5:100:10 | After call to cond [false] | +| main.go:100:5:100:10 | call to cond | main.go:100:5:100:10 | After call to cond [true] | +| main.go:100:12:102:2 | After block statement | main.go:100:2:104:2 | After if statement | +| main.go:100:12:102:2 | block statement | main.go:101:3:101:13 | ... = ... | +| main.go:101:3:101:13 | ... = ... | main.go:101:10:101:10 | Before b | +| main.go:101:3:101:13 | After ... = ... | main.go:100:12:102:2 | After block statement | +| main.go:101:3:101:13 | assign:0 ... = ... | main.go:101:3:101:13 | After ... = ... | +| main.go:101:10:101:10 | After b | main.go:101:13:101:13 | Before a | +| main.go:101:10:101:10 | Before b | main.go:101:10:101:10 | b | +| main.go:101:10:101:10 | b | main.go:101:10:101:10 | After b | +| main.go:101:13:101:13 | After a | main.go:101:3:101:13 | assign:0 ... = ... | +| main.go:101:13:101:13 | Before a | main.go:101:13:101:13 | a | +| main.go:101:13:101:13 | a | main.go:101:13:101:13 | After a | +| main.go:102:9:104:2 | After block statement | main.go:100:2:104:2 | After if statement | +| main.go:102:9:104:2 | block statement | main.go:103:3:103:13 | ... = ... | +| main.go:103:3:103:13 | ... = ... | main.go:103:10:103:10 | Before b | +| main.go:103:3:103:13 | After ... = ... | main.go:102:9:104:2 | After block statement | +| main.go:103:3:103:13 | assign:1 ... = ... | main.go:103:3:103:13 | After ... = ... | +| main.go:103:10:103:10 | After b | main.go:103:13:103:13 | Before a | +| main.go:103:10:103:10 | Before b | main.go:103:10:103:10 | b | +| main.go:103:10:103:10 | b | main.go:103:10:103:10 | After b | +| main.go:103:13:103:13 | After a | main.go:103:3:103:13 | assign:1 ... = ... | +| main.go:103:13:103:13 | Before a | main.go:103:13:103:13 | a | +| main.go:103:13:103:13 | a | main.go:103:13:103:13 | After a | +| main.go:105:2:105:12 | Before return statement | main.go:105:9:105:9 | Before a | +| main.go:105:2:105:12 | return statement | main.go:98:1:106:1 | Normal Exit | +| main.go:105:9:105:9 | After a | main.go:105:12:105:12 | Before b | +| main.go:105:9:105:9 | Before a | main.go:105:9:105:9 | a | +| main.go:105:9:105:9 | a | main.go:105:9:105:9 | After a | +| main.go:105:12:105:12 | After b | main.go:105:2:105:12 | return statement | +| main.go:105:12:105:12 | Before b | main.go:105:12:105:12 | b | +| main.go:105:12:105:12 | b | main.go:105:12:105:12 | After b | +| noretfunctions.go:0:0:0:0 | After noretfunctions.go | noretfunctions.go:0:0:0:0 | Normal Exit | +| noretfunctions.go:0:0:0:0 | Entry | noretfunctions.go:0:0:0:0 | noretfunctions.go | +| noretfunctions.go:0:0:0:0 | Normal Exit | noretfunctions.go:0:0:0:0 | Exit | +| noretfunctions.go:0:0:0:0 | noretfunctions.go | noretfunctions.go:3:1:6:1 | import declaration | +| noretfunctions.go:3:1:6:1 | After import declaration | noretfunctions.go:8:1:10:1 | Before function declaration | +| noretfunctions.go:3:1:6:1 | import declaration | noretfunctions.go:4:2:4:6 | import specifier | +| noretfunctions.go:4:2:4:6 | import specifier | noretfunctions.go:5:2:5:5 | import specifier | +| noretfunctions.go:5:2:5:5 | import specifier | noretfunctions.go:3:1:6:1 | After import declaration | +| noretfunctions.go:8:1:10:1 | After function declaration | noretfunctions.go:12:1:16:1 | Before function declaration | +| noretfunctions.go:8:1:10:1 | Before function declaration | noretfunctions.go:8:1:10:1 | function declaration | +| noretfunctions.go:8:1:10:1 | Entry | noretfunctions.go:8:16:10:1 | block statement | +| noretfunctions.go:8:1:10:1 | Exceptional Exit | noretfunctions.go:8:1:10:1 | Exit | +| noretfunctions.go:8:1:10:1 | function declaration | noretfunctions.go:8:1:10:1 | After function declaration | +| noretfunctions.go:8:16:10:1 | block statement | noretfunctions.go:9:2:9:11 | expression statement | +| noretfunctions.go:9:2:9:8 | After selection of Exit | noretfunctions.go:9:10:9:10 | Before 1 | +| noretfunctions.go:9:2:9:8 | Before selection of Exit | noretfunctions.go:9:2:9:8 | selection of Exit | +| noretfunctions.go:9:2:9:8 | selection of Exit | noretfunctions.go:9:2:9:8 | After selection of Exit | +| noretfunctions.go:9:2:9:11 | Before call to Exit | noretfunctions.go:9:2:9:8 | Before selection of Exit | +| noretfunctions.go:9:2:9:11 | call to Exit | noretfunctions.go:8:1:10:1 | Exceptional Exit | +| noretfunctions.go:9:2:9:11 | expression statement | noretfunctions.go:9:2:9:11 | Before call to Exit | +| noretfunctions.go:9:10:9:10 | 1 | noretfunctions.go:9:10:9:10 | After 1 | +| noretfunctions.go:9:10:9:10 | After 1 | noretfunctions.go:9:2:9:11 | call to Exit | +| noretfunctions.go:9:10:9:10 | Before 1 | noretfunctions.go:9:10:9:10 | 1 | +| noretfunctions.go:12:1:16:1 | After function declaration | noretfunctions.go:18:1:18:17 | Before function declaration | +| noretfunctions.go:12:1:16:1 | Before function declaration | noretfunctions.go:12:1:16:1 | function declaration | +| noretfunctions.go:12:1:16:1 | Entry | noretfunctions.go:12:20:16:1 | block statement | +| noretfunctions.go:12:1:16:1 | Exceptional Exit | noretfunctions.go:12:1:16:1 | Exit | +| noretfunctions.go:12:1:16:1 | Normal Exit | noretfunctions.go:12:1:16:1 | Exit | +| noretfunctions.go:12:1:16:1 | function declaration | noretfunctions.go:12:1:16:1 | After function declaration | +| noretfunctions.go:12:20:16:1 | After block statement | noretfunctions.go:12:1:16:1 | Normal Exit | +| noretfunctions.go:12:20:16:1 | arg:0 block statement | noretfunctions.go:12:20:16:1 | param-init:0 block statement | +| noretfunctions.go:12:20:16:1 | block statement | noretfunctions.go:12:20:16:1 | arg:0 block statement | +| noretfunctions.go:12:20:16:1 | param-init:0 block statement | noretfunctions.go:13:2:15:2 | if statement | +| noretfunctions.go:13:2:15:2 | After if statement | noretfunctions.go:12:20:16:1 | After block statement | +| noretfunctions.go:13:2:15:2 | if statement | noretfunctions.go:13:5:13:10 | Before ...!=... | +| noretfunctions.go:13:5:13:5 | After x | noretfunctions.go:13:10:13:10 | Before 0 | +| noretfunctions.go:13:5:13:5 | Before x | noretfunctions.go:13:5:13:5 | x | +| noretfunctions.go:13:5:13:5 | x | noretfunctions.go:13:5:13:5 | After x | +| noretfunctions.go:13:5:13:10 | ...!=... | noretfunctions.go:13:5:13:10 | After ...!=... [false] | +| noretfunctions.go:13:5:13:10 | ...!=... | noretfunctions.go:13:5:13:10 | After ...!=... [true] | +| noretfunctions.go:13:5:13:10 | After ...!=... [false] | noretfunctions.go:13:2:15:2 | After if statement | +| noretfunctions.go:13:5:13:10 | After ...!=... [true] | noretfunctions.go:13:12:15:2 | block statement | +| noretfunctions.go:13:5:13:10 | Before ...!=... | noretfunctions.go:13:5:13:5 | Before x | +| noretfunctions.go:13:10:13:10 | 0 | noretfunctions.go:13:10:13:10 | After 0 | +| noretfunctions.go:13:10:13:10 | After 0 | noretfunctions.go:13:5:13:10 | ...!=... | +| noretfunctions.go:13:10:13:10 | Before 0 | noretfunctions.go:13:10:13:10 | 0 | +| noretfunctions.go:13:12:15:2 | block statement | noretfunctions.go:14:3:14:12 | expression statement | +| noretfunctions.go:14:3:14:9 | After selection of Exit | noretfunctions.go:14:11:14:11 | Before x | +| noretfunctions.go:14:3:14:9 | Before selection of Exit | noretfunctions.go:14:3:14:9 | selection of Exit | +| noretfunctions.go:14:3:14:9 | selection of Exit | noretfunctions.go:14:3:14:9 | After selection of Exit | +| noretfunctions.go:14:3:14:12 | Before call to Exit | noretfunctions.go:14:3:14:9 | Before selection of Exit | +| noretfunctions.go:14:3:14:12 | call to Exit | noretfunctions.go:12:1:16:1 | Exceptional Exit | +| noretfunctions.go:14:3:14:12 | expression statement | noretfunctions.go:14:3:14:12 | Before call to Exit | +| noretfunctions.go:14:11:14:11 | After x | noretfunctions.go:14:3:14:12 | call to Exit | +| noretfunctions.go:14:11:14:11 | Before x | noretfunctions.go:14:11:14:11 | x | +| noretfunctions.go:14:11:14:11 | x | noretfunctions.go:14:11:14:11 | After x | +| noretfunctions.go:18:1:18:17 | After function declaration | noretfunctions.go:20:1:22:1 | Before function declaration | +| noretfunctions.go:18:1:18:17 | Before function declaration | noretfunctions.go:18:1:18:17 | function declaration | +| noretfunctions.go:18:1:18:17 | Entry | noretfunctions.go:18:16:18:17 | block statement | +| noretfunctions.go:18:1:18:17 | Normal Exit | noretfunctions.go:18:1:18:17 | Exit | +| noretfunctions.go:18:1:18:17 | function declaration | noretfunctions.go:18:1:18:17 | After function declaration | +| noretfunctions.go:18:16:18:17 | block statement | noretfunctions.go:18:1:18:17 | Normal Exit | +| noretfunctions.go:18:16:18:17 | block statement | noretfunctions.go:18:16:18:17 | block statement | +| noretfunctions.go:20:1:22:1 | After function declaration | noretfunctions.go:24:1:26:1 | Before function declaration | +| noretfunctions.go:20:1:22:1 | Before function declaration | noretfunctions.go:20:1:22:1 | function declaration | +| noretfunctions.go:20:1:22:1 | Entry | noretfunctions.go:20:26:22:1 | block statement | +| noretfunctions.go:20:1:22:1 | Exceptional Exit | noretfunctions.go:20:1:22:1 | Exit | +| noretfunctions.go:20:1:22:1 | function declaration | noretfunctions.go:20:1:22:1 | After function declaration | +| noretfunctions.go:20:26:22:1 | block statement | noretfunctions.go:21:2:21:19 | expression statement | +| noretfunctions.go:21:2:21:10 | After selection of Fatal | noretfunctions.go:21:12:21:18 | Before "Oh no" | +| noretfunctions.go:21:2:21:10 | Before selection of Fatal | noretfunctions.go:21:2:21:10 | selection of Fatal | +| noretfunctions.go:21:2:21:10 | selection of Fatal | noretfunctions.go:21:2:21:10 | After selection of Fatal | +| noretfunctions.go:21:2:21:19 | Before call to Fatal | noretfunctions.go:21:2:21:10 | Before selection of Fatal | +| noretfunctions.go:21:2:21:19 | call to Fatal | noretfunctions.go:20:1:22:1 | Exceptional Exit | +| noretfunctions.go:21:2:21:19 | expression statement | noretfunctions.go:21:2:21:19 | Before call to Fatal | +| noretfunctions.go:21:12:21:18 | "Oh no" | noretfunctions.go:21:12:21:18 | After "Oh no" | +| noretfunctions.go:21:12:21:18 | After "Oh no" | noretfunctions.go:21:2:21:19 | call to Fatal | +| noretfunctions.go:21:12:21:18 | Before "Oh no" | noretfunctions.go:21:12:21:18 | "Oh no" | +| noretfunctions.go:24:1:26:1 | After function declaration | noretfunctions.go:0:0:0:0 | After noretfunctions.go | +| noretfunctions.go:24:1:26:1 | Before function declaration | noretfunctions.go:24:1:26:1 | function declaration | +| noretfunctions.go:24:1:26:1 | Entry | noretfunctions.go:24:27:26:1 | block statement | +| noretfunctions.go:24:1:26:1 | Exceptional Exit | noretfunctions.go:24:1:26:1 | Exit | +| noretfunctions.go:24:1:26:1 | function declaration | noretfunctions.go:24:1:26:1 | After function declaration | +| noretfunctions.go:24:27:26:1 | block statement | noretfunctions.go:25:2:25:31 | expression statement | +| noretfunctions.go:25:2:25:11 | After selection of Fatalf | noretfunctions.go:25:13:25:30 | Before "It's as I feared" | +| noretfunctions.go:25:2:25:11 | Before selection of Fatalf | noretfunctions.go:25:2:25:11 | selection of Fatalf | +| noretfunctions.go:25:2:25:11 | selection of Fatalf | noretfunctions.go:25:2:25:11 | After selection of Fatalf | +| noretfunctions.go:25:2:25:31 | Before call to Fatalf | noretfunctions.go:25:2:25:11 | Before selection of Fatalf | +| noretfunctions.go:25:2:25:31 | call to Fatalf | noretfunctions.go:24:1:26:1 | Exceptional Exit | +| noretfunctions.go:25:2:25:31 | expression statement | noretfunctions.go:25:2:25:31 | Before call to Fatalf | +| noretfunctions.go:25:13:25:30 | "It's as I feared" | noretfunctions.go:25:13:25:30 | After "It's as I feared" | +| noretfunctions.go:25:13:25:30 | After "It's as I feared" | noretfunctions.go:25:2:25:31 | call to Fatalf | +| noretfunctions.go:25:13:25:30 | Before "It's as I feared" | noretfunctions.go:25:13:25:30 | "It's as I feared" | +| stmts2.go:0:0:0:0 | After stmts2.go | stmts2.go:0:0:0:0 | Normal Exit | +| stmts2.go:0:0:0:0 | Entry | stmts2.go:0:0:0:0 | stmts2.go | +| stmts2.go:0:0:0:0 | Normal Exit | stmts2.go:0:0:0:0 | Exit | +| stmts2.go:0:0:0:0 | stmts2.go | stmts2.go:3:1:7:1 | Before function declaration | +| stmts2.go:3:1:7:1 | After function declaration | stmts2.go:9:1:13:1 | Before function declaration | +| stmts2.go:3:1:7:1 | Before function declaration | stmts2.go:3:1:7:1 | function declaration | +| stmts2.go:3:1:7:1 | Entry | stmts2.go:3:19:7:1 | block statement | +| stmts2.go:3:1:7:1 | Exceptional Exit | stmts2.go:3:1:7:1 | Exit | +| stmts2.go:3:1:7:1 | Normal Exit | stmts2.go:3:1:7:1 | Exit | +| stmts2.go:3:1:7:1 | function declaration | stmts2.go:3:1:7:1 | After function declaration | +| stmts2.go:3:19:7:1 | block statement | stmts2.go:4:2:4:13 | ... = ... | +| stmts2.go:4:2:4:13 | ... = ... | stmts2.go:4:6:4:13 | Before call to test7 | +| stmts2.go:4:2:4:13 | After ... = ... | stmts2.go:5:2:5:17 | declaration statement | +| stmts2.go:4:6:4:10 | After test7 | stmts2.go:4:12:4:12 | Before 0 | +| stmts2.go:4:6:4:10 | Before test7 | stmts2.go:4:6:4:10 | test7 | +| stmts2.go:4:6:4:10 | test7 | stmts2.go:4:6:4:10 | After test7 | +| stmts2.go:4:6:4:13 | After call to test7 | stmts2.go:4:2:4:13 | After ... = ... | +| stmts2.go:4:6:4:13 | Before call to test7 | stmts2.go:4:6:4:10 | Before test7 | +| stmts2.go:4:6:4:13 | call to test7 | stmts2.go:3:1:7:1 | Exceptional Exit | +| stmts2.go:4:6:4:13 | call to test7 | stmts2.go:4:6:4:13 | After call to test7 | +| stmts2.go:4:12:4:12 | 0 | stmts2.go:4:12:4:12 | After 0 | +| stmts2.go:4:12:4:12 | After 0 | stmts2.go:4:6:4:13 | call to test7 | +| stmts2.go:4:12:4:12 | Before 0 | stmts2.go:4:12:4:12 | 0 | +| stmts2.go:5:2:5:17 | After declaration statement | stmts2.go:6:2:6:9 | Before return statement | +| stmts2.go:5:2:5:17 | After variable declaration | stmts2.go:5:2:5:17 | After declaration statement | +| stmts2.go:5:2:5:17 | declaration statement | stmts2.go:5:2:5:17 | variable declaration | +| stmts2.go:5:2:5:17 | variable declaration | stmts2.go:5:6:5:17 | value declaration specifier | +| stmts2.go:5:6:5:17 | After value declaration specifier | stmts2.go:5:2:5:17 | After variable declaration | +| stmts2.go:5:6:5:17 | value declaration specifier | stmts2.go:5:10:5:17 | Before call to test7 | +| stmts2.go:5:10:5:14 | After test7 | stmts2.go:5:16:5:16 | Before 1 | +| stmts2.go:5:10:5:14 | Before test7 | stmts2.go:5:10:5:14 | test7 | +| stmts2.go:5:10:5:14 | test7 | stmts2.go:5:10:5:14 | After test7 | +| stmts2.go:5:10:5:17 | After call to test7 | stmts2.go:5:6:5:17 | After value declaration specifier | +| stmts2.go:5:10:5:17 | Before call to test7 | stmts2.go:5:10:5:14 | Before test7 | +| stmts2.go:5:10:5:17 | call to test7 | stmts2.go:3:1:7:1 | Exceptional Exit | +| stmts2.go:5:10:5:17 | call to test7 | stmts2.go:5:10:5:17 | After call to test7 | +| stmts2.go:5:16:5:16 | 1 | stmts2.go:5:16:5:16 | After 1 | +| stmts2.go:5:16:5:16 | After 1 | stmts2.go:5:10:5:17 | call to test7 | +| stmts2.go:5:16:5:16 | Before 1 | stmts2.go:5:16:5:16 | 1 | +| stmts2.go:6:2:6:9 | Before return statement | stmts2.go:6:9:6:9 | Before 2 | +| stmts2.go:6:2:6:9 | return statement | stmts2.go:3:1:7:1 | Normal Exit | +| stmts2.go:6:9:6:9 | 2 | stmts2.go:6:9:6:9 | After 2 | +| stmts2.go:6:9:6:9 | After 2 | stmts2.go:6:2:6:9 | return statement | +| stmts2.go:6:9:6:9 | Before 2 | stmts2.go:6:9:6:9 | 2 | +| stmts2.go:9:1:13:1 | After function declaration | stmts2.go:15:1:28:1 | Before function declaration | +| stmts2.go:9:1:13:1 | Before function declaration | stmts2.go:9:1:13:1 | function declaration | +| stmts2.go:9:1:13:1 | Entry | stmts2.go:9:19:13:1 | block statement | +| stmts2.go:9:1:13:1 | Exceptional Exit | stmts2.go:9:1:13:1 | Exit | +| stmts2.go:9:1:13:1 | Normal Exit | stmts2.go:9:1:13:1 | Exit | +| stmts2.go:9:1:13:1 | function declaration | stmts2.go:9:1:13:1 | After function declaration | +| stmts2.go:9:19:13:1 | block statement | stmts2.go:10:2:10:14 | ... := ... | +| stmts2.go:10:2:10:14 | ... := ... | stmts2.go:10:10:10:14 | Before call to gen | +| stmts2.go:10:2:10:14 | After ... := ... | stmts2.go:11:2:11:17 | declaration statement | +| stmts2.go:10:2:10:14 | assign:1 ... := ... | stmts2.go:10:2:10:14 | After ... := ... | +| stmts2.go:10:2:10:14 | extract:0 ... := ... | stmts2.go:10:2:10:14 | extract:1 ... := ... | +| stmts2.go:10:2:10:14 | extract:1 ... := ... | stmts2.go:10:2:10:14 | assign:1 ... := ... | +| stmts2.go:10:10:10:12 | After gen | stmts2.go:10:10:10:14 | call to gen | +| stmts2.go:10:10:10:12 | Before gen | stmts2.go:10:10:10:12 | gen | +| stmts2.go:10:10:10:12 | gen | stmts2.go:10:10:10:12 | After gen | +| stmts2.go:10:10:10:14 | After call to gen | stmts2.go:10:2:10:14 | extract:0 ... := ... | +| stmts2.go:10:10:10:14 | Before call to gen | stmts2.go:10:10:10:12 | Before gen | +| stmts2.go:10:10:10:14 | call to gen | stmts2.go:9:1:13:1 | Exceptional Exit | +| stmts2.go:10:10:10:14 | call to gen | stmts2.go:10:10:10:14 | After call to gen | +| stmts2.go:11:2:11:17 | After declaration statement | stmts2.go:12:2:12:13 | Before return statement | +| stmts2.go:11:2:11:17 | After variable declaration | stmts2.go:11:2:11:17 | After declaration statement | +| stmts2.go:11:2:11:17 | declaration statement | stmts2.go:11:2:11:17 | variable declaration | +| stmts2.go:11:2:11:17 | variable declaration | stmts2.go:11:6:11:17 | value declaration specifier | +| stmts2.go:11:6:11:17 | After value declaration specifier | stmts2.go:11:2:11:17 | After variable declaration | +| stmts2.go:11:6:11:17 | assign:1 value declaration specifier | stmts2.go:11:6:11:17 | After value declaration specifier | +| stmts2.go:11:6:11:17 | extract:0 value declaration specifier | stmts2.go:11:6:11:17 | extract:1 value declaration specifier | +| stmts2.go:11:6:11:17 | extract:1 value declaration specifier | stmts2.go:11:6:11:17 | assign:1 value declaration specifier | +| stmts2.go:11:6:11:17 | value declaration specifier | stmts2.go:11:13:11:17 | Before call to gen | +| stmts2.go:11:13:11:15 | After gen | stmts2.go:11:13:11:17 | call to gen | +| stmts2.go:11:13:11:15 | Before gen | stmts2.go:11:13:11:15 | gen | +| stmts2.go:11:13:11:15 | gen | stmts2.go:11:13:11:15 | After gen | +| stmts2.go:11:13:11:17 | After call to gen | stmts2.go:11:6:11:17 | extract:0 value declaration specifier | +| stmts2.go:11:13:11:17 | Before call to gen | stmts2.go:11:13:11:15 | Before gen | +| stmts2.go:11:13:11:17 | call to gen | stmts2.go:9:1:13:1 | Exceptional Exit | +| stmts2.go:11:13:11:17 | call to gen | stmts2.go:11:13:11:17 | After call to gen | +| stmts2.go:12:2:12:13 | Before return statement | stmts2.go:12:9:12:13 | Before ...+... | +| stmts2.go:12:2:12:13 | return statement | stmts2.go:9:1:13:1 | Normal Exit | +| stmts2.go:12:9:12:9 | After x | stmts2.go:12:13:12:13 | Before y | +| stmts2.go:12:9:12:9 | Before x | stmts2.go:12:9:12:9 | x | +| stmts2.go:12:9:12:9 | x | stmts2.go:12:9:12:9 | After x | +| stmts2.go:12:9:12:13 | ...+... | stmts2.go:12:9:12:13 | After ...+... | +| stmts2.go:12:9:12:13 | After ...+... | stmts2.go:12:2:12:13 | return statement | +| stmts2.go:12:9:12:13 | Before ...+... | stmts2.go:12:9:12:9 | Before x | +| stmts2.go:12:13:12:13 | After y | stmts2.go:12:9:12:13 | ...+... | +| stmts2.go:12:13:12:13 | Before y | stmts2.go:12:13:12:13 | y | +| stmts2.go:12:13:12:13 | y | stmts2.go:12:13:12:13 | After y | +| stmts2.go:15:1:28:1 | After function declaration | stmts2.go:30:1:34:1 | Before function declaration | +| stmts2.go:15:1:28:1 | Before function declaration | stmts2.go:15:1:28:1 | function declaration | +| stmts2.go:15:1:28:1 | Entry | stmts2.go:15:30:28:1 | block statement | +| stmts2.go:15:1:28:1 | Normal Exit | stmts2.go:15:1:28:1 | Exit | +| stmts2.go:15:1:28:1 | function declaration | stmts2.go:15:1:28:1 | After function declaration | +| stmts2.go:15:30:28:1 | arg:0 block statement | stmts2.go:15:30:28:1 | param-init:0 block statement | +| stmts2.go:15:30:28:1 | block statement | stmts2.go:15:30:28:1 | arg:0 block statement | +| stmts2.go:15:30:28:1 | param-init:0 block statement | stmts2.go:16:2:26:2 | Before select statement | +| stmts2.go:16:2:26:2 | After select statement | stmts2.go:27:2:27:9 | Before return statement | +| stmts2.go:16:2:26:2 | Before select statement | stmts2.go:17:13:17:14 | Before ch | +| stmts2.go:16:2:26:2 | select statement | stmts2.go:17:2:17:15 | comm clause | +| stmts2.go:16:2:26:2 | select statement | stmts2.go:18:2:19:10 | comm clause | +| stmts2.go:16:2:26:2 | select statement | stmts2.go:20:2:24:10 | comm clause | +| stmts2.go:16:2:26:2 | select statement | stmts2.go:25:2:25:18 | comm clause | +| stmts2.go:17:2:17:15 | comm clause | stmts2.go:17:11:17:14 | <-... | +| stmts2.go:17:7:17:7 | After _ | stmts2.go:16:2:26:2 | After select statement | +| stmts2.go:17:7:17:7 | Before _ | stmts2.go:17:7:17:7 | _ | +| stmts2.go:17:7:17:7 | _ | stmts2.go:17:7:17:7 | After _ | +| stmts2.go:17:11:17:14 | <-... | stmts2.go:17:7:17:7 | Before _ | +| stmts2.go:17:13:17:14 | After ch | stmts2.go:18:17:18:18 | Before ch | +| stmts2.go:17:13:17:14 | Before ch | stmts2.go:17:13:17:14 | ch | +| stmts2.go:17:13:17:14 | ch | stmts2.go:17:13:17:14 | After ch | +| stmts2.go:18:2:19:10 | comm clause | stmts2.go:18:15:18:18 | <-... | +| stmts2.go:18:7:18:7 | After x | stmts2.go:18:10:18:10 | Before _ | +| stmts2.go:18:7:18:7 | Before x | stmts2.go:18:7:18:7 | x | +| stmts2.go:18:7:18:7 | x | stmts2.go:18:7:18:7 | After x | +| stmts2.go:18:7:18:18 | assign:0 ... := ... | stmts2.go:18:7:18:18 | extract:1 ... := ... | +| stmts2.go:18:7:18:18 | extract:0 ... := ... | stmts2.go:18:7:18:18 | assign:0 ... := ... | +| stmts2.go:18:7:18:18 | extract:1 ... := ... | stmts2.go:19:3:19:10 | Before return statement | +| stmts2.go:18:10:18:10 | After _ | stmts2.go:18:7:18:18 | extract:0 ... := ... | +| stmts2.go:18:10:18:10 | Before _ | stmts2.go:18:10:18:10 | _ | +| stmts2.go:18:10:18:10 | _ | stmts2.go:18:10:18:10 | After _ | +| stmts2.go:18:15:18:18 | <-... | stmts2.go:18:7:18:7 | Before x | +| stmts2.go:18:17:18:18 | After ch | stmts2.go:20:17:20:18 | Before ch | +| stmts2.go:18:17:18:18 | Before ch | stmts2.go:18:17:18:18 | ch | +| stmts2.go:18:17:18:18 | ch | stmts2.go:18:17:18:18 | After ch | +| stmts2.go:19:3:19:10 | Before return statement | stmts2.go:19:10:19:10 | Before x | +| stmts2.go:19:3:19:10 | return statement | stmts2.go:15:1:28:1 | Normal Exit | +| stmts2.go:19:10:19:10 | After x | stmts2.go:19:3:19:10 | return statement | +| stmts2.go:19:10:19:10 | Before x | stmts2.go:19:10:19:10 | x | +| stmts2.go:19:10:19:10 | x | stmts2.go:19:10:19:10 | After x | +| stmts2.go:20:2:24:10 | comm clause | stmts2.go:20:15:20:18 | <-... | +| stmts2.go:20:7:20:7 | After _ | stmts2.go:20:10:20:10 | Before y | +| stmts2.go:20:7:20:7 | Before _ | stmts2.go:20:7:20:7 | _ | +| stmts2.go:20:7:20:7 | _ | stmts2.go:20:7:20:7 | After _ | +| stmts2.go:20:7:20:18 | assign:1 ... := ... | stmts2.go:21:3:23:3 | if statement | +| stmts2.go:20:7:20:18 | extract:0 ... := ... | stmts2.go:20:7:20:18 | extract:1 ... := ... | +| stmts2.go:20:7:20:18 | extract:1 ... := ... | stmts2.go:20:7:20:18 | assign:1 ... := ... | +| stmts2.go:20:10:20:10 | After y | stmts2.go:20:7:20:18 | extract:0 ... := ... | +| stmts2.go:20:10:20:10 | Before y | stmts2.go:20:10:20:10 | y | +| stmts2.go:20:10:20:10 | y | stmts2.go:20:10:20:10 | After y | +| stmts2.go:20:15:20:18 | <-... | stmts2.go:20:7:20:7 | Before _ | +| stmts2.go:20:17:20:18 | After ch | stmts2.go:25:16:25:17 | Before ch | +| stmts2.go:20:17:20:18 | Before ch | stmts2.go:20:17:20:18 | ch | +| stmts2.go:20:17:20:18 | ch | stmts2.go:20:17:20:18 | After ch | +| stmts2.go:21:3:23:3 | After if statement | stmts2.go:24:3:24:10 | Before return statement | +| stmts2.go:21:3:23:3 | if statement | stmts2.go:21:6:21:6 | Before y | +| stmts2.go:21:6:21:6 | After y [false] | stmts2.go:21:3:23:3 | After if statement | +| stmts2.go:21:6:21:6 | After y [true] | stmts2.go:21:8:23:3 | block statement | +| stmts2.go:21:6:21:6 | Before y | stmts2.go:21:6:21:6 | y | +| stmts2.go:21:6:21:6 | y | stmts2.go:21:6:21:6 | After y [false] | +| stmts2.go:21:6:21:6 | y | stmts2.go:21:6:21:6 | After y [true] | +| stmts2.go:21:8:23:3 | block statement | stmts2.go:22:4:22:8 | Before break statement | +| stmts2.go:22:4:22:8 | Before break statement | stmts2.go:22:4:22:8 | break statement | +| stmts2.go:24:3:24:10 | Before return statement | stmts2.go:24:10:24:10 | Before 0 | +| stmts2.go:24:3:24:10 | return statement | stmts2.go:15:1:28:1 | Normal Exit | +| stmts2.go:24:10:24:10 | 0 | stmts2.go:24:10:24:10 | After 0 | +| stmts2.go:24:10:24:10 | After 0 | stmts2.go:24:3:24:10 | return statement | +| stmts2.go:24:10:24:10 | Before 0 | stmts2.go:24:10:24:10 | 0 | +| stmts2.go:25:2:25:18 | comm clause | stmts2.go:25:14:25:17 | <-... | +| stmts2.go:25:7:25:7 | After _ | stmts2.go:25:10:25:10 | Before _ | +| stmts2.go:25:7:25:7 | Before _ | stmts2.go:25:7:25:7 | _ | +| stmts2.go:25:7:25:7 | _ | stmts2.go:25:7:25:7 | After _ | +| stmts2.go:25:7:25:17 | extract:0 ... = ... | stmts2.go:25:7:25:17 | extract:1 ... = ... | +| stmts2.go:25:7:25:17 | extract:1 ... = ... | stmts2.go:16:2:26:2 | After select statement | +| stmts2.go:25:10:25:10 | After _ | stmts2.go:25:7:25:17 | extract:0 ... = ... | +| stmts2.go:25:10:25:10 | Before _ | stmts2.go:25:10:25:10 | _ | +| stmts2.go:25:10:25:10 | _ | stmts2.go:25:10:25:10 | After _ | +| stmts2.go:25:14:25:17 | <-... | stmts2.go:25:7:25:7 | Before _ | +| stmts2.go:25:16:25:17 | After ch | stmts2.go:16:2:26:2 | select statement | +| stmts2.go:25:16:25:17 | Before ch | stmts2.go:25:16:25:17 | ch | +| stmts2.go:25:16:25:17 | ch | stmts2.go:25:16:25:17 | After ch | +| stmts2.go:27:2:27:9 | Before return statement | stmts2.go:27:9:27:9 | Before 1 | +| stmts2.go:27:2:27:9 | return statement | stmts2.go:15:1:28:1 | Normal Exit | +| stmts2.go:27:9:27:9 | 1 | stmts2.go:27:9:27:9 | After 1 | +| stmts2.go:27:9:27:9 | After 1 | stmts2.go:27:2:27:9 | return statement | +| stmts2.go:27:9:27:9 | Before 1 | stmts2.go:27:9:27:9 | 1 | +| stmts2.go:30:1:34:1 | After function declaration | stmts2.go:0:0:0:0 | After stmts2.go | +| stmts2.go:30:1:34:1 | Before function declaration | stmts2.go:30:1:34:1 | function declaration | +| stmts2.go:30:1:34:1 | Entry | stmts2.go:30:20:34:1 | block statement | +| stmts2.go:30:1:34:1 | Exceptional Exit | stmts2.go:30:1:34:1 | Exit | +| stmts2.go:30:1:34:1 | Normal Exit | stmts2.go:30:1:34:1 | Exit | +| stmts2.go:30:1:34:1 | function declaration | stmts2.go:30:1:34:1 | After function declaration | +| stmts2.go:30:20:34:1 | block statement | stmts2.go:31:2:31:14 | ... := ... | +| stmts2.go:31:2:31:14 | ... := ... | stmts2.go:31:10:31:14 | Before call to gen | +| stmts2.go:31:2:31:14 | After ... := ... | stmts2.go:32:2:32:17 | declaration statement | +| stmts2.go:31:2:31:14 | assign:0 ... := ... | stmts2.go:31:2:31:14 | extract:1 ... := ... | +| stmts2.go:31:2:31:14 | extract:0 ... := ... | stmts2.go:31:2:31:14 | assign:0 ... := ... | +| stmts2.go:31:2:31:14 | extract:1 ... := ... | stmts2.go:31:2:31:14 | After ... := ... | +| stmts2.go:31:10:31:12 | After gen | stmts2.go:31:10:31:14 | call to gen | +| stmts2.go:31:10:31:12 | Before gen | stmts2.go:31:10:31:12 | gen | +| stmts2.go:31:10:31:12 | gen | stmts2.go:31:10:31:12 | After gen | +| stmts2.go:31:10:31:14 | After call to gen | stmts2.go:31:2:31:14 | extract:0 ... := ... | +| stmts2.go:31:10:31:14 | Before call to gen | stmts2.go:31:10:31:12 | Before gen | +| stmts2.go:31:10:31:14 | call to gen | stmts2.go:30:1:34:1 | Exceptional Exit | +| stmts2.go:31:10:31:14 | call to gen | stmts2.go:31:10:31:14 | After call to gen | +| stmts2.go:32:2:32:17 | After declaration statement | stmts2.go:33:2:33:13 | Before return statement | +| stmts2.go:32:2:32:17 | After variable declaration | stmts2.go:32:2:32:17 | After declaration statement | +| stmts2.go:32:2:32:17 | declaration statement | stmts2.go:32:2:32:17 | variable declaration | +| stmts2.go:32:2:32:17 | variable declaration | stmts2.go:32:6:32:17 | value declaration specifier | +| stmts2.go:32:6:32:17 | After value declaration specifier | stmts2.go:32:2:32:17 | After variable declaration | +| stmts2.go:32:6:32:17 | assign:0 value declaration specifier | stmts2.go:32:6:32:17 | extract:1 value declaration specifier | +| stmts2.go:32:6:32:17 | extract:0 value declaration specifier | stmts2.go:32:6:32:17 | assign:0 value declaration specifier | +| stmts2.go:32:6:32:17 | extract:1 value declaration specifier | stmts2.go:32:6:32:17 | After value declaration specifier | +| stmts2.go:32:6:32:17 | value declaration specifier | stmts2.go:32:13:32:17 | Before call to gen | +| stmts2.go:32:13:32:15 | After gen | stmts2.go:32:13:32:17 | call to gen | +| stmts2.go:32:13:32:15 | Before gen | stmts2.go:32:13:32:15 | gen | +| stmts2.go:32:13:32:15 | gen | stmts2.go:32:13:32:15 | After gen | +| stmts2.go:32:13:32:17 | After call to gen | stmts2.go:32:6:32:17 | extract:0 value declaration specifier | +| stmts2.go:32:13:32:17 | Before call to gen | stmts2.go:32:13:32:15 | Before gen | +| stmts2.go:32:13:32:17 | call to gen | stmts2.go:30:1:34:1 | Exceptional Exit | +| stmts2.go:32:13:32:17 | call to gen | stmts2.go:32:13:32:17 | After call to gen | +| stmts2.go:33:2:33:13 | Before return statement | stmts2.go:33:9:33:13 | Before ...+... | +| stmts2.go:33:2:33:13 | return statement | stmts2.go:30:1:34:1 | Normal Exit | +| stmts2.go:33:9:33:9 | After x | stmts2.go:33:13:33:13 | Before y | +| stmts2.go:33:9:33:9 | Before x | stmts2.go:33:9:33:9 | x | +| stmts2.go:33:9:33:9 | x | stmts2.go:33:9:33:9 | After x | +| stmts2.go:33:9:33:13 | ...+... | stmts2.go:33:9:33:13 | After ...+... | +| stmts2.go:33:9:33:13 | After ...+... | stmts2.go:33:2:33:13 | return statement | +| stmts2.go:33:9:33:13 | Before ...+... | stmts2.go:33:9:33:9 | Before x | +| stmts2.go:33:13:33:13 | After y | stmts2.go:33:9:33:13 | ...+... | +| stmts2.go:33:13:33:13 | Before y | stmts2.go:33:13:33:13 | y | +| stmts2.go:33:13:33:13 | y | stmts2.go:33:13:33:13 | After y | +| stmts3.go:0:0:0:0 | After stmts3.go | stmts3.go:0:0:0:0 | Normal Exit | +| stmts3.go:0:0:0:0 | Entry | stmts3.go:0:0:0:0 | stmts3.go | +| stmts3.go:0:0:0:0 | Normal Exit | stmts3.go:0:0:0:0 | Exit | +| stmts3.go:0:0:0:0 | stmts3.go | stmts3.go:3:1:3:13 | import declaration | +| stmts3.go:3:1:3:13 | After import declaration | stmts3.go:5:1:12:1 | Before function declaration | +| stmts3.go:3:1:3:13 | import declaration | stmts3.go:3:8:3:13 | import specifier | +| stmts3.go:3:8:3:13 | import specifier | stmts3.go:3:1:3:13 | After import declaration | +| stmts3.go:5:1:12:1 | After function declaration | stmts3.go:14:1:16:1 | Before function declaration | +| stmts3.go:5:1:12:1 | Before function declaration | stmts3.go:5:1:12:1 | function declaration | +| stmts3.go:5:1:12:1 | Entry | stmts3.go:5:19:12:1 | block statement | +| stmts3.go:5:1:12:1 | Normal Exit | stmts3.go:5:1:12:1 | Exit | +| stmts3.go:5:1:12:1 | function declaration | stmts3.go:5:1:12:1 | After function declaration | +| stmts3.go:5:19:12:1 | block statement | stmts3.go:6:2:10:2 | declaration statement | +| stmts3.go:6:2:10:2 | After constant declaration | stmts3.go:6:2:10:2 | After declaration statement | +| stmts3.go:6:2:10:2 | After declaration statement | stmts3.go:11:2:11:26 | Before return statement | +| stmts3.go:6:2:10:2 | constant declaration | stmts3.go:7:3:7:12 | value declaration specifier | +| stmts3.go:6:2:10:2 | declaration statement | stmts3.go:6:2:10:2 | constant declaration | +| stmts3.go:7:3:7:12 | After value declaration specifier | stmts3.go:8:3:8:7 | value declaration specifier | +| stmts3.go:7:3:7:12 | assign:0 value declaration specifier | stmts3.go:7:3:7:12 | After value declaration specifier | +| stmts3.go:7:3:7:12 | value declaration specifier | stmts3.go:7:9:7:12 | Before iota | +| stmts3.go:7:9:7:12 | After iota | stmts3.go:7:3:7:12 | assign:0 value declaration specifier | +| stmts3.go:7:9:7:12 | Before iota | stmts3.go:7:9:7:12 | iota | +| stmts3.go:7:9:7:12 | iota | stmts3.go:7:9:7:12 | After iota | +| stmts3.go:8:3:8:7 | After value declaration specifier | stmts3.go:9:3:9:6 | value declaration specifier | +| stmts3.go:8:3:8:7 | assign:0 value declaration specifier | stmts3.go:8:3:8:7 | After value declaration specifier | +| stmts3.go:8:3:8:7 | value declaration specifier | stmts3.go:8:3:8:7 | zero-init:0 value declaration specifier | +| stmts3.go:8:3:8:7 | zero-init:0 value declaration specifier | stmts3.go:8:3:8:7 | assign:0 value declaration specifier | +| stmts3.go:9:3:9:6 | After value declaration specifier | stmts3.go:6:2:10:2 | After constant declaration | +| stmts3.go:9:3:9:6 | assign:0 value declaration specifier | stmts3.go:9:3:9:6 | After value declaration specifier | +| stmts3.go:9:3:9:6 | value declaration specifier | stmts3.go:9:3:9:6 | zero-init:0 value declaration specifier | +| stmts3.go:9:3:9:6 | zero-init:0 value declaration specifier | stmts3.go:9:3:9:6 | assign:0 value declaration specifier | +| stmts3.go:11:2:11:26 | Before return statement | stmts3.go:11:9:11:26 | Before ...-... | +| stmts3.go:11:2:11:26 | return statement | stmts3.go:5:1:12:1 | Normal Exit | +| stmts3.go:11:9:11:11 | After red | stmts3.go:11:15:11:19 | Before green | +| stmts3.go:11:9:11:11 | Before red | stmts3.go:11:9:11:11 | red | +| stmts3.go:11:9:11:11 | red | stmts3.go:11:9:11:11 | After red | +| stmts3.go:11:9:11:19 | ...+... | stmts3.go:11:9:11:19 | After ...+... | +| stmts3.go:11:9:11:19 | After ...+... | stmts3.go:11:23:11:26 | Before blue | +| stmts3.go:11:9:11:19 | Before ...+... | stmts3.go:11:9:11:11 | Before red | +| stmts3.go:11:9:11:26 | ...-... | stmts3.go:11:9:11:26 | After ...-... | +| stmts3.go:11:9:11:26 | After ...-... | stmts3.go:11:2:11:26 | return statement | +| stmts3.go:11:9:11:26 | Before ...-... | stmts3.go:11:9:11:19 | Before ...+... | +| stmts3.go:11:15:11:19 | After green | stmts3.go:11:9:11:19 | ...+... | +| stmts3.go:11:15:11:19 | Before green | stmts3.go:11:15:11:19 | green | +| stmts3.go:11:15:11:19 | green | stmts3.go:11:15:11:19 | After green | +| stmts3.go:11:23:11:26 | After blue | stmts3.go:11:9:11:26 | ...-... | +| stmts3.go:11:23:11:26 | Before blue | stmts3.go:11:23:11:26 | blue | +| stmts3.go:11:23:11:26 | blue | stmts3.go:11:23:11:26 | After blue | +| stmts3.go:14:1:16:1 | After function declaration | stmts3.go:18:1:20:1 | Before function declaration | +| stmts3.go:14:1:16:1 | Before function declaration | stmts3.go:14:1:16:1 | function declaration | +| stmts3.go:14:1:16:1 | Entry | stmts3.go:14:21:16:1 | block statement | +| stmts3.go:14:1:16:1 | Normal Exit | stmts3.go:14:1:16:1 | Exit | +| stmts3.go:14:1:16:1 | function declaration | stmts3.go:14:1:16:1 | After function declaration | +| stmts3.go:14:21:16:1 | After block statement | stmts3.go:14:1:16:1 | Normal Exit | +| stmts3.go:14:21:16:1 | arg:0 block statement | stmts3.go:14:21:16:1 | param-init:0 block statement | +| stmts3.go:14:21:16:1 | block statement | stmts3.go:14:21:16:1 | arg:0 block statement | +| stmts3.go:14:21:16:1 | param-init:0 block statement | stmts3.go:15:2:15:8 | ... = ... | +| stmts3.go:15:2:15:8 | ... = ... | stmts3.go:15:7:15:8 | Before 42 | +| stmts3.go:15:2:15:8 | After ... = ... | stmts3.go:14:21:16:1 | After block statement | +| stmts3.go:15:2:15:8 | assign:0 ... = ... | stmts3.go:15:2:15:8 | After ... = ... | +| stmts3.go:15:7:15:8 | 42 | stmts3.go:15:7:15:8 | After 42 | +| stmts3.go:15:7:15:8 | After 42 | stmts3.go:15:2:15:8 | assign:0 ... = ... | +| stmts3.go:15:7:15:8 | Before 42 | stmts3.go:15:7:15:8 | 42 | +| stmts3.go:18:1:20:1 | After function declaration | stmts3.go:0:0:0:0 | After stmts3.go | +| stmts3.go:18:1:20:1 | Before function declaration | stmts3.go:18:1:20:1 | function declaration | +| stmts3.go:18:1:20:1 | Entry | stmts3.go:18:15:20:1 | block statement | +| stmts3.go:18:1:20:1 | Normal Exit | stmts3.go:18:1:20:1 | Exit | +| stmts3.go:18:1:20:1 | function declaration | stmts3.go:18:1:20:1 | After function declaration | +| stmts3.go:18:15:20:1 | After block statement | stmts3.go:18:1:20:1 | Normal Exit | +| stmts3.go:18:15:20:1 | block statement | stmts3.go:19:2:19:23 | ... = ... | +| stmts3.go:19:2:19:11 | After selection of Usage | stmts3.go:19:15:19:23 | Before function literal | +| stmts3.go:19:2:19:11 | Before selection of Usage | stmts3.go:19:2:19:11 | selection of Usage | +| stmts3.go:19:2:19:11 | selection of Usage | stmts3.go:19:2:19:11 | After selection of Usage | +| stmts3.go:19:2:19:23 | ... = ... | stmts3.go:19:2:19:11 | Before selection of Usage | +| stmts3.go:19:2:19:23 | After ... = ... | stmts3.go:18:15:20:1 | After block statement | +| stmts3.go:19:2:19:23 | assign:0 ... = ... | stmts3.go:19:2:19:23 | After ... = ... | +| stmts3.go:19:15:19:23 | After function literal | stmts3.go:19:2:19:23 | assign:0 ... = ... | +| stmts3.go:19:15:19:23 | Before function literal | stmts3.go:19:15:19:23 | function literal | +| stmts3.go:19:15:19:23 | Entry | stmts3.go:19:22:19:23 | block statement | +| stmts3.go:19:15:19:23 | Normal Exit | stmts3.go:19:15:19:23 | Exit | +| stmts3.go:19:15:19:23 | function literal | stmts3.go:19:15:19:23 | After function literal | +| stmts3.go:19:22:19:23 | block statement | stmts3.go:19:15:19:23 | Normal Exit | +| stmts3.go:19:22:19:23 | block statement | stmts3.go:19:22:19:23 | block statement | +| stmts4.go:0:0:0:0 | After stmts4.go | stmts4.go:0:0:0:0 | Normal Exit | +| stmts4.go:0:0:0:0 | Entry | stmts4.go:0:0:0:0 | stmts4.go | +| stmts4.go:0:0:0:0 | Normal Exit | stmts4.go:0:0:0:0 | Exit | +| stmts4.go:0:0:0:0 | stmts4.go | stmts4.go:3:1:3:9 | variable declaration | +| stmts4.go:3:1:3:9 | After variable declaration | stmts4.go:5:1:5:26 | Before function declaration | +| stmts4.go:3:1:3:9 | variable declaration | stmts4.go:3:5:3:9 | value declaration specifier | +| stmts4.go:3:5:3:9 | After value declaration specifier | stmts4.go:3:1:3:9 | After variable declaration | +| stmts4.go:3:5:3:9 | value declaration specifier | stmts4.go:3:5:3:9 | zero-init:0 value declaration specifier | +| stmts4.go:3:5:3:9 | zero-init:0 value declaration specifier | stmts4.go:3:5:3:9 | After value declaration specifier | +| stmts4.go:5:1:5:26 | After function declaration | stmts4.go:0:0:0:0 | After stmts4.go | +| stmts4.go:5:1:5:26 | Before function declaration | stmts4.go:5:1:5:26 | function declaration | +| stmts4.go:5:1:5:26 | function declaration | stmts4.go:5:1:5:26 | After function declaration | +| stmts5.go:0:0:0:0 | After stmts5.go | stmts5.go:0:0:0:0 | Normal Exit | +| stmts5.go:0:0:0:0 | Entry | stmts5.go:0:0:0:0 | stmts5.go | +| stmts5.go:0:0:0:0 | Normal Exit | stmts5.go:0:0:0:0 | Exit | +| stmts5.go:0:0:0:0 | stmts5.go | stmts5.go:3:1:5:1 | type declaration | +| stmts5.go:3:1:5:1 | After type declaration | stmts5.go:7:1:9:1 | Before function declaration | +| stmts5.go:3:1:5:1 | type declaration | stmts5.go:3:6:5:1 | type declaration specifier | +| stmts5.go:3:6:5:1 | type declaration specifier | stmts5.go:3:1:5:1 | After type declaration | +| stmts5.go:7:1:9:1 | After function declaration | stmts5.go:11:1:12:1 | Before function declaration | +| stmts5.go:7:1:9:1 | Before function declaration | stmts5.go:7:1:9:1 | function declaration | +| stmts5.go:7:1:9:1 | Entry | stmts5.go:7:33:9:1 | block statement | +| stmts5.go:7:1:9:1 | Normal Exit | stmts5.go:7:1:9:1 | Exit | +| stmts5.go:7:1:9:1 | function declaration | stmts5.go:7:1:9:1 | After function declaration | +| stmts5.go:7:33:9:1 | After block statement | stmts5.go:7:1:9:1 | Normal Exit | +| stmts5.go:7:33:9:1 | arg:0 block statement | stmts5.go:7:33:9:1 | param-init:0 block statement | +| stmts5.go:7:33:9:1 | arg:-1 block statement | stmts5.go:7:33:9:1 | param-init:-1 block statement | +| stmts5.go:7:33:9:1 | block statement | stmts5.go:7:33:9:1 | arg:-1 block statement | +| stmts5.go:7:33:9:1 | param-init:0 block statement | stmts5.go:8:2:8:16 | ... += ... | +| stmts5.go:7:33:9:1 | param-init:-1 block statement | stmts5.go:7:33:9:1 | arg:0 block statement | +| stmts5.go:8:2:8:3 | After me | stmts5.go:8:2:8:7 | selection of val | +| stmts5.go:8:2:8:3 | Before me | stmts5.go:8:2:8:3 | me | +| stmts5.go:8:2:8:3 | me | stmts5.go:8:2:8:3 | After me | +| stmts5.go:8:2:8:7 | After selection of val | stmts5.go:8:12:8:16 | Before other | +| stmts5.go:8:2:8:7 | Before selection of val | stmts5.go:8:2:8:3 | Before me | +| stmts5.go:8:2:8:7 | selection of val | stmts5.go:8:2:8:7 | After selection of val | +| stmts5.go:8:2:8:16 | ... += ... | stmts5.go:8:2:8:7 | Before selection of val | +| stmts5.go:8:2:8:16 | After ... += ... | stmts5.go:7:33:9:1 | After block statement | +| stmts5.go:8:2:8:16 | assign:0 ... += ... | stmts5.go:8:2:8:16 | After ... += ... | +| stmts5.go:8:2:8:16 | compound-rhs ... += ... | stmts5.go:8:2:8:16 | assign:0 ... += ... | +| stmts5.go:8:12:8:16 | After other | stmts5.go:8:2:8:16 | compound-rhs ... += ... | +| stmts5.go:8:12:8:16 | Before other | stmts5.go:8:12:8:16 | other | +| stmts5.go:8:12:8:16 | other | stmts5.go:8:12:8:16 | After other | +| stmts5.go:11:1:12:1 | After function declaration | stmts5.go:0:0:0:0 | After stmts5.go | +| stmts5.go:11:1:12:1 | Before function declaration | stmts5.go:11:1:12:1 | function declaration | +| stmts5.go:11:1:12:1 | Entry | stmts5.go:11:20:12:1 | block statement | +| stmts5.go:11:1:12:1 | Normal Exit | stmts5.go:11:1:12:1 | Exit | +| stmts5.go:11:1:12:1 | function declaration | stmts5.go:11:1:12:1 | After function declaration | +| stmts5.go:11:20:12:1 | block statement | stmts5.go:11:1:12:1 | Normal Exit | +| stmts5.go:11:20:12:1 | block statement | stmts5.go:11:20:12:1 | block statement | +| stmts6.go:0:0:0:0 | After stmts6.go | stmts6.go:0:0:0:0 | Normal Exit | +| stmts6.go:0:0:0:0 | Entry | stmts6.go:0:0:0:0 | stmts6.go | +| stmts6.go:0:0:0:0 | Normal Exit | stmts6.go:0:0:0:0 | Exit | +| stmts6.go:0:0:0:0 | stmts6.go | stmts6.go:3:1:8:1 | Before function declaration | +| stmts6.go:3:1:8:1 | After function declaration | stmts6.go:0:0:0:0 | After stmts6.go | +| stmts6.go:3:1:8:1 | Before function declaration | stmts6.go:3:1:8:1 | function declaration | +| stmts6.go:3:1:8:1 | Entry | stmts6.go:3:19:8:1 | block statement | +| stmts6.go:3:1:8:1 | Normal Exit | stmts6.go:3:1:8:1 | Exit | +| stmts6.go:3:1:8:1 | function declaration | stmts6.go:3:1:8:1 | After function declaration | +| stmts6.go:3:19:8:1 | block statement | stmts6.go:4:2:6:2 | if statement | +| stmts6.go:4:2:6:2 | if statement | stmts6.go:4:5:4:8 | Before true | +| stmts6.go:4:5:4:8 | After true [true] | stmts6.go:4:10:6:2 | block statement | +| stmts6.go:4:5:4:8 | Before true | stmts6.go:4:5:4:8 | true | +| stmts6.go:4:5:4:8 | true | stmts6.go:4:5:4:8 | After true [true] | +| stmts6.go:4:10:6:2 | block statement | stmts6.go:5:3:5:11 | Before return statement | +| stmts6.go:5:3:5:11 | Before return statement | stmts6.go:5:10:5:11 | Before 42 | +| stmts6.go:5:3:5:11 | return statement | stmts6.go:3:1:8:1 | Normal Exit | +| stmts6.go:5:10:5:11 | 42 | stmts6.go:5:10:5:11 | After 42 | +| stmts6.go:5:10:5:11 | After 42 | stmts6.go:5:3:5:11 | return statement | +| stmts6.go:5:10:5:11 | Before 42 | stmts6.go:5:10:5:11 | 42 | +| stmts7.go:0:0:0:0 | After stmts7.go | stmts7.go:0:0:0:0 | Normal Exit | +| stmts7.go:0:0:0:0 | Entry | stmts7.go:0:0:0:0 | stmts7.go | +| stmts7.go:0:0:0:0 | Normal Exit | stmts7.go:0:0:0:0 | Exit | +| stmts7.go:0:0:0:0 | stmts7.go | stmts7.go:3:1:3:12 | import declaration | +| stmts7.go:3:1:3:12 | After import declaration | stmts7.go:5:1:8:1 | Before function declaration | +| stmts7.go:3:1:3:12 | import declaration | stmts7.go:3:8:3:12 | import specifier | +| stmts7.go:3:8:3:12 | import specifier | stmts7.go:3:1:3:12 | After import declaration | +| stmts7.go:5:1:8:1 | After function declaration | stmts7.go:10:1:13:1 | Before function declaration | +| stmts7.go:5:1:8:1 | Before function declaration | stmts7.go:5:1:8:1 | function declaration | +| stmts7.go:5:1:8:1 | Entry | stmts7.go:5:21:8:1 | block statement | +| stmts7.go:5:1:8:1 | Exceptional Exit | stmts7.go:5:1:8:1 | Exit | +| stmts7.go:5:1:8:1 | Normal Exit | stmts7.go:5:1:8:1 | Exit | +| stmts7.go:5:1:8:1 | function declaration | stmts7.go:5:1:8:1 | After function declaration | +| stmts7.go:5:21:8:1 | After block statement | stmts7.go:5:1:8:1 | Normal Exit | +| stmts7.go:5:21:8:1 | block statement | stmts7.go:6:2:6:18 | ... := ... | +| stmts7.go:6:2:6:18 | ... := ... | stmts7.go:6:10:6:18 | Before call to recover | +| stmts7.go:6:2:6:18 | After ... := ... | stmts7.go:7:2:7:33 | expression statement | +| stmts7.go:6:2:6:18 | assign:0 ... := ... | stmts7.go:6:2:6:18 | After ... := ... | +| stmts7.go:6:10:6:16 | After recover | stmts7.go:6:10:6:18 | call to recover | +| stmts7.go:6:10:6:16 | Before recover | stmts7.go:6:10:6:16 | recover | +| stmts7.go:6:10:6:16 | recover | stmts7.go:6:10:6:16 | After recover | +| stmts7.go:6:10:6:18 | After call to recover | stmts7.go:6:2:6:18 | assign:0 ... := ... | +| stmts7.go:6:10:6:18 | Before call to recover | stmts7.go:6:10:6:16 | Before recover | +| stmts7.go:6:10:6:18 | call to recover | stmts7.go:6:10:6:18 | After call to recover | +| stmts7.go:7:2:7:12 | After selection of Println | stmts7.go:7:14:7:26 | Before "recovered: " | +| stmts7.go:7:2:7:12 | Before selection of Println | stmts7.go:7:2:7:12 | selection of Println | +| stmts7.go:7:2:7:12 | selection of Println | stmts7.go:7:2:7:12 | After selection of Println | +| stmts7.go:7:2:7:33 | After call to Println | stmts7.go:7:2:7:33 | After expression statement | +| stmts7.go:7:2:7:33 | After expression statement | stmts7.go:5:21:8:1 | After block statement | +| stmts7.go:7:2:7:33 | Before call to Println | stmts7.go:7:2:7:12 | Before selection of Println | +| stmts7.go:7:2:7:33 | call to Println | stmts7.go:5:1:8:1 | Exceptional Exit | +| stmts7.go:7:2:7:33 | call to Println | stmts7.go:7:2:7:33 | After call to Println | +| stmts7.go:7:2:7:33 | expression statement | stmts7.go:7:2:7:33 | Before call to Println | +| stmts7.go:7:14:7:26 | "recovered: " | stmts7.go:7:14:7:26 | After "recovered: " | +| stmts7.go:7:14:7:26 | After "recovered: " | stmts7.go:7:29:7:32 | Before blah | +| stmts7.go:7:14:7:26 | Before "recovered: " | stmts7.go:7:14:7:26 | "recovered: " | +| stmts7.go:7:29:7:32 | After blah | stmts7.go:7:2:7:33 | call to Println | +| stmts7.go:7:29:7:32 | Before blah | stmts7.go:7:29:7:32 | blah | +| stmts7.go:7:29:7:32 | blah | stmts7.go:7:29:7:32 | After blah | +| stmts7.go:10:1:13:1 | After function declaration | stmts7.go:15:1:17:1 | type declaration | +| stmts7.go:10:1:13:1 | Before function declaration | stmts7.go:10:1:13:1 | function declaration | +| stmts7.go:10:1:13:1 | Entry | stmts7.go:10:19:13:1 | block statement | +| stmts7.go:10:1:13:1 | Exceptional Exit | stmts7.go:10:1:13:1 | Exit | +| stmts7.go:10:1:13:1 | function declaration | stmts7.go:10:1:13:1 | After function declaration | +| stmts7.go:10:19:13:1 | block statement | stmts7.go:11:2:11:21 | Before defer statement | +| stmts7.go:11:2:11:21 | After defer statement | stmts7.go:12:2:12:10 | expression statement | +| stmts7.go:11:2:11:21 | Before defer statement | stmts7.go:11:8:11:21 | Before call to recoverPanic | +| stmts7.go:11:2:11:21 | defer statement | stmts7.go:11:2:11:21 | After defer statement | +| stmts7.go:11:8:11:19 | After recoverPanic | stmts7.go:11:8:11:21 | call to recoverPanic | +| stmts7.go:11:8:11:19 | Before recoverPanic | stmts7.go:11:8:11:19 | recoverPanic | +| stmts7.go:11:8:11:19 | recoverPanic | stmts7.go:11:8:11:19 | After recoverPanic | +| stmts7.go:11:8:11:21 | After call to recoverPanic | stmts7.go:11:2:11:21 | defer statement | +| stmts7.go:11:8:11:21 | Before call to recoverPanic | stmts7.go:11:8:11:19 | Before recoverPanic | +| stmts7.go:11:8:11:21 | call to recoverPanic | stmts7.go:10:1:13:1 | Exceptional Exit | +| stmts7.go:11:8:11:21 | call to recoverPanic | stmts7.go:11:8:11:21 | After call to recoverPanic | +| stmts7.go:12:2:12:6 | After panic | stmts7.go:12:8:12:9 | Before "" | +| stmts7.go:12:2:12:6 | Before panic | stmts7.go:12:2:12:6 | panic | +| stmts7.go:12:2:12:6 | panic | stmts7.go:12:2:12:6 | After panic | +| stmts7.go:12:2:12:10 | Before call to panic | stmts7.go:12:2:12:6 | Before panic | +| stmts7.go:12:2:12:10 | call to panic | stmts7.go:10:1:13:1 | Exceptional Exit | +| stmts7.go:12:2:12:10 | expression statement | stmts7.go:12:2:12:10 | Before call to panic | +| stmts7.go:12:8:12:9 | "" | stmts7.go:12:8:12:9 | After "" | +| stmts7.go:12:8:12:9 | After "" | stmts7.go:12:2:12:10 | call to panic | +| stmts7.go:12:8:12:9 | Before "" | stmts7.go:12:8:12:9 | "" | +| stmts7.go:15:1:17:1 | After type declaration | stmts7.go:19:1:21:1 | Before function declaration | +| stmts7.go:15:1:17:1 | type declaration | stmts7.go:15:6:17:1 | type declaration specifier | +| stmts7.go:15:6:17:1 | type declaration specifier | stmts7.go:15:1:17:1 | After type declaration | +| stmts7.go:19:1:21:1 | After function declaration | stmts7.go:23:1:28:1 | Before function declaration | +| stmts7.go:19:1:21:1 | Before function declaration | stmts7.go:19:1:21:1 | function declaration | +| stmts7.go:19:1:21:1 | Entry | stmts7.go:19:32:21:1 | block statement | +| stmts7.go:19:1:21:1 | Exceptional Exit | stmts7.go:19:1:21:1 | Exit | +| stmts7.go:19:1:21:1 | Normal Exit | stmts7.go:19:1:21:1 | Exit | +| stmts7.go:19:1:21:1 | function declaration | stmts7.go:19:1:21:1 | After function declaration | +| stmts7.go:19:32:21:1 | After block statement | stmts7.go:19:1:21:1 | Normal Exit | +| stmts7.go:19:32:21:1 | arg:-1 block statement | stmts7.go:19:32:21:1 | param-init:-1 block statement | +| stmts7.go:19:32:21:1 | block statement | stmts7.go:19:32:21:1 | arg:-1 block statement | +| stmts7.go:19:32:21:1 | param-init:-1 block statement | stmts7.go:20:2:20:13 | expression statement | +| stmts7.go:20:2:20:8 | After methods | stmts7.go:20:2:20:8 | implicit-deref methods | +| stmts7.go:20:2:20:8 | Before methods | stmts7.go:20:2:20:8 | methods | +| stmts7.go:20:2:20:8 | implicit-deref methods | stmts7.go:20:2:20:11 | selection of fn | +| stmts7.go:20:2:20:8 | methods | stmts7.go:20:2:20:8 | After methods | +| stmts7.go:20:2:20:11 | After selection of fn | stmts7.go:20:2:20:13 | call to fn | +| stmts7.go:20:2:20:11 | Before selection of fn | stmts7.go:20:2:20:8 | Before methods | +| stmts7.go:20:2:20:11 | selection of fn | stmts7.go:20:2:20:11 | After selection of fn | +| stmts7.go:20:2:20:13 | After call to fn | stmts7.go:20:2:20:13 | After expression statement | +| stmts7.go:20:2:20:13 | After expression statement | stmts7.go:19:32:21:1 | After block statement | +| stmts7.go:20:2:20:13 | Before call to fn | stmts7.go:20:2:20:11 | Before selection of fn | +| stmts7.go:20:2:20:13 | call to fn | stmts7.go:19:1:21:1 | Exceptional Exit | +| stmts7.go:20:2:20:13 | call to fn | stmts7.go:20:2:20:13 | After call to fn | +| stmts7.go:20:2:20:13 | expression statement | stmts7.go:20:2:20:13 | Before call to fn | +| stmts7.go:23:1:28:1 | After function declaration | stmts7.go:0:0:0:0 | After stmts7.go | +| stmts7.go:23:1:28:1 | Before function declaration | stmts7.go:23:1:28:1 | function declaration | +| stmts7.go:23:1:28:1 | Entry | stmts7.go:23:40:28:1 | block statement | +| stmts7.go:23:1:28:1 | Exceptional Exit | stmts7.go:23:1:28:1 | Exit | +| stmts7.go:23:1:28:1 | Normal Exit | stmts7.go:23:1:28:1 | Exit | +| stmts7.go:23:1:28:1 | function declaration | stmts7.go:23:1:28:1 | After function declaration | +| stmts7.go:23:40:28:1 | arg:0 block statement | stmts7.go:23:40:28:1 | param-init:0 block statement | +| stmts7.go:23:40:28:1 | block statement | stmts7.go:23:40:28:1 | arg:0 block statement | +| stmts7.go:23:40:28:1 | param-init:0 block statement | stmts7.go:24:2:24:20 | Before defer statement | +| stmts7.go:24:2:24:20 | After defer statement | stmts7.go:25:2:25:23 | Before defer statement | +| stmts7.go:24:2:24:20 | Before defer statement | stmts7.go:24:8:24:20 | Before call to fn | +| stmts7.go:24:2:24:20 | defer statement | stmts7.go:24:2:24:20 | After defer statement | +| stmts7.go:24:8:24:15 | After callback | stmts7.go:24:8:24:18 | selection of fn | +| stmts7.go:24:8:24:15 | Before callback | stmts7.go:24:8:24:15 | callback | +| stmts7.go:24:8:24:15 | callback | stmts7.go:24:8:24:15 | After callback | +| stmts7.go:24:8:24:18 | After selection of fn | stmts7.go:24:8:24:20 | call to fn | +| stmts7.go:24:8:24:18 | Before selection of fn | stmts7.go:24:8:24:15 | Before callback | +| stmts7.go:24:8:24:18 | selection of fn | stmts7.go:24:8:24:18 | After selection of fn | +| stmts7.go:24:8:24:20 | After call to fn | stmts7.go:24:2:24:20 | defer statement | +| stmts7.go:24:8:24:20 | Before call to fn | stmts7.go:24:8:24:18 | Before selection of fn | +| stmts7.go:24:8:24:20 | call to fn | stmts7.go:23:1:28:1 | Exceptional Exit | +| stmts7.go:24:8:24:20 | call to fn | stmts7.go:24:8:24:20 | After call to fn | +| stmts7.go:25:2:25:23 | After defer statement | stmts7.go:26:2:26:31 | expression statement | +| stmts7.go:25:2:25:23 | Before defer statement | stmts7.go:25:8:25:23 | Before call to fn | +| stmts7.go:25:2:25:23 | defer statement | stmts7.go:25:2:25:23 | After defer statement | +| stmts7.go:25:8:25:18 | (...) | stmts7.go:25:8:25:18 | After (...) | +| stmts7.go:25:8:25:18 | After (...) | stmts7.go:25:8:25:18 | implicit-deref (...) | +| stmts7.go:25:8:25:18 | implicit-deref (...) | stmts7.go:25:8:25:21 | selection of fn | +| stmts7.go:25:8:25:21 | After selection of fn | stmts7.go:25:8:25:23 | call to fn | +| stmts7.go:25:8:25:21 | Before selection of fn | stmts7.go:25:8:25:18 | (...) | +| stmts7.go:25:8:25:21 | selection of fn | stmts7.go:25:8:25:21 | After selection of fn | +| stmts7.go:25:8:25:23 | After call to fn | stmts7.go:25:2:25:23 | defer statement | +| stmts7.go:25:8:25:23 | Before call to fn | stmts7.go:25:8:25:21 | Before selection of fn | +| stmts7.go:25:8:25:23 | call to fn | stmts7.go:23:1:28:1 | Exceptional Exit | +| stmts7.go:25:8:25:23 | call to fn | stmts7.go:25:8:25:23 | After call to fn | +| stmts7.go:26:2:26:12 | After selection of Println | stmts7.go:26:14:26:30 | Before "print something" | +| stmts7.go:26:2:26:12 | Before selection of Println | stmts7.go:26:2:26:12 | selection of Println | +| stmts7.go:26:2:26:12 | selection of Println | stmts7.go:26:2:26:12 | After selection of Println | +| stmts7.go:26:2:26:31 | After call to Println | stmts7.go:26:2:26:31 | After expression statement | +| stmts7.go:26:2:26:31 | After expression statement | stmts7.go:27:2:27:13 | Before return statement | +| stmts7.go:26:2:26:31 | Before call to Println | stmts7.go:26:2:26:12 | Before selection of Println | +| stmts7.go:26:2:26:31 | call to Println | stmts7.go:23:1:28:1 | Exceptional Exit | +| stmts7.go:26:2:26:31 | call to Println | stmts7.go:26:2:26:31 | After call to Println | +| stmts7.go:26:2:26:31 | expression statement | stmts7.go:26:2:26:31 | Before call to Println | +| stmts7.go:26:14:26:30 | "print something" | stmts7.go:26:14:26:30 | After "print something" | +| stmts7.go:26:14:26:30 | After "print something" | stmts7.go:26:2:26:31 | call to Println | +| stmts7.go:26:14:26:30 | Before "print something" | stmts7.go:26:14:26:30 | "print something" | +| stmts7.go:27:2:27:13 | Before return statement | stmts7.go:27:9:27:13 | Before false | +| stmts7.go:27:2:27:13 | return statement | stmts7.go:23:1:28:1 | Normal Exit | +| stmts7.go:27:9:27:13 | After false | stmts7.go:27:2:27:13 | return statement | +| stmts7.go:27:9:27:13 | Before false | stmts7.go:27:9:27:13 | false | +| stmts7.go:27:9:27:13 | false | stmts7.go:27:9:27:13 | After false | +| stmts8.go:0:0:0:0 | After stmts8.go | stmts8.go:0:0:0:0 | Normal Exit | +| stmts8.go:0:0:0:0 | Entry | stmts8.go:0:0:0:0 | stmts8.go | +| stmts8.go:0:0:0:0 | Normal Exit | stmts8.go:0:0:0:0 | Exit | +| stmts8.go:0:0:0:0 | stmts8.go | stmts8.go:3:1:7:1 | Before function declaration | +| stmts8.go:3:1:7:1 | After function declaration | stmts8.go:9:1:14:1 | Before function declaration | +| stmts8.go:3:1:7:1 | Before function declaration | stmts8.go:3:1:7:1 | function declaration | +| stmts8.go:3:1:7:1 | Entry | stmts8.go:3:31:7:1 | block statement | +| stmts8.go:3:1:7:1 | Normal Exit | stmts8.go:3:1:7:1 | Exit | +| stmts8.go:3:1:7:1 | function declaration | stmts8.go:3:1:7:1 | After function declaration | +| stmts8.go:3:31:7:1 | arg:0 block statement | stmts8.go:3:31:7:1 | param-init:0 block statement | +| stmts8.go:3:31:7:1 | block statement | stmts8.go:3:31:7:1 | arg:0 block statement | +| stmts8.go:3:31:7:1 | param-init:0 block statement | stmts8.go:4:2:4:12 | ... := ... | +| stmts8.go:4:2:4:12 | ... := ... | stmts8.go:4:7:4:12 | Before ...>>... | +| stmts8.go:4:2:4:12 | After ... := ... | stmts8.go:5:2:5:13 | ... := ... | +| stmts8.go:4:2:4:12 | assign:0 ... := ... | stmts8.go:4:2:4:12 | After ... := ... | +| stmts8.go:4:7:4:7 | After x | stmts8.go:4:12:4:12 | Before 5 | +| stmts8.go:4:7:4:7 | Before x | stmts8.go:4:7:4:7 | x | +| stmts8.go:4:7:4:7 | x | stmts8.go:4:7:4:7 | After x | +| stmts8.go:4:7:4:12 | ...>>... | stmts8.go:4:7:4:12 | After ...>>... | +| stmts8.go:4:7:4:12 | After ...>>... | stmts8.go:4:2:4:12 | assign:0 ... := ... | +| stmts8.go:4:7:4:12 | Before ...>>... | stmts8.go:4:7:4:7 | Before x | +| stmts8.go:4:12:4:12 | 5 | stmts8.go:4:12:4:12 | After 5 | +| stmts8.go:4:12:4:12 | After 5 | stmts8.go:4:7:4:12 | ...>>... | +| stmts8.go:4:12:4:12 | Before 5 | stmts8.go:4:12:4:12 | 5 | +| stmts8.go:5:2:5:13 | ... := ... | stmts8.go:5:7:5:13 | Before ...%... | +| stmts8.go:5:2:5:13 | After ... := ... | stmts8.go:6:2:6:17 | Before return statement | +| stmts8.go:5:2:5:13 | assign:0 ... := ... | stmts8.go:5:2:5:13 | After ... := ... | +| stmts8.go:5:7:5:7 | After x | stmts8.go:5:12:5:12 | Before 1 | +| stmts8.go:5:7:5:7 | Before x | stmts8.go:5:7:5:7 | x | +| stmts8.go:5:7:5:7 | x | stmts8.go:5:7:5:7 | After x | +| stmts8.go:5:7:5:13 | ...%... | stmts8.go:5:7:5:13 | After ...%... | +| stmts8.go:5:7:5:13 | After ...%... | stmts8.go:5:2:5:13 | assign:0 ... := ... | +| stmts8.go:5:7:5:13 | Before ...%... | stmts8.go:5:7:5:7 | Before x | +| stmts8.go:5:12:5:12 | 1 | stmts8.go:5:12:5:12 | After 1 | +| stmts8.go:5:12:5:12 | After 1 | stmts8.go:5:7:5:13 | ...%... | +| stmts8.go:5:12:5:12 | Before 1 | stmts8.go:5:12:5:12 | 1 | +| stmts8.go:6:2:6:17 | Before return statement | stmts8.go:6:9:6:9 | Before z | +| stmts8.go:6:2:6:17 | return statement | stmts8.go:3:1:7:1 | Normal Exit | +| stmts8.go:6:9:6:9 | After z | stmts8.go:6:12:6:17 | Before ...%... | +| stmts8.go:6:9:6:9 | Before z | stmts8.go:6:9:6:9 | z | +| stmts8.go:6:9:6:9 | z | stmts8.go:6:9:6:9 | After z | +| stmts8.go:6:12:6:12 | After y | stmts8.go:6:16:6:17 | Before 13 | +| stmts8.go:6:12:6:12 | Before y | stmts8.go:6:12:6:12 | y | +| stmts8.go:6:12:6:12 | y | stmts8.go:6:12:6:12 | After y | +| stmts8.go:6:12:6:17 | ...%... | stmts8.go:6:12:6:17 | After ...%... | +| stmts8.go:6:12:6:17 | After ...%... | stmts8.go:6:2:6:17 | return statement | +| stmts8.go:6:12:6:17 | Before ...%... | stmts8.go:6:12:6:12 | Before y | +| stmts8.go:6:16:6:17 | 13 | stmts8.go:6:16:6:17 | After 13 | +| stmts8.go:6:16:6:17 | After 13 | stmts8.go:6:12:6:17 | ...%... | +| stmts8.go:6:16:6:17 | Before 13 | stmts8.go:6:16:6:17 | 13 | +| stmts8.go:9:1:14:1 | After function declaration | stmts8.go:0:0:0:0 | After stmts8.go | +| stmts8.go:9:1:14:1 | Before function declaration | stmts8.go:9:1:14:1 | function declaration | +| stmts8.go:9:1:14:1 | Entry | stmts8.go:9:21:14:1 | block statement | +| stmts8.go:9:1:14:1 | Normal Exit | stmts8.go:9:1:14:1 | Exit | +| stmts8.go:9:1:14:1 | function declaration | stmts8.go:9:1:14:1 | After function declaration | +| stmts8.go:9:21:14:1 | block statement | stmts8.go:10:2:12:2 | if statement | +| stmts8.go:10:2:12:2 | After if statement | stmts8.go:13:2:13:13 | Before return statement | +| stmts8.go:10:2:12:2 | if statement | stmts8.go:10:5:10:9 | Before linux | +| stmts8.go:10:5:10:9 | After linux [false] | stmts8.go:10:2:12:2 | After if statement | +| stmts8.go:10:5:10:9 | After linux [true] | stmts8.go:10:11:12:2 | block statement | +| stmts8.go:10:5:10:9 | Before linux | stmts8.go:10:5:10:9 | linux | +| stmts8.go:10:5:10:9 | linux | stmts8.go:10:5:10:9 | After linux [false] | +| stmts8.go:10:5:10:9 | linux | stmts8.go:10:5:10:9 | After linux [true] | +| stmts8.go:10:11:12:2 | block statement | stmts8.go:11:3:11:13 | Before return statement | +| stmts8.go:11:3:11:13 | Before return statement | stmts8.go:11:10:11:13 | Before true | +| stmts8.go:11:3:11:13 | return statement | stmts8.go:9:1:14:1 | Normal Exit | +| stmts8.go:11:10:11:13 | After true | stmts8.go:11:3:11:13 | return statement | +| stmts8.go:11:10:11:13 | Before true | stmts8.go:11:10:11:13 | true | +| stmts8.go:11:10:11:13 | true | stmts8.go:11:10:11:13 | After true | +| stmts8.go:13:2:13:13 | Before return statement | stmts8.go:13:9:13:13 | Before false | +| stmts8.go:13:2:13:13 | return statement | stmts8.go:9:1:14:1 | Normal Exit | +| stmts8.go:13:9:13:13 | After false | stmts8.go:13:2:13:13 | return statement | +| stmts8.go:13:9:13:13 | Before false | stmts8.go:13:9:13:13 | false | +| stmts8.go:13:9:13:13 | false | stmts8.go:13:9:13:13 | After false | +| stmts.go:0:0:0:0 | After stmts.go | stmts.go:0:0:0:0 | Normal Exit | +| stmts.go:0:0:0:0 | Entry | stmts.go:0:0:0:0 | stmts.go | +| stmts.go:0:0:0:0 | Normal Exit | stmts.go:0:0:0:0 | Exit | +| stmts.go:0:0:0:0 | stmts.go | stmts.go:3:1:3:12 | import declaration | +| stmts.go:3:1:3:12 | After import declaration | stmts.go:10:1:43:1 | Before function declaration | +| stmts.go:3:1:3:12 | import declaration | stmts.go:3:8:3:12 | import specifier | +| stmts.go:3:8:3:12 | import specifier | stmts.go:3:1:3:12 | After import declaration | +| stmts.go:10:1:43:1 | After function declaration | stmts.go:46:1:62:1 | Before function declaration | +| stmts.go:10:1:43:1 | Before function declaration | stmts.go:10:1:43:1 | function declaration | +| stmts.go:10:1:43:1 | Entry | stmts.go:10:20:43:1 | block statement | +| stmts.go:10:1:43:1 | Exceptional Exit | stmts.go:10:1:43:1 | Exit | +| stmts.go:10:1:43:1 | function declaration | stmts.go:10:1:43:1 | After function declaration | +| stmts.go:10:20:43:1 | arg:0 block statement | stmts.go:10:20:43:1 | param-init:0 block statement | +| stmts.go:10:20:43:1 | block statement | stmts.go:10:20:43:1 | arg:0 block statement | +| stmts.go:10:20:43:1 | param-init:0 block statement | stmts.go:11:2:18:2 | block statement | +| stmts.go:11:2:18:2 | After block statement | stmts.go:20:2:20:18 | expression statement | +| stmts.go:11:2:18:2 | block statement | stmts.go:12:3:14:3 | if statement | +| stmts.go:12:3:14:3 | After if statement | stmts.go:15:3:16:3 | block statement | +| stmts.go:12:3:14:3 | if statement | stmts.go:12:6:12:7 | !... | +| stmts.go:12:6:12:7 | !... | stmts.go:12:7:12:7 | Before b | +| stmts.go:12:6:12:7 | After !... [false] | stmts.go:12:3:14:3 | After if statement | +| stmts.go:12:6:12:7 | After !... [true] | stmts.go:12:9:14:3 | block statement | +| stmts.go:12:7:12:7 | After b [false] | stmts.go:12:6:12:7 | After !... [true] | +| stmts.go:12:7:12:7 | After b [true] | stmts.go:12:6:12:7 | After !... [false] | +| stmts.go:12:7:12:7 | Before b | stmts.go:12:7:12:7 | b | +| stmts.go:12:7:12:7 | b | stmts.go:12:7:12:7 | After b [false] | +| stmts.go:12:7:12:7 | b | stmts.go:12:7:12:7 | After b [true] | +| stmts.go:12:9:14:3 | block statement | stmts.go:13:4:13:13 | Before goto statement | +| stmts.go:13:4:13:13 | Before goto statement | stmts.go:13:4:13:13 | goto statement | +| stmts.go:13:4:13:13 | goto statement | stmts.go:22:1:37:2 | labeled statement | +| stmts.go:15:3:16:3 | block statement | stmts.go:17:3:17:3 | empty statement | +| stmts.go:17:3:17:3 | empty statement | stmts.go:11:2:18:2 | After block statement | +| stmts.go:20:2:20:12 | After selection of Println | stmts.go:20:14:20:17 | Before "Hi" | +| stmts.go:20:2:20:12 | Before selection of Println | stmts.go:20:2:20:12 | selection of Println | +| stmts.go:20:2:20:12 | selection of Println | stmts.go:20:2:20:12 | After selection of Println | +| stmts.go:20:2:20:18 | After call to Println | stmts.go:20:2:20:18 | After expression statement | +| stmts.go:20:2:20:18 | After expression statement | stmts.go:22:1:37:2 | labeled statement | +| stmts.go:20:2:20:18 | Before call to Println | stmts.go:20:2:20:12 | Before selection of Println | +| stmts.go:20:2:20:18 | call to Println | stmts.go:10:1:43:1 | Exceptional Exit | +| stmts.go:20:2:20:18 | call to Println | stmts.go:20:2:20:18 | After call to Println | +| stmts.go:20:2:20:18 | expression statement | stmts.go:20:2:20:18 | Before call to Println | +| stmts.go:20:14:20:17 | "Hi" | stmts.go:20:14:20:17 | After "Hi" | +| stmts.go:20:14:20:17 | After "Hi" | stmts.go:20:2:20:18 | call to Println | +| stmts.go:20:14:20:17 | Before "Hi" | stmts.go:20:14:20:17 | "Hi" | +| stmts.go:22:1:37:2 | After labeled statement | stmts.go:39:2:39:7 | ... := ... | +| stmts.go:22:1:37:2 | labeled statement | stmts.go:23:2:37:2 | for statement | +| stmts.go:23:2:37:2 | After for statement | stmts.go:22:1:37:2 | After labeled statement | +| stmts.go:23:2:37:2 | [LoopHeader] for statement | stmts.go:23:6:23:9 | Before true | +| stmts.go:23:2:37:2 | for statement | stmts.go:23:6:23:9 | Before true | +| stmts.go:23:6:23:9 | After true [true] | stmts.go:23:11:37:2 | block statement | +| stmts.go:23:6:23:9 | Before true | stmts.go:23:6:23:9 | true | +| stmts.go:23:6:23:9 | true | stmts.go:23:6:23:9 | After true [true] | +| stmts.go:23:11:37:2 | After block statement | stmts.go:23:2:37:2 | [LoopHeader] for statement | +| stmts.go:23:11:37:2 | block statement | stmts.go:24:3:36:3 | for statement | +| stmts.go:24:3:36:3 | After for statement | stmts.go:23:11:37:2 | After block statement | +| stmts.go:24:3:36:3 | [LoopHeader] for statement | stmts.go:24:23:24:25 | Before increment statement | +| stmts.go:24:3:36:3 | for statement | stmts.go:24:7:24:12 | ... := ... | +| stmts.go:24:7:24:12 | ... := ... | stmts.go:24:12:24:12 | Before 0 | +| stmts.go:24:7:24:12 | After ... := ... | stmts.go:24:15:24:20 | Before ...<... | +| stmts.go:24:7:24:12 | assign:0 ... := ... | stmts.go:24:7:24:12 | After ... := ... | +| stmts.go:24:12:24:12 | 0 | stmts.go:24:12:24:12 | After 0 | +| stmts.go:24:12:24:12 | After 0 | stmts.go:24:7:24:12 | assign:0 ... := ... | +| stmts.go:24:12:24:12 | Before 0 | stmts.go:24:12:24:12 | 0 | +| stmts.go:24:15:24:15 | After i | stmts.go:24:19:24:20 | Before 10 | +| stmts.go:24:15:24:15 | Before i | stmts.go:24:15:24:15 | i | +| stmts.go:24:15:24:15 | i | stmts.go:24:15:24:15 | After i | +| stmts.go:24:15:24:20 | ...<... | stmts.go:24:15:24:20 | After ...<... [false] | +| stmts.go:24:15:24:20 | ...<... | stmts.go:24:15:24:20 | After ...<... [true] | +| stmts.go:24:15:24:20 | After ...<... [false] | stmts.go:24:3:36:3 | After for statement | +| stmts.go:24:15:24:20 | After ...<... [true] | stmts.go:24:27:36:3 | block statement | +| stmts.go:24:15:24:20 | Before ...<... | stmts.go:24:15:24:15 | Before i | +| stmts.go:24:19:24:20 | 10 | stmts.go:24:19:24:20 | After 10 | +| stmts.go:24:19:24:20 | After 10 | stmts.go:24:15:24:20 | ...<... | +| stmts.go:24:19:24:20 | Before 10 | stmts.go:24:19:24:20 | 10 | +| stmts.go:24:23:24:23 | After i | stmts.go:24:23:24:25 | implicit-one increment statement | +| stmts.go:24:23:24:23 | Before i | stmts.go:24:23:24:23 | i | +| stmts.go:24:23:24:23 | i | stmts.go:24:23:24:23 | After i | +| stmts.go:24:23:24:25 | After increment statement | stmts.go:24:15:24:20 | Before ...<... | +| stmts.go:24:23:24:25 | Before increment statement | stmts.go:24:23:24:23 | Before i | +| stmts.go:24:23:24:25 | implicit-one increment statement | stmts.go:24:23:24:25 | incdec-rhs increment statement | +| stmts.go:24:23:24:25 | incdec-rhs increment statement | stmts.go:24:23:24:25 | increment statement | +| stmts.go:24:23:24:25 | increment statement | stmts.go:24:23:24:25 | After increment statement | +| stmts.go:24:27:36:3 | block statement | stmts.go:25:4:35:4 | if statement | +| stmts.go:25:4:35:4 | if statement | stmts.go:25:7:25:16 | ... := ... | +| stmts.go:25:7:25:16 | ... := ... | stmts.go:25:12:25:16 | Before ...-... | +| stmts.go:25:7:25:16 | After ... := ... | stmts.go:25:19:25:23 | Before ...>... | +| stmts.go:25:7:25:16 | assign:0 ... := ... | stmts.go:25:7:25:16 | After ... := ... | +| stmts.go:25:12:25:12 | After i | stmts.go:25:16:25:16 | Before 1 | +| stmts.go:25:12:25:12 | Before i | stmts.go:25:12:25:12 | i | +| stmts.go:25:12:25:12 | i | stmts.go:25:12:25:12 | After i | +| stmts.go:25:12:25:16 | ...-... | stmts.go:25:12:25:16 | After ...-... | +| stmts.go:25:12:25:16 | After ...-... | stmts.go:25:7:25:16 | assign:0 ... := ... | +| stmts.go:25:12:25:16 | Before ...-... | stmts.go:25:12:25:12 | Before i | +| stmts.go:25:16:25:16 | 1 | stmts.go:25:16:25:16 | After 1 | +| stmts.go:25:16:25:16 | After 1 | stmts.go:25:12:25:16 | ...-... | +| stmts.go:25:16:25:16 | Before 1 | stmts.go:25:16:25:16 | 1 | +| stmts.go:25:19:25:19 | After j | stmts.go:25:23:25:23 | Before 5 | +| stmts.go:25:19:25:19 | Before j | stmts.go:25:19:25:19 | j | +| stmts.go:25:19:25:19 | j | stmts.go:25:19:25:19 | After j | +| stmts.go:25:19:25:23 | ...>... | stmts.go:25:19:25:23 | After ...>... [false] | +| stmts.go:25:19:25:23 | ...>... | stmts.go:25:19:25:23 | After ...>... [true] | +| stmts.go:25:19:25:23 | After ...>... [false] | stmts.go:27:11:35:4 | if statement | +| stmts.go:25:19:25:23 | After ...>... [true] | stmts.go:25:25:27:4 | block statement | +| stmts.go:25:19:25:23 | Before ...>... | stmts.go:25:19:25:19 | Before j | +| stmts.go:25:23:25:23 | 5 | stmts.go:25:23:25:23 | After 5 | +| stmts.go:25:23:25:23 | After 5 | stmts.go:25:19:25:23 | ...>... | +| stmts.go:25:23:25:23 | Before 5 | stmts.go:25:23:25:23 | 5 | +| stmts.go:25:25:27:4 | block statement | stmts.go:26:5:26:15 | Before break statement | +| stmts.go:26:5:26:15 | Before break statement | stmts.go:26:5:26:15 | break statement | +| stmts.go:26:5:26:15 | break statement | stmts.go:23:2:37:2 | After for statement | +| stmts.go:27:11:35:4 | if statement | stmts.go:27:14:27:18 | Before ...<... | +| stmts.go:27:14:27:14 | After i | stmts.go:27:18:27:18 | Before 3 | +| stmts.go:27:14:27:14 | Before i | stmts.go:27:14:27:14 | i | +| stmts.go:27:14:27:14 | i | stmts.go:27:14:27:14 | After i | +| stmts.go:27:14:27:18 | ...<... | stmts.go:27:14:27:18 | After ...<... [false] | +| stmts.go:27:14:27:18 | ...<... | stmts.go:27:14:27:18 | After ...<... [true] | +| stmts.go:27:14:27:18 | After ...<... [false] | stmts.go:29:11:35:4 | if statement | +| stmts.go:27:14:27:18 | After ...<... [true] | stmts.go:27:20:29:4 | block statement | +| stmts.go:27:14:27:18 | Before ...<... | stmts.go:27:14:27:14 | Before i | +| stmts.go:27:18:27:18 | 3 | stmts.go:27:18:27:18 | After 3 | +| stmts.go:27:18:27:18 | After 3 | stmts.go:27:14:27:18 | ...<... | +| stmts.go:27:18:27:18 | Before 3 | stmts.go:27:18:27:18 | 3 | +| stmts.go:27:20:29:4 | block statement | stmts.go:28:5:28:9 | Before break statement | +| stmts.go:28:5:28:9 | Before break statement | stmts.go:28:5:28:9 | break statement | +| stmts.go:28:5:28:9 | break statement | stmts.go:24:3:36:3 | After for statement | +| stmts.go:29:11:35:4 | if statement | stmts.go:29:14:29:19 | Before ...!=... | +| stmts.go:29:14:29:14 | After i | stmts.go:29:19:29:19 | Before 9 | +| stmts.go:29:14:29:14 | Before i | stmts.go:29:14:29:14 | i | +| stmts.go:29:14:29:14 | i | stmts.go:29:14:29:14 | After i | +| stmts.go:29:14:29:19 | ...!=... | stmts.go:29:14:29:19 | After ...!=... [false] | +| stmts.go:29:14:29:19 | ...!=... | stmts.go:29:14:29:19 | After ...!=... [true] | +| stmts.go:29:14:29:19 | After ...!=... [false] | stmts.go:31:11:35:4 | if statement | +| stmts.go:29:14:29:19 | After ...!=... [true] | stmts.go:29:21:31:4 | block statement | +| stmts.go:29:14:29:19 | Before ...!=... | stmts.go:29:14:29:14 | Before i | +| stmts.go:29:19:29:19 | 9 | stmts.go:29:19:29:19 | After 9 | +| stmts.go:29:19:29:19 | After 9 | stmts.go:29:14:29:19 | ...!=... | +| stmts.go:29:19:29:19 | Before 9 | stmts.go:29:19:29:19 | 9 | +| stmts.go:29:21:31:4 | block statement | stmts.go:30:5:30:18 | Before continue statement | +| stmts.go:30:5:30:18 | Before continue statement | stmts.go:30:5:30:18 | continue statement | +| stmts.go:30:5:30:18 | continue statement | stmts.go:23:2:37:2 | [LoopHeader] for statement | +| stmts.go:31:11:35:4 | if statement | stmts.go:31:14:31:19 | Before ...>=... | +| stmts.go:31:14:31:14 | After i | stmts.go:31:19:31:19 | Before 4 | +| stmts.go:31:14:31:14 | Before i | stmts.go:31:14:31:14 | i | +| stmts.go:31:14:31:14 | i | stmts.go:31:14:31:14 | After i | +| stmts.go:31:14:31:19 | ...>=... | stmts.go:31:14:31:19 | After ...>=... [false] | +| stmts.go:31:14:31:19 | ...>=... | stmts.go:31:14:31:19 | After ...>=... [true] | +| stmts.go:31:14:31:19 | After ...>=... [false] | stmts.go:33:11:35:4 | block statement | +| stmts.go:31:14:31:19 | After ...>=... [true] | stmts.go:31:21:33:4 | block statement | +| stmts.go:31:14:31:19 | Before ...>=... | stmts.go:31:14:31:14 | Before i | +| stmts.go:31:19:31:19 | 4 | stmts.go:31:19:31:19 | After 4 | +| stmts.go:31:19:31:19 | After 4 | stmts.go:31:14:31:19 | ...>=... | +| stmts.go:31:19:31:19 | Before 4 | stmts.go:31:19:31:19 | 4 | +| stmts.go:31:21:33:4 | block statement | stmts.go:32:5:32:14 | Before goto statement | +| stmts.go:32:5:32:14 | Before goto statement | stmts.go:32:5:32:14 | goto statement | +| stmts.go:32:5:32:14 | goto statement | stmts.go:22:1:37:2 | labeled statement | +| stmts.go:33:11:35:4 | block statement | stmts.go:34:5:34:12 | Before continue statement | +| stmts.go:34:5:34:12 | Before continue statement | stmts.go:34:5:34:12 | continue statement | +| stmts.go:34:5:34:12 | continue statement | stmts.go:24:3:36:3 | [LoopHeader] for statement | +| stmts.go:39:2:39:7 | ... := ... | stmts.go:39:7:39:7 | Before 9 | +| stmts.go:39:2:39:7 | After ... := ... | stmts.go:40:2:42:2 | for statement | +| stmts.go:39:2:39:7 | assign:0 ... := ... | stmts.go:39:2:39:7 | After ... := ... | +| stmts.go:39:7:39:7 | 9 | stmts.go:39:7:39:7 | After 9 | +| stmts.go:39:7:39:7 | After 9 | stmts.go:39:2:39:7 | assign:0 ... := ... | +| stmts.go:39:7:39:7 | Before 9 | stmts.go:39:7:39:7 | 9 | +| stmts.go:40:2:42:2 | for statement | stmts.go:40:14:42:2 | block statement | +| stmts.go:40:14:42:2 | block statement | stmts.go:41:3:41:12 | Before goto statement | +| stmts.go:41:3:41:12 | Before goto statement | stmts.go:41:3:41:12 | goto statement | +| stmts.go:41:3:41:12 | goto statement | stmts.go:22:1:37:2 | labeled statement | +| stmts.go:46:1:62:1 | After function declaration | stmts.go:65:1:72:1 | Before function declaration | +| stmts.go:46:1:62:1 | Before function declaration | stmts.go:46:1:62:1 | function declaration | +| stmts.go:46:1:62:1 | Entry | stmts.go:46:44:62:1 | block statement | +| stmts.go:46:1:62:1 | Exceptional Exit | stmts.go:46:1:62:1 | Exit | +| stmts.go:46:1:62:1 | function declaration | stmts.go:46:1:62:1 | After function declaration | +| stmts.go:46:44:62:1 | arg:0 block statement | stmts.go:46:44:62:1 | param-init:0 block statement | +| stmts.go:46:44:62:1 | arg:1 block statement | stmts.go:46:44:62:1 | param-init:1 block statement | +| stmts.go:46:44:62:1 | block statement | stmts.go:46:44:62:1 | arg:0 block statement | +| stmts.go:46:44:62:1 | param-init:0 block statement | stmts.go:46:44:62:1 | arg:1 block statement | +| stmts.go:46:44:62:1 | param-init:1 block statement | stmts.go:47:2:47:17 | declaration statement | +| stmts.go:47:2:47:17 | After declaration statement | stmts.go:48:2:48:11 | declaration statement | +| stmts.go:47:2:47:17 | After variable declaration | stmts.go:47:2:47:17 | After declaration statement | +| stmts.go:47:2:47:17 | declaration statement | stmts.go:47:2:47:17 | variable declaration | +| stmts.go:47:2:47:17 | variable declaration | stmts.go:47:6:47:17 | value declaration specifier | +| stmts.go:47:6:47:17 | After value declaration specifier | stmts.go:47:2:47:17 | After variable declaration | +| stmts.go:47:6:47:17 | assign:0 value declaration specifier | stmts.go:47:6:47:17 | After value declaration specifier | +| stmts.go:47:6:47:17 | value declaration specifier | stmts.go:47:6:47:17 | zero-init:0 value declaration specifier | +| stmts.go:47:6:47:17 | zero-init:0 value declaration specifier | stmts.go:47:6:47:17 | assign:0 value declaration specifier | +| stmts.go:48:2:48:11 | After declaration statement | stmts.go:50:2:59:2 | Before select statement | +| stmts.go:48:2:48:11 | After variable declaration | stmts.go:48:2:48:11 | After declaration statement | +| stmts.go:48:2:48:11 | declaration statement | stmts.go:48:2:48:11 | variable declaration | +| stmts.go:48:2:48:11 | variable declaration | stmts.go:48:6:48:11 | value declaration specifier | +| stmts.go:48:6:48:11 | After value declaration specifier | stmts.go:48:2:48:11 | After variable declaration | +| stmts.go:48:6:48:11 | assign:0 value declaration specifier | stmts.go:48:6:48:11 | After value declaration specifier | +| stmts.go:48:6:48:11 | value declaration specifier | stmts.go:48:6:48:11 | zero-init:0 value declaration specifier | +| stmts.go:48:6:48:11 | zero-init:0 value declaration specifier | stmts.go:48:6:48:11 | assign:0 value declaration specifier | +| stmts.go:50:2:59:2 | After select statement | stmts.go:61:2:61:10 | Before select statement | +| stmts.go:50:2:59:2 | Before select statement | stmts.go:51:9:51:11 | Before ch1 | +| stmts.go:50:2:59:2 | select statement | stmts.go:51:2:52:31 | comm clause | +| stmts.go:50:2:59:2 | select statement | stmts.go:53:2:55:16 | comm clause | +| stmts.go:50:2:59:2 | select statement | stmts.go:56:2:57:15 | comm clause | +| stmts.go:50:2:59:2 | select statement | stmts.go:58:2:58:16 | comm clause | +| stmts.go:51:2:52:31 | comm clause | stmts.go:51:7:51:11 | <-... | +| stmts.go:51:7:51:11 | <-... | stmts.go:52:3:52:31 | expression statement | +| stmts.go:51:9:51:11 | After ch1 | stmts.go:53:19:53:21 | Before ch2 | +| stmts.go:51:9:51:11 | Before ch1 | stmts.go:51:9:51:11 | ch1 | +| stmts.go:51:9:51:11 | ch1 | stmts.go:51:9:51:11 | After ch1 | +| stmts.go:52:3:52:13 | After selection of Println | stmts.go:52:15:52:30 | Before "Heard from ch1" | +| stmts.go:52:3:52:13 | Before selection of Println | stmts.go:52:3:52:13 | selection of Println | +| stmts.go:52:3:52:13 | selection of Println | stmts.go:52:3:52:13 | After selection of Println | +| stmts.go:52:3:52:31 | After call to Println | stmts.go:52:3:52:31 | After expression statement | +| stmts.go:52:3:52:31 | After expression statement | stmts.go:50:2:59:2 | After select statement | +| stmts.go:52:3:52:31 | Before call to Println | stmts.go:52:3:52:13 | Before selection of Println | +| stmts.go:52:3:52:31 | call to Println | stmts.go:46:1:62:1 | Exceptional Exit | +| stmts.go:52:3:52:31 | call to Println | stmts.go:52:3:52:31 | After call to Println | +| stmts.go:52:3:52:31 | expression statement | stmts.go:52:3:52:31 | Before call to Println | +| stmts.go:52:15:52:30 | "Heard from ch1" | stmts.go:52:15:52:30 | After "Heard from ch1" | +| stmts.go:52:15:52:30 | After "Heard from ch1" | stmts.go:52:3:52:31 | call to Println | +| stmts.go:52:15:52:30 | Before "Heard from ch1" | stmts.go:52:15:52:30 | "Heard from ch1" | +| stmts.go:53:2:55:16 | comm clause | stmts.go:53:17:53:21 | <-... | +| stmts.go:53:7:53:7 | After a | stmts.go:53:9:53:9 | Before 0 | +| stmts.go:53:7:53:7 | Before a | stmts.go:53:7:53:7 | a | +| stmts.go:53:7:53:7 | a | stmts.go:53:7:53:7 | After a | +| stmts.go:53:7:53:10 | After index expression | stmts.go:53:13:53:13 | Before w | +| stmts.go:53:7:53:10 | Before index expression | stmts.go:53:7:53:7 | Before a | +| stmts.go:53:7:53:10 | index expression | stmts.go:46:1:62:1 | Exceptional Exit | +| stmts.go:53:7:53:10 | index expression | stmts.go:53:7:53:10 | After index expression | +| stmts.go:53:7:53:21 | assign:0 ... = ... | stmts.go:53:7:53:21 | extract:1 ... = ... | +| stmts.go:53:7:53:21 | assign:1 ... = ... | stmts.go:54:3:54:16 | expression statement | +| stmts.go:53:7:53:21 | extract:0 ... = ... | stmts.go:53:7:53:21 | assign:0 ... = ... | +| stmts.go:53:7:53:21 | extract:1 ... = ... | stmts.go:53:7:53:21 | assign:1 ... = ... | +| stmts.go:53:9:53:9 | 0 | stmts.go:53:9:53:9 | After 0 | +| stmts.go:53:9:53:9 | After 0 | stmts.go:53:7:53:10 | index expression | +| stmts.go:53:9:53:9 | Before 0 | stmts.go:53:9:53:9 | 0 | +| stmts.go:53:13:53:13 | After w | stmts.go:53:7:53:21 | extract:0 ... = ... | +| stmts.go:53:13:53:13 | Before w | stmts.go:53:13:53:13 | w | +| stmts.go:53:13:53:13 | w | stmts.go:53:13:53:13 | After w | +| stmts.go:53:17:53:21 | <-... | stmts.go:53:7:53:10 | Before index expression | +| stmts.go:53:19:53:21 | After ch2 | stmts.go:58:7:58:9 | Before ch1 | +| stmts.go:53:19:53:21 | Before ch2 | stmts.go:53:19:53:21 | ch2 | +| stmts.go:53:19:53:21 | ch2 | stmts.go:53:19:53:21 | After ch2 | +| stmts.go:54:3:54:13 | After selection of Println | stmts.go:54:15:54:15 | Before a | +| stmts.go:54:3:54:13 | Before selection of Println | stmts.go:54:3:54:13 | selection of Println | +| stmts.go:54:3:54:13 | selection of Println | stmts.go:54:3:54:13 | After selection of Println | +| stmts.go:54:3:54:16 | After call to Println | stmts.go:54:3:54:16 | After expression statement | +| stmts.go:54:3:54:16 | After expression statement | stmts.go:55:3:55:16 | expression statement | +| stmts.go:54:3:54:16 | Before call to Println | stmts.go:54:3:54:13 | Before selection of Println | +| stmts.go:54:3:54:16 | call to Println | stmts.go:46:1:62:1 | Exceptional Exit | +| stmts.go:54:3:54:16 | call to Println | stmts.go:54:3:54:16 | After call to Println | +| stmts.go:54:3:54:16 | expression statement | stmts.go:54:3:54:16 | Before call to Println | +| stmts.go:54:15:54:15 | After a | stmts.go:54:3:54:16 | call to Println | +| stmts.go:54:15:54:15 | Before a | stmts.go:54:15:54:15 | a | +| stmts.go:54:15:54:15 | a | stmts.go:54:15:54:15 | After a | +| stmts.go:55:3:55:13 | After selection of Println | stmts.go:55:15:55:15 | Before w | +| stmts.go:55:3:55:13 | Before selection of Println | stmts.go:55:3:55:13 | selection of Println | +| stmts.go:55:3:55:13 | selection of Println | stmts.go:55:3:55:13 | After selection of Println | +| stmts.go:55:3:55:16 | After call to Println | stmts.go:55:3:55:16 | After expression statement | +| stmts.go:55:3:55:16 | After expression statement | stmts.go:50:2:59:2 | After select statement | +| stmts.go:55:3:55:16 | Before call to Println | stmts.go:55:3:55:13 | Before selection of Println | +| stmts.go:55:3:55:16 | call to Println | stmts.go:46:1:62:1 | Exceptional Exit | +| stmts.go:55:3:55:16 | call to Println | stmts.go:55:3:55:16 | After call to Println | +| stmts.go:55:3:55:16 | expression statement | stmts.go:55:3:55:16 | Before call to Println | +| stmts.go:55:15:55:15 | After w | stmts.go:55:3:55:16 | call to Println | +| stmts.go:55:15:55:15 | Before w | stmts.go:55:15:55:15 | w | +| stmts.go:55:15:55:15 | w | stmts.go:55:15:55:15 | After w | +| stmts.go:56:2:57:15 | comm clause | stmts.go:57:3:57:15 | expression statement | +| stmts.go:57:3:57:13 | After selection of Println | stmts.go:57:3:57:15 | call to Println | +| stmts.go:57:3:57:13 | Before selection of Println | stmts.go:57:3:57:13 | selection of Println | +| stmts.go:57:3:57:13 | selection of Println | stmts.go:57:3:57:13 | After selection of Println | +| stmts.go:57:3:57:15 | After call to Println | stmts.go:57:3:57:15 | After expression statement | +| stmts.go:57:3:57:15 | After expression statement | stmts.go:50:2:59:2 | After select statement | +| stmts.go:57:3:57:15 | Before call to Println | stmts.go:57:3:57:13 | Before selection of Println | +| stmts.go:57:3:57:15 | call to Println | stmts.go:46:1:62:1 | Exceptional Exit | +| stmts.go:57:3:57:15 | call to Println | stmts.go:57:3:57:15 | After call to Println | +| stmts.go:57:3:57:15 | expression statement | stmts.go:57:3:57:15 | Before call to Println | +| stmts.go:58:2:58:16 | comm clause | stmts.go:58:7:58:15 | send statement | +| stmts.go:58:7:58:9 | After ch1 | stmts.go:58:14:58:15 | Before 42 | +| stmts.go:58:7:58:9 | Before ch1 | stmts.go:58:7:58:9 | ch1 | +| stmts.go:58:7:58:9 | ch1 | stmts.go:58:7:58:9 | After ch1 | +| stmts.go:58:7:58:15 | After send statement | stmts.go:50:2:59:2 | After select statement | +| stmts.go:58:7:58:15 | send statement | stmts.go:58:7:58:15 | After send statement | +| stmts.go:58:14:58:15 | 42 | stmts.go:58:14:58:15 | After 42 | +| stmts.go:58:14:58:15 | After 42 | stmts.go:50:2:59:2 | select statement | +| stmts.go:58:14:58:15 | Before 42 | stmts.go:58:14:58:15 | 42 | +| stmts.go:61:2:61:10 | Before select statement | stmts.go:61:2:61:10 | select statement | +| stmts.go:65:1:72:1 | After function declaration | stmts.go:75:1:109:1 | Before function declaration | +| stmts.go:65:1:72:1 | Before function declaration | stmts.go:65:1:72:1 | function declaration | +| stmts.go:65:1:72:1 | Entry | stmts.go:65:23:72:1 | block statement | +| stmts.go:65:1:72:1 | Exceptional Exit | stmts.go:65:1:72:1 | Exit | +| stmts.go:65:1:72:1 | Normal Exit | stmts.go:65:1:72:1 | Exit | +| stmts.go:65:1:72:1 | function declaration | stmts.go:65:1:72:1 | After function declaration | +| stmts.go:65:23:72:1 | arg:0 block statement | stmts.go:65:23:72:1 | param-init:0 block statement | +| stmts.go:65:23:72:1 | block statement | stmts.go:65:23:72:1 | arg:0 block statement | +| stmts.go:65:23:72:1 | param-init:0 block statement | stmts.go:66:2:70:2 | if statement | +| stmts.go:66:2:70:2 | After if statement | stmts.go:71:2:71:10 | Before return statement | +| stmts.go:66:2:70:2 | if statement | stmts.go:66:5:66:9 | Before ...>... | +| stmts.go:66:5:66:5 | After x | stmts.go:66:9:66:9 | Before 0 | +| stmts.go:66:5:66:5 | Before x | stmts.go:66:5:66:5 | x | +| stmts.go:66:5:66:5 | x | stmts.go:66:5:66:5 | After x | +| stmts.go:66:5:66:9 | ...>... | stmts.go:66:5:66:9 | After ...>... [false] | +| stmts.go:66:5:66:9 | ...>... | stmts.go:66:5:66:9 | After ...>... [true] | +| stmts.go:66:5:66:9 | After ...>... [false] | stmts.go:68:9:70:2 | block statement | +| stmts.go:66:5:66:9 | After ...>... [true] | stmts.go:66:11:68:2 | block statement | +| stmts.go:66:5:66:9 | Before ...>... | stmts.go:66:5:66:5 | Before x | +| stmts.go:66:9:66:9 | 0 | stmts.go:66:9:66:9 | After 0 | +| stmts.go:66:9:66:9 | After 0 | stmts.go:66:5:66:9 | ...>... | +| stmts.go:66:9:66:9 | Before 0 | stmts.go:66:9:66:9 | 0 | +| stmts.go:66:11:68:2 | After block statement | stmts.go:66:2:70:2 | After if statement | +| stmts.go:66:11:68:2 | block statement | stmts.go:67:3:67:35 | Before defer statement | +| stmts.go:67:3:67:35 | After defer statement | stmts.go:66:11:68:2 | After block statement | +| stmts.go:67:3:67:35 | Before defer statement | stmts.go:67:9:67:35 | Before function call | +| stmts.go:67:3:67:35 | defer statement | stmts.go:67:3:67:35 | After defer statement | +| stmts.go:67:9:67:33 | After function literal | stmts.go:67:9:67:35 | function call | +| stmts.go:67:9:67:33 | Before function literal | stmts.go:67:9:67:33 | function literal | +| stmts.go:67:9:67:33 | Entry | stmts.go:67:16:67:33 | block statement | +| stmts.go:67:9:67:33 | Exceptional Exit | stmts.go:67:9:67:33 | Exit | +| stmts.go:67:9:67:33 | Normal Exit | stmts.go:67:9:67:33 | Exit | +| stmts.go:67:9:67:33 | function literal | stmts.go:67:9:67:33 | After function literal | +| stmts.go:67:9:67:35 | After function call | stmts.go:67:3:67:35 | defer statement | +| stmts.go:67:9:67:35 | Before function call | stmts.go:67:9:67:33 | Before function literal | +| stmts.go:67:9:67:35 | function call | stmts.go:65:1:72:1 | Exceptional Exit | +| stmts.go:67:9:67:35 | function call | stmts.go:67:9:67:35 | After function call | +| stmts.go:67:16:67:33 | After block statement | stmts.go:67:9:67:33 | Normal Exit | +| stmts.go:67:16:67:33 | block statement | stmts.go:67:18:67:31 | expression statement | +| stmts.go:67:18:67:28 | After selection of Println | stmts.go:67:30:67:30 | Before x | +| stmts.go:67:18:67:28 | Before selection of Println | stmts.go:67:18:67:28 | selection of Println | +| stmts.go:67:18:67:28 | selection of Println | stmts.go:67:18:67:28 | After selection of Println | +| stmts.go:67:18:67:31 | After call to Println | stmts.go:67:18:67:31 | After expression statement | +| stmts.go:67:18:67:31 | After expression statement | stmts.go:67:16:67:33 | After block statement | +| stmts.go:67:18:67:31 | Before call to Println | stmts.go:67:18:67:28 | Before selection of Println | +| stmts.go:67:18:67:31 | call to Println | stmts.go:67:9:67:33 | Exceptional Exit | +| stmts.go:67:18:67:31 | call to Println | stmts.go:67:18:67:31 | After call to Println | +| stmts.go:67:18:67:31 | expression statement | stmts.go:67:18:67:31 | Before call to Println | +| stmts.go:67:30:67:30 | After x | stmts.go:67:18:67:31 | call to Println | +| stmts.go:67:30:67:30 | Before x | stmts.go:67:30:67:30 | x | +| stmts.go:67:30:67:30 | x | stmts.go:67:30:67:30 | After x | +| stmts.go:68:9:70:2 | After block statement | stmts.go:66:2:70:2 | After if statement | +| stmts.go:68:9:70:2 | block statement | stmts.go:69:3:69:36 | Before defer statement | +| stmts.go:69:3:69:36 | After defer statement | stmts.go:68:9:70:2 | After block statement | +| stmts.go:69:3:69:36 | Before defer statement | stmts.go:69:9:69:36 | Before function call | +| stmts.go:69:3:69:36 | defer statement | stmts.go:69:3:69:36 | After defer statement | +| stmts.go:69:9:69:34 | After function literal | stmts.go:69:9:69:36 | function call | +| stmts.go:69:9:69:34 | Before function literal | stmts.go:69:9:69:34 | function literal | +| stmts.go:69:9:69:34 | Entry | stmts.go:69:16:69:34 | block statement | +| stmts.go:69:9:69:34 | Exceptional Exit | stmts.go:69:9:69:34 | Exit | +| stmts.go:69:9:69:34 | Normal Exit | stmts.go:69:9:69:34 | Exit | +| stmts.go:69:9:69:34 | function literal | stmts.go:69:9:69:34 | After function literal | +| stmts.go:69:9:69:36 | After function call | stmts.go:69:3:69:36 | defer statement | +| stmts.go:69:9:69:36 | Before function call | stmts.go:69:9:69:34 | Before function literal | +| stmts.go:69:9:69:36 | function call | stmts.go:65:1:72:1 | Exceptional Exit | +| stmts.go:69:9:69:36 | function call | stmts.go:69:9:69:36 | After function call | +| stmts.go:69:16:69:34 | After block statement | stmts.go:69:9:69:34 | Normal Exit | +| stmts.go:69:16:69:34 | block statement | stmts.go:69:18:69:32 | expression statement | +| stmts.go:69:18:69:28 | After selection of Println | stmts.go:69:30:69:31 | Before -... | +| stmts.go:69:18:69:28 | Before selection of Println | stmts.go:69:18:69:28 | selection of Println | +| stmts.go:69:18:69:28 | selection of Println | stmts.go:69:18:69:28 | After selection of Println | +| stmts.go:69:18:69:32 | After call to Println | stmts.go:69:18:69:32 | After expression statement | +| stmts.go:69:18:69:32 | After expression statement | stmts.go:69:16:69:34 | After block statement | +| stmts.go:69:18:69:32 | Before call to Println | stmts.go:69:18:69:28 | Before selection of Println | +| stmts.go:69:18:69:32 | call to Println | stmts.go:69:9:69:34 | Exceptional Exit | +| stmts.go:69:18:69:32 | call to Println | stmts.go:69:18:69:32 | After call to Println | +| stmts.go:69:18:69:32 | expression statement | stmts.go:69:18:69:32 | Before call to Println | +| stmts.go:69:30:69:31 | -... | stmts.go:69:30:69:31 | After -... | +| stmts.go:69:30:69:31 | After -... | stmts.go:69:18:69:32 | call to Println | +| stmts.go:69:30:69:31 | Before -... | stmts.go:69:31:69:31 | Before x | +| stmts.go:69:31:69:31 | After x | stmts.go:69:30:69:31 | -... | +| stmts.go:69:31:69:31 | Before x | stmts.go:69:31:69:31 | x | +| stmts.go:69:31:69:31 | x | stmts.go:69:31:69:31 | After x | +| stmts.go:71:2:71:10 | Before return statement | stmts.go:71:9:71:10 | Before 42 | +| stmts.go:71:2:71:10 | return statement | stmts.go:65:1:72:1 | Normal Exit | +| stmts.go:71:9:71:10 | 42 | stmts.go:71:9:71:10 | After 42 | +| stmts.go:71:9:71:10 | After 42 | stmts.go:71:2:71:10 | return statement | +| stmts.go:71:9:71:10 | Before 42 | stmts.go:71:9:71:10 | 42 | +| stmts.go:75:1:109:1 | After function declaration | stmts.go:112:1:137:1 | Before function declaration | +| stmts.go:75:1:109:1 | Before function declaration | stmts.go:75:1:109:1 | function declaration | +| stmts.go:75:1:109:1 | Entry | stmts.go:75:19:109:1 | block statement | +| stmts.go:75:1:109:1 | Exceptional Exit | stmts.go:75:1:109:1 | Exit | +| stmts.go:75:1:109:1 | Normal Exit | stmts.go:75:1:109:1 | Exit | +| stmts.go:75:1:109:1 | function declaration | stmts.go:75:1:109:1 | After function declaration | +| stmts.go:75:19:109:1 | After block statement | stmts.go:75:1:109:1 | Normal Exit | +| stmts.go:75:19:109:1 | arg:0 block statement | stmts.go:75:19:109:1 | param-init:0 block statement | +| stmts.go:75:19:109:1 | block statement | stmts.go:75:19:109:1 | arg:0 block statement | +| stmts.go:75:19:109:1 | param-init:0 block statement | stmts.go:76:2:77:2 | expression-switch statement | +| stmts.go:76:2:77:2 | After expression-switch statement | stmts.go:79:2:82:2 | expression-switch statement | +| stmts.go:76:2:77:2 | expression-switch statement | stmts.go:76:9:76:9 | Before x | +| stmts.go:76:9:76:9 | After x | stmts.go:76:2:77:2 | After expression-switch statement | +| stmts.go:76:9:76:9 | Before x | stmts.go:76:9:76:9 | x | +| stmts.go:76:9:76:9 | x | stmts.go:76:9:76:9 | After x | +| stmts.go:79:2:82:2 | After expression-switch statement | stmts.go:84:2:88:2 | expression-switch statement | +| stmts.go:79:2:82:2 | expression-switch statement | stmts.go:79:9:79:14 | ... := ... | +| stmts.go:79:9:79:14 | ... := ... | stmts.go:79:14:79:14 | Before x | +| stmts.go:79:9:79:14 | After ... := ... | stmts.go:79:17:79:22 | Before ...-... | +| stmts.go:79:9:79:14 | assign:0 ... := ... | stmts.go:79:9:79:14 | After ... := ... | +| stmts.go:79:14:79:14 | After x | stmts.go:79:9:79:14 | assign:0 ... := ... | +| stmts.go:79:14:79:14 | Before x | stmts.go:79:14:79:14 | x | +| stmts.go:79:14:79:14 | x | stmts.go:79:14:79:14 | After x | +| stmts.go:79:17:79:17 | After y | stmts.go:79:21:79:22 | Before 19 | +| stmts.go:79:17:79:17 | Before y | stmts.go:79:17:79:17 | y | +| stmts.go:79:17:79:17 | y | stmts.go:79:17:79:17 | After y | +| stmts.go:79:17:79:22 | ...-... | stmts.go:79:17:79:22 | After ...-... | +| stmts.go:79:17:79:22 | After ...-... | stmts.go:80:2:81:14 | case clause | +| stmts.go:79:17:79:22 | Before ...-... | stmts.go:79:17:79:17 | Before y | +| stmts.go:79:21:79:22 | 19 | stmts.go:79:21:79:22 | After 19 | +| stmts.go:79:21:79:22 | After 19 | stmts.go:79:17:79:22 | ...-... | +| stmts.go:79:21:79:22 | Before 19 | stmts.go:79:21:79:22 | 19 | +| stmts.go:80:2:81:14 | case clause | stmts.go:81:3:81:14 | expression statement | +| stmts.go:81:3:81:7 | After test5 | stmts.go:81:9:81:13 | Before false | +| stmts.go:81:3:81:7 | Before test5 | stmts.go:81:3:81:7 | test5 | +| stmts.go:81:3:81:7 | test5 | stmts.go:81:3:81:7 | After test5 | +| stmts.go:81:3:81:14 | After call to test5 | stmts.go:81:3:81:14 | After expression statement | +| stmts.go:81:3:81:14 | After expression statement | stmts.go:79:2:82:2 | After expression-switch statement | +| stmts.go:81:3:81:14 | Before call to test5 | stmts.go:81:3:81:7 | Before test5 | +| stmts.go:81:3:81:14 | call to test5 | stmts.go:75:1:109:1 | Exceptional Exit | +| stmts.go:81:3:81:14 | call to test5 | stmts.go:81:3:81:14 | After call to test5 | +| stmts.go:81:3:81:14 | expression statement | stmts.go:81:3:81:14 | Before call to test5 | +| stmts.go:81:9:81:13 | After false | stmts.go:81:3:81:14 | call to test5 | +| stmts.go:81:9:81:13 | Before false | stmts.go:81:9:81:13 | false | +| stmts.go:81:9:81:13 | false | stmts.go:81:9:81:13 | After false | +| stmts.go:84:2:88:2 | After expression-switch statement | stmts.go:90:2:96:2 | expression-switch statement | +| stmts.go:84:2:88:2 | expression-switch statement | stmts.go:84:9:84:9 | Before x | +| stmts.go:84:9:84:9 | After x | stmts.go:85:2:85:8 | case clause | +| stmts.go:84:9:84:9 | Before x | stmts.go:84:9:84:9 | x | +| stmts.go:84:9:84:9 | x | stmts.go:84:9:84:9 | After x | +| stmts.go:85:2:85:8 | case clause | stmts.go:85:7:85:7 | Before 1 | +| stmts.go:85:7:85:7 | 1 | stmts.go:85:7:85:7 | After 1 | +| stmts.go:85:7:85:7 | After 1 | stmts.go:84:2:88:2 | After expression-switch statement | +| stmts.go:85:7:85:7 | After 1 | stmts.go:86:2:87:13 | case clause | +| stmts.go:85:7:85:7 | Before 1 | stmts.go:85:7:85:7 | 1 | +| stmts.go:86:2:87:13 | case clause | stmts.go:86:7:86:7 | Before 2 | +| stmts.go:86:7:86:7 | 2 | stmts.go:86:7:86:7 | After 2 | +| stmts.go:86:7:86:7 | After 2 | stmts.go:86:10:86:10 | Before 3 | +| stmts.go:86:7:86:7 | Before 2 | stmts.go:86:7:86:7 | 2 | +| stmts.go:86:10:86:10 | 3 | stmts.go:86:10:86:10 | After 3 | +| stmts.go:86:10:86:10 | After 3 | stmts.go:84:2:88:2 | After expression-switch statement | +| stmts.go:86:10:86:10 | After 3 | stmts.go:87:3:87:13 | expression statement | +| stmts.go:86:10:86:10 | Before 3 | stmts.go:86:10:86:10 | 3 | +| stmts.go:87:3:87:7 | After test5 | stmts.go:87:9:87:12 | Before true | +| stmts.go:87:3:87:7 | Before test5 | stmts.go:87:3:87:7 | test5 | +| stmts.go:87:3:87:7 | test5 | stmts.go:87:3:87:7 | After test5 | +| stmts.go:87:3:87:13 | After call to test5 | stmts.go:87:3:87:13 | After expression statement | +| stmts.go:87:3:87:13 | After expression statement | stmts.go:84:2:88:2 | After expression-switch statement | +| stmts.go:87:3:87:13 | Before call to test5 | stmts.go:87:3:87:7 | Before test5 | +| stmts.go:87:3:87:13 | call to test5 | stmts.go:75:1:109:1 | Exceptional Exit | +| stmts.go:87:3:87:13 | call to test5 | stmts.go:87:3:87:13 | After call to test5 | +| stmts.go:87:3:87:13 | expression statement | stmts.go:87:3:87:13 | Before call to test5 | +| stmts.go:87:9:87:12 | After true | stmts.go:87:3:87:13 | call to test5 | +| stmts.go:87:9:87:12 | Before true | stmts.go:87:9:87:12 | true | +| stmts.go:87:9:87:12 | true | stmts.go:87:9:87:12 | After true | +| stmts.go:90:2:96:2 | After expression-switch statement | stmts.go:98:2:102:2 | expression-switch statement | +| stmts.go:90:2:96:2 | expression-switch statement | stmts.go:90:9:90:9 | Before x | +| stmts.go:90:9:90:9 | After x | stmts.go:91:2:93:13 | case clause | +| stmts.go:90:9:90:9 | Before x | stmts.go:90:9:90:9 | x | +| stmts.go:90:9:90:9 | x | stmts.go:90:9:90:9 | After x | +| stmts.go:91:2:93:13 | case clause | stmts.go:91:7:91:7 | Before 1 | +| stmts.go:91:7:91:7 | 1 | stmts.go:91:7:91:7 | After 1 | +| stmts.go:91:7:91:7 | After 1 | stmts.go:92:3:92:14 | expression statement | +| stmts.go:91:7:91:7 | After 1 | stmts.go:94:2:95:13 | case clause | +| stmts.go:91:7:91:7 | Before 1 | stmts.go:91:7:91:7 | 1 | +| stmts.go:92:3:92:7 | After test5 | stmts.go:92:9:92:13 | Before false | +| stmts.go:92:3:92:7 | Before test5 | stmts.go:92:3:92:7 | test5 | +| stmts.go:92:3:92:7 | test5 | stmts.go:92:3:92:7 | After test5 | +| stmts.go:92:3:92:14 | After call to test5 | stmts.go:92:3:92:14 | After expression statement | +| stmts.go:92:3:92:14 | After expression statement | stmts.go:93:3:93:13 | fallthrough statement | +| stmts.go:92:3:92:14 | Before call to test5 | stmts.go:92:3:92:7 | Before test5 | +| stmts.go:92:3:92:14 | call to test5 | stmts.go:75:1:109:1 | Exceptional Exit | +| stmts.go:92:3:92:14 | call to test5 | stmts.go:92:3:92:14 | After call to test5 | +| stmts.go:92:3:92:14 | expression statement | stmts.go:92:3:92:14 | Before call to test5 | +| stmts.go:92:9:92:13 | After false | stmts.go:92:3:92:14 | call to test5 | +| stmts.go:92:9:92:13 | Before false | stmts.go:92:9:92:13 | false | +| stmts.go:92:9:92:13 | false | stmts.go:92:9:92:13 | After false | +| stmts.go:93:3:93:13 | fallthrough statement | stmts.go:90:2:96:2 | After expression-switch statement | +| stmts.go:94:2:95:13 | case clause | stmts.go:94:7:94:11 | Before ...-... | +| stmts.go:94:7:94:7 | 2 | stmts.go:94:7:94:7 | After 2 | +| stmts.go:94:7:94:7 | After 2 | stmts.go:94:11:94:11 | Before 5 | +| stmts.go:94:7:94:7 | Before 2 | stmts.go:94:7:94:7 | 2 | +| stmts.go:94:7:94:11 | ...-... | stmts.go:94:7:94:11 | After ...-... | +| stmts.go:94:7:94:11 | After ...-... | stmts.go:90:2:96:2 | After expression-switch statement | +| stmts.go:94:7:94:11 | After ...-... | stmts.go:95:3:95:13 | expression statement | +| stmts.go:94:7:94:11 | Before ...-... | stmts.go:94:7:94:7 | Before 2 | +| stmts.go:94:11:94:11 | 5 | stmts.go:94:11:94:11 | After 5 | +| stmts.go:94:11:94:11 | After 5 | stmts.go:94:7:94:11 | ...-... | +| stmts.go:94:11:94:11 | Before 5 | stmts.go:94:11:94:11 | 5 | +| stmts.go:95:3:95:7 | After test5 | stmts.go:95:9:95:12 | Before true | +| stmts.go:95:3:95:7 | Before test5 | stmts.go:95:3:95:7 | test5 | +| stmts.go:95:3:95:7 | test5 | stmts.go:95:3:95:7 | After test5 | +| stmts.go:95:3:95:13 | After call to test5 | stmts.go:95:3:95:13 | After expression statement | +| stmts.go:95:3:95:13 | After expression statement | stmts.go:90:2:96:2 | After expression-switch statement | +| stmts.go:95:3:95:13 | Before call to test5 | stmts.go:95:3:95:7 | Before test5 | +| stmts.go:95:3:95:13 | call to test5 | stmts.go:75:1:109:1 | Exceptional Exit | +| stmts.go:95:3:95:13 | call to test5 | stmts.go:95:3:95:13 | After call to test5 | +| stmts.go:95:3:95:13 | expression statement | stmts.go:95:3:95:13 | Before call to test5 | +| stmts.go:95:9:95:12 | After true | stmts.go:95:3:95:13 | call to test5 | +| stmts.go:95:9:95:12 | Before true | stmts.go:95:9:95:12 | true | +| stmts.go:95:9:95:12 | true | stmts.go:95:9:95:12 | After true | +| stmts.go:98:2:102:2 | After expression-switch statement | stmts.go:104:2:108:2 | expression-switch statement | +| stmts.go:98:2:102:2 | expression-switch statement | stmts.go:98:9:98:9 | Before x | +| stmts.go:98:9:98:9 | After x | stmts.go:100:2:101:13 | case clause | +| stmts.go:98:9:98:9 | Before x | stmts.go:98:9:98:9 | x | +| stmts.go:98:9:98:9 | x | stmts.go:98:9:98:9 | After x | +| stmts.go:99:2:99:9 | case clause | stmts.go:98:2:102:2 | After expression-switch statement | +| stmts.go:99:2:99:9 | case clause | stmts.go:100:2:101:13 | case clause | +| stmts.go:100:2:101:13 | case clause | stmts.go:100:7:100:7 | Before 2 | +| stmts.go:100:7:100:7 | 2 | stmts.go:100:7:100:7 | After 2 | +| stmts.go:100:7:100:7 | After 2 | stmts.go:99:2:99:9 | case clause | +| stmts.go:100:7:100:7 | After 2 | stmts.go:101:3:101:13 | expression statement | +| stmts.go:100:7:100:7 | Before 2 | stmts.go:100:7:100:7 | 2 | +| stmts.go:101:3:101:7 | After test5 | stmts.go:101:9:101:12 | Before true | +| stmts.go:101:3:101:7 | Before test5 | stmts.go:101:3:101:7 | test5 | +| stmts.go:101:3:101:7 | test5 | stmts.go:101:3:101:7 | After test5 | +| stmts.go:101:3:101:13 | After call to test5 | stmts.go:101:3:101:13 | After expression statement | +| stmts.go:101:3:101:13 | After expression statement | stmts.go:98:2:102:2 | After expression-switch statement | +| stmts.go:101:3:101:13 | Before call to test5 | stmts.go:101:3:101:7 | Before test5 | +| stmts.go:101:3:101:13 | call to test5 | stmts.go:75:1:109:1 | Exceptional Exit | +| stmts.go:101:3:101:13 | call to test5 | stmts.go:101:3:101:13 | After call to test5 | +| stmts.go:101:3:101:13 | expression statement | stmts.go:101:3:101:13 | Before call to test5 | +| stmts.go:101:9:101:12 | After true | stmts.go:101:3:101:13 | call to test5 | +| stmts.go:101:9:101:12 | Before true | stmts.go:101:9:101:12 | true | +| stmts.go:101:9:101:12 | true | stmts.go:101:9:101:12 | After true | +| stmts.go:104:2:108:2 | After expression-switch statement | stmts.go:75:19:109:1 | After block statement | +| stmts.go:104:2:108:2 | expression-switch statement | stmts.go:107:2:107:11 | case clause | +| stmts.go:105:2:106:7 | case clause | stmts.go:106:3:106:7 | Before break statement | +| stmts.go:106:3:106:7 | Before break statement | stmts.go:106:3:106:7 | break statement | +| stmts.go:107:2:107:11 | case clause | stmts.go:107:7:107:10 | Before true | +| stmts.go:107:7:107:10 | After true [true] | stmts.go:104:2:108:2 | After expression-switch statement | +| stmts.go:107:7:107:10 | After true [true] | stmts.go:105:2:106:7 | case clause | +| stmts.go:107:7:107:10 | Before true | stmts.go:107:7:107:10 | true | +| stmts.go:107:7:107:10 | true | stmts.go:107:7:107:10 | After true [true] | +| stmts.go:112:1:137:1 | After function declaration | stmts.go:140:1:142:1 | Before function declaration | +| stmts.go:112:1:137:1 | Before function declaration | stmts.go:112:1:137:1 | function declaration | +| stmts.go:112:1:137:1 | Entry | stmts.go:112:27:137:1 | block statement | +| stmts.go:112:1:137:1 | Exceptional Exit | stmts.go:112:1:137:1 | Exit | +| stmts.go:112:1:137:1 | Normal Exit | stmts.go:112:1:137:1 | Exit | +| stmts.go:112:1:137:1 | function declaration | stmts.go:112:1:137:1 | After function declaration | +| stmts.go:112:27:137:1 | After block statement | stmts.go:112:1:137:1 | Normal Exit | +| stmts.go:112:27:137:1 | arg:0 block statement | stmts.go:112:27:137:1 | param-init:0 block statement | +| stmts.go:112:27:137:1 | block statement | stmts.go:112:27:137:1 | arg:0 block statement | +| stmts.go:112:27:137:1 | param-init:0 block statement | stmts.go:113:2:121:2 | type-switch statement | +| stmts.go:113:2:121:2 | After type-switch statement | stmts.go:123:2:131:2 | type-switch statement | +| stmts.go:113:2:121:2 | type-switch statement | stmts.go:113:9:113:21 | ... := ... | +| stmts.go:113:9:113:21 | ... := ... | stmts.go:113:14:113:21 | Before type assertion | +| stmts.go:113:9:113:21 | After ... := ... | stmts.go:114:2:115:16 | case clause | +| stmts.go:113:9:113:21 | assign:0 ... := ... | stmts.go:113:9:113:21 | After ... := ... | +| stmts.go:113:14:113:14 | After x | stmts.go:113:14:113:21 | type assertion | +| stmts.go:113:14:113:14 | Before x | stmts.go:113:14:113:14 | x | +| stmts.go:113:14:113:14 | x | stmts.go:113:14:113:14 | After x | +| stmts.go:113:14:113:21 | After type assertion | stmts.go:113:9:113:21 | assign:0 ... := ... | +| stmts.go:113:14:113:21 | Before type assertion | stmts.go:113:14:113:14 | Before x | +| stmts.go:113:14:113:21 | type assertion | stmts.go:113:14:113:21 | After type assertion | +| stmts.go:114:2:115:16 | case clause | stmts.go:114:7:114:11 | error | +| stmts.go:114:7:114:11 | error | stmts.go:114:14:114:19 | string | +| stmts.go:114:14:114:19 | string | stmts.go:115:3:115:16 | expression statement | +| stmts.go:114:14:114:19 | string | stmts.go:116:2:118:14 | case clause | +| stmts.go:115:3:115:13 | After selection of Println | stmts.go:115:15:115:15 | Before y | +| stmts.go:115:3:115:13 | Before selection of Println | stmts.go:115:3:115:13 | selection of Println | +| stmts.go:115:3:115:13 | selection of Println | stmts.go:115:3:115:13 | After selection of Println | +| stmts.go:115:3:115:16 | After call to Println | stmts.go:115:3:115:16 | After expression statement | +| stmts.go:115:3:115:16 | After expression statement | stmts.go:113:2:121:2 | After type-switch statement | +| stmts.go:115:3:115:16 | Before call to Println | stmts.go:115:3:115:13 | Before selection of Println | +| stmts.go:115:3:115:16 | call to Println | stmts.go:112:1:137:1 | Exceptional Exit | +| stmts.go:115:3:115:16 | call to Println | stmts.go:115:3:115:16 | After call to Println | +| stmts.go:115:3:115:16 | expression statement | stmts.go:115:3:115:16 | Before call to Println | +| stmts.go:115:15:115:15 | After y | stmts.go:115:3:115:16 | call to Println | +| stmts.go:115:15:115:15 | Before y | stmts.go:115:15:115:15 | y | +| stmts.go:115:15:115:15 | y | stmts.go:115:15:115:15 | After y | +| stmts.go:116:2:118:14 | case clause | stmts.go:116:7:116:13 | float32 | +| stmts.go:116:7:116:13 | float32 | stmts.go:117:3:117:13 | expression statement | +| stmts.go:116:7:116:13 | float32 | stmts.go:119:2:120:7 | case clause | +| stmts.go:117:3:117:7 | After test5 | stmts.go:117:9:117:12 | Before true | +| stmts.go:117:3:117:7 | Before test5 | stmts.go:117:3:117:7 | test5 | +| stmts.go:117:3:117:7 | test5 | stmts.go:117:3:117:7 | After test5 | +| stmts.go:117:3:117:13 | After call to test5 | stmts.go:117:3:117:13 | After expression statement | +| stmts.go:117:3:117:13 | After expression statement | stmts.go:118:3:118:14 | expression statement | +| stmts.go:117:3:117:13 | Before call to test5 | stmts.go:117:3:117:7 | Before test5 | +| stmts.go:117:3:117:13 | call to test5 | stmts.go:112:1:137:1 | Exceptional Exit | +| stmts.go:117:3:117:13 | call to test5 | stmts.go:117:3:117:13 | After call to test5 | +| stmts.go:117:3:117:13 | expression statement | stmts.go:117:3:117:13 | Before call to test5 | +| stmts.go:117:9:117:12 | After true | stmts.go:117:3:117:13 | call to test5 | +| stmts.go:117:9:117:12 | Before true | stmts.go:117:9:117:12 | true | +| stmts.go:117:9:117:12 | true | stmts.go:117:9:117:12 | After true | +| stmts.go:118:3:118:7 | After test5 | stmts.go:118:9:118:13 | Before false | +| stmts.go:118:3:118:7 | Before test5 | stmts.go:118:3:118:7 | test5 | +| stmts.go:118:3:118:7 | test5 | stmts.go:118:3:118:7 | After test5 | +| stmts.go:118:3:118:14 | After call to test5 | stmts.go:118:3:118:14 | After expression statement | +| stmts.go:118:3:118:14 | After expression statement | stmts.go:113:2:121:2 | After type-switch statement | +| stmts.go:118:3:118:14 | Before call to test5 | stmts.go:118:3:118:7 | Before test5 | +| stmts.go:118:3:118:14 | call to test5 | stmts.go:112:1:137:1 | Exceptional Exit | +| stmts.go:118:3:118:14 | call to test5 | stmts.go:118:3:118:14 | After call to test5 | +| stmts.go:118:3:118:14 | expression statement | stmts.go:118:3:118:14 | Before call to test5 | +| stmts.go:118:9:118:13 | After false | stmts.go:118:3:118:14 | call to test5 | +| stmts.go:118:9:118:13 | Before false | stmts.go:118:9:118:13 | false | +| stmts.go:118:9:118:13 | false | stmts.go:118:9:118:13 | After false | +| stmts.go:119:2:120:7 | case clause | stmts.go:120:3:120:7 | ... = ... | +| stmts.go:120:3:120:7 | ... = ... | stmts.go:120:7:120:7 | Before y | +| stmts.go:120:3:120:7 | After ... = ... | stmts.go:113:2:121:2 | After type-switch statement | +| stmts.go:120:7:120:7 | After y | stmts.go:120:3:120:7 | After ... = ... | +| stmts.go:120:7:120:7 | Before y | stmts.go:120:7:120:7 | y | +| stmts.go:120:7:120:7 | y | stmts.go:120:7:120:7 | After y | +| stmts.go:123:2:131:2 | After type-switch statement | stmts.go:133:2:136:2 | type-switch statement | +| stmts.go:123:2:131:2 | type-switch statement | stmts.go:123:9:123:14 | ... := ... | +| stmts.go:123:9:123:14 | ... := ... | stmts.go:123:14:123:14 | Before x | +| stmts.go:123:9:123:14 | After ... := ... | stmts.go:123:17:123:24 | expression statement | +| stmts.go:123:9:123:14 | assign:0 ... := ... | stmts.go:123:9:123:14 | After ... := ... | +| stmts.go:123:14:123:14 | After x | stmts.go:123:9:123:14 | assign:0 ... := ... | +| stmts.go:123:14:123:14 | Before x | stmts.go:123:14:123:14 | x | +| stmts.go:123:14:123:14 | x | stmts.go:123:14:123:14 | After x | +| stmts.go:123:17:123:17 | After y | stmts.go:123:17:123:24 | type assertion | +| stmts.go:123:17:123:17 | Before y | stmts.go:123:17:123:17 | y | +| stmts.go:123:17:123:17 | y | stmts.go:123:17:123:17 | After y | +| stmts.go:123:17:123:24 | After expression statement | stmts.go:124:2:125:16 | case clause | +| stmts.go:123:17:123:24 | After type assertion | stmts.go:123:17:123:24 | After expression statement | +| stmts.go:123:17:123:24 | Before type assertion | stmts.go:123:17:123:17 | Before y | +| stmts.go:123:17:123:24 | expression statement | stmts.go:123:17:123:24 | Before type assertion | +| stmts.go:123:17:123:24 | type assertion | stmts.go:123:17:123:24 | After type assertion | +| stmts.go:124:2:125:16 | case clause | stmts.go:124:7:124:11 | error | +| stmts.go:124:7:124:11 | error | stmts.go:124:14:124:19 | string | +| stmts.go:124:14:124:19 | string | stmts.go:125:3:125:16 | expression statement | +| stmts.go:124:14:124:19 | string | stmts.go:126:2:128:14 | case clause | +| stmts.go:125:3:125:13 | After selection of Println | stmts.go:125:15:125:15 | Before y | +| stmts.go:125:3:125:13 | Before selection of Println | stmts.go:125:3:125:13 | selection of Println | +| stmts.go:125:3:125:13 | selection of Println | stmts.go:125:3:125:13 | After selection of Println | +| stmts.go:125:3:125:16 | After call to Println | stmts.go:125:3:125:16 | After expression statement | +| stmts.go:125:3:125:16 | After expression statement | stmts.go:123:2:131:2 | After type-switch statement | +| stmts.go:125:3:125:16 | Before call to Println | stmts.go:125:3:125:13 | Before selection of Println | +| stmts.go:125:3:125:16 | call to Println | stmts.go:112:1:137:1 | Exceptional Exit | +| stmts.go:125:3:125:16 | call to Println | stmts.go:125:3:125:16 | After call to Println | +| stmts.go:125:3:125:16 | expression statement | stmts.go:125:3:125:16 | Before call to Println | +| stmts.go:125:15:125:15 | After y | stmts.go:125:3:125:16 | call to Println | +| stmts.go:125:15:125:15 | Before y | stmts.go:125:15:125:15 | y | +| stmts.go:125:15:125:15 | y | stmts.go:125:15:125:15 | After y | +| stmts.go:126:2:128:14 | case clause | stmts.go:126:7:126:13 | float32 | +| stmts.go:126:7:126:13 | float32 | stmts.go:127:3:127:13 | expression statement | +| stmts.go:126:7:126:13 | float32 | stmts.go:129:2:130:7 | case clause | +| stmts.go:127:3:127:7 | After test5 | stmts.go:127:9:127:12 | Before true | +| stmts.go:127:3:127:7 | Before test5 | stmts.go:127:3:127:7 | test5 | +| stmts.go:127:3:127:7 | test5 | stmts.go:127:3:127:7 | After test5 | +| stmts.go:127:3:127:13 | After call to test5 | stmts.go:127:3:127:13 | After expression statement | +| stmts.go:127:3:127:13 | After expression statement | stmts.go:128:3:128:14 | expression statement | +| stmts.go:127:3:127:13 | Before call to test5 | stmts.go:127:3:127:7 | Before test5 | +| stmts.go:127:3:127:13 | call to test5 | stmts.go:112:1:137:1 | Exceptional Exit | +| stmts.go:127:3:127:13 | call to test5 | stmts.go:127:3:127:13 | After call to test5 | +| stmts.go:127:3:127:13 | expression statement | stmts.go:127:3:127:13 | Before call to test5 | +| stmts.go:127:9:127:12 | After true | stmts.go:127:3:127:13 | call to test5 | +| stmts.go:127:9:127:12 | Before true | stmts.go:127:9:127:12 | true | +| stmts.go:127:9:127:12 | true | stmts.go:127:9:127:12 | After true | +| stmts.go:128:3:128:7 | After test5 | stmts.go:128:9:128:13 | Before false | +| stmts.go:128:3:128:7 | Before test5 | stmts.go:128:3:128:7 | test5 | +| stmts.go:128:3:128:7 | test5 | stmts.go:128:3:128:7 | After test5 | +| stmts.go:128:3:128:14 | After call to test5 | stmts.go:128:3:128:14 | After expression statement | +| stmts.go:128:3:128:14 | After expression statement | stmts.go:123:2:131:2 | After type-switch statement | +| stmts.go:128:3:128:14 | Before call to test5 | stmts.go:128:3:128:7 | Before test5 | +| stmts.go:128:3:128:14 | call to test5 | stmts.go:112:1:137:1 | Exceptional Exit | +| stmts.go:128:3:128:14 | call to test5 | stmts.go:128:3:128:14 | After call to test5 | +| stmts.go:128:3:128:14 | expression statement | stmts.go:128:3:128:14 | Before call to test5 | +| stmts.go:128:9:128:13 | After false | stmts.go:128:3:128:14 | call to test5 | +| stmts.go:128:9:128:13 | Before false | stmts.go:128:9:128:13 | false | +| stmts.go:128:9:128:13 | false | stmts.go:128:9:128:13 | After false | +| stmts.go:129:2:130:7 | case clause | stmts.go:130:3:130:7 | ... = ... | +| stmts.go:130:3:130:7 | ... = ... | stmts.go:130:7:130:7 | Before y | +| stmts.go:130:3:130:7 | After ... = ... | stmts.go:123:2:131:2 | After type-switch statement | +| stmts.go:130:7:130:7 | After y | stmts.go:130:3:130:7 | After ... = ... | +| stmts.go:130:7:130:7 | Before y | stmts.go:130:7:130:7 | y | +| stmts.go:130:7:130:7 | y | stmts.go:130:7:130:7 | After y | +| stmts.go:133:2:136:2 | After type-switch statement | stmts.go:112:27:137:1 | After block statement | +| stmts.go:133:2:136:2 | type-switch statement | stmts.go:133:9:133:14 | ... := ... | +| stmts.go:133:9:133:14 | ... := ... | stmts.go:133:14:133:14 | Before x | +| stmts.go:133:9:133:14 | After ... := ... | stmts.go:133:17:133:24 | expression statement | +| stmts.go:133:9:133:14 | assign:0 ... := ... | stmts.go:133:9:133:14 | After ... := ... | +| stmts.go:133:14:133:14 | After x | stmts.go:133:9:133:14 | assign:0 ... := ... | +| stmts.go:133:14:133:14 | Before x | stmts.go:133:14:133:14 | x | +| stmts.go:133:14:133:14 | x | stmts.go:133:14:133:14 | After x | +| stmts.go:133:17:133:17 | After y | stmts.go:133:17:133:24 | type assertion | +| stmts.go:133:17:133:17 | Before y | stmts.go:133:17:133:17 | y | +| stmts.go:133:17:133:17 | y | stmts.go:133:17:133:17 | After y | +| stmts.go:133:17:133:24 | After expression statement | stmts.go:134:2:135:14 | case clause | +| stmts.go:133:17:133:24 | After type assertion | stmts.go:133:17:133:24 | After expression statement | +| stmts.go:133:17:133:24 | Before type assertion | stmts.go:133:17:133:17 | Before y | +| stmts.go:133:17:133:24 | expression statement | stmts.go:133:17:133:24 | Before type assertion | +| stmts.go:133:17:133:24 | type assertion | stmts.go:133:17:133:24 | After type assertion | +| stmts.go:134:2:135:14 | case clause | stmts.go:135:3:135:14 | expression statement | +| stmts.go:135:3:135:7 | After test5 | stmts.go:135:9:135:13 | Before false | +| stmts.go:135:3:135:7 | Before test5 | stmts.go:135:3:135:7 | test5 | +| stmts.go:135:3:135:7 | test5 | stmts.go:135:3:135:7 | After test5 | +| stmts.go:135:3:135:14 | After call to test5 | stmts.go:135:3:135:14 | After expression statement | +| stmts.go:135:3:135:14 | After expression statement | stmts.go:133:2:136:2 | After type-switch statement | +| stmts.go:135:3:135:14 | Before call to test5 | stmts.go:135:3:135:7 | Before test5 | +| stmts.go:135:3:135:14 | call to test5 | stmts.go:112:1:137:1 | Exceptional Exit | +| stmts.go:135:3:135:14 | call to test5 | stmts.go:135:3:135:14 | After call to test5 | +| stmts.go:135:3:135:14 | expression statement | stmts.go:135:3:135:14 | Before call to test5 | +| stmts.go:135:9:135:13 | After false | stmts.go:135:3:135:14 | call to test5 | +| stmts.go:135:9:135:13 | Before false | stmts.go:135:9:135:13 | false | +| stmts.go:135:9:135:13 | false | stmts.go:135:9:135:13 | After false | +| stmts.go:140:1:142:1 | After function declaration | stmts.go:145:1:159:1 | Before function declaration | +| stmts.go:140:1:142:1 | Before function declaration | stmts.go:140:1:142:1 | function declaration | +| stmts.go:140:1:142:1 | Entry | stmts.go:140:23:142:1 | block statement | +| stmts.go:140:1:142:1 | Exceptional Exit | stmts.go:140:1:142:1 | Exit | +| stmts.go:140:1:142:1 | Normal Exit | stmts.go:140:1:142:1 | Exit | +| stmts.go:140:1:142:1 | function declaration | stmts.go:140:1:142:1 | After function declaration | +| stmts.go:140:23:142:1 | After block statement | stmts.go:140:1:142:1 | Normal Exit | +| stmts.go:140:23:142:1 | arg:0 block statement | stmts.go:140:23:142:1 | param-init:0 block statement | +| stmts.go:140:23:142:1 | block statement | stmts.go:140:23:142:1 | arg:0 block statement | +| stmts.go:140:23:142:1 | param-init:0 block statement | stmts.go:141:2:141:7 | Before go statement | +| stmts.go:141:2:141:7 | After go statement | stmts.go:140:23:142:1 | After block statement | +| stmts.go:141:2:141:7 | Before go statement | stmts.go:141:5:141:7 | Before call to f | +| stmts.go:141:2:141:7 | go statement | stmts.go:141:2:141:7 | After go statement | +| stmts.go:141:5:141:5 | After f | stmts.go:141:5:141:7 | call to f | +| stmts.go:141:5:141:5 | Before f | stmts.go:141:5:141:5 | f | +| stmts.go:141:5:141:5 | f | stmts.go:141:5:141:5 | After f | +| stmts.go:141:5:141:7 | After call to f | stmts.go:141:2:141:7 | go statement | +| stmts.go:141:5:141:7 | Before call to f | stmts.go:141:5:141:5 | Before f | +| stmts.go:141:5:141:7 | call to f | stmts.go:140:1:142:1 | Exceptional Exit | +| stmts.go:141:5:141:7 | call to f | stmts.go:141:5:141:7 | After call to f | +| stmts.go:145:1:159:1 | After function declaration | stmts.go:0:0:0:0 | After stmts.go | +| stmts.go:145:1:159:1 | Before function declaration | stmts.go:145:1:159:1 | function declaration | +| stmts.go:145:1:159:1 | Entry | stmts.go:145:23:159:1 | block statement | +| stmts.go:145:1:159:1 | Exceptional Exit | stmts.go:145:1:159:1 | Exit | +| stmts.go:145:1:159:1 | Normal Exit | stmts.go:145:1:159:1 | Exit | +| stmts.go:145:1:159:1 | function declaration | stmts.go:145:1:159:1 | After function declaration | +| stmts.go:145:23:159:1 | After block statement | stmts.go:145:1:159:1 | Normal Exit | +| stmts.go:145:23:159:1 | arg:0 block statement | stmts.go:145:23:159:1 | param-init:0 block statement | +| stmts.go:145:23:159:1 | block statement | stmts.go:145:23:159:1 | arg:0 block statement | +| stmts.go:145:23:159:1 | param-init:0 block statement | stmts.go:146:2:151:2 | range statement | +| stmts.go:146:2:151:2 | After range statement | stmts.go:153:2:155:2 | range statement | +| stmts.go:146:2:151:2 | [LoopHeader] range statement | stmts.go:146:2:151:2 | After range statement | +| stmts.go:146:2:151:2 | [LoopHeader] range statement | stmts.go:146:2:151:2 | next range statement | +| stmts.go:146:2:151:2 | assign:0 range statement | stmts.go:146:20:151:2 | block statement | +| stmts.go:146:2:151:2 | extract:0 range statement | stmts.go:146:2:151:2 | assign:0 range statement | +| stmts.go:146:2:151:2 | next range statement | stmts.go:146:2:151:2 | extract:0 range statement | +| stmts.go:146:2:151:2 | range statement | stmts.go:146:17:146:18 | Before xs | +| stmts.go:146:17:146:18 | After xs | stmts.go:146:2:151:2 | [LoopHeader] range statement | +| stmts.go:146:17:146:18 | Before xs | stmts.go:146:17:146:18 | xs | +| stmts.go:146:17:146:18 | xs | stmts.go:146:17:146:18 | After xs | +| stmts.go:146:20:151:2 | After block statement | stmts.go:146:2:151:2 | [LoopHeader] range statement | +| stmts.go:146:20:151:2 | block statement | stmts.go:147:3:149:3 | if statement | +| stmts.go:147:3:149:3 | After if statement | stmts.go:150:3:150:14 | expression statement | +| stmts.go:147:3:149:3 | if statement | stmts.go:147:6:147:10 | Before ...>... | +| stmts.go:147:6:147:6 | After x | stmts.go:147:10:147:10 | Before 5 | +| stmts.go:147:6:147:6 | Before x | stmts.go:147:6:147:6 | x | +| stmts.go:147:6:147:6 | x | stmts.go:147:6:147:6 | After x | +| stmts.go:147:6:147:10 | ...>... | stmts.go:147:6:147:10 | After ...>... [false] | +| stmts.go:147:6:147:10 | ...>... | stmts.go:147:6:147:10 | After ...>... [true] | +| stmts.go:147:6:147:10 | After ...>... [false] | stmts.go:147:3:149:3 | After if statement | +| stmts.go:147:6:147:10 | After ...>... [true] | stmts.go:147:12:149:3 | block statement | +| stmts.go:147:6:147:10 | Before ...>... | stmts.go:147:6:147:6 | Before x | +| stmts.go:147:10:147:10 | 5 | stmts.go:147:10:147:10 | After 5 | +| stmts.go:147:10:147:10 | After 5 | stmts.go:147:6:147:10 | ...>... | +| stmts.go:147:10:147:10 | Before 5 | stmts.go:147:10:147:10 | 5 | +| stmts.go:147:12:149:3 | block statement | stmts.go:148:4:148:11 | Before continue statement | +| stmts.go:148:4:148:11 | Before continue statement | stmts.go:148:4:148:11 | continue statement | +| stmts.go:148:4:148:11 | continue statement | stmts.go:146:2:151:2 | [LoopHeader] range statement | +| stmts.go:150:3:150:11 | After selection of Print | stmts.go:150:13:150:13 | Before x | +| stmts.go:150:3:150:11 | Before selection of Print | stmts.go:150:3:150:11 | selection of Print | +| stmts.go:150:3:150:11 | selection of Print | stmts.go:150:3:150:11 | After selection of Print | +| stmts.go:150:3:150:14 | After call to Print | stmts.go:150:3:150:14 | After expression statement | +| stmts.go:150:3:150:14 | After expression statement | stmts.go:146:20:151:2 | After block statement | +| stmts.go:150:3:150:14 | Before call to Print | stmts.go:150:3:150:11 | Before selection of Print | +| stmts.go:150:3:150:14 | call to Print | stmts.go:145:1:159:1 | Exceptional Exit | +| stmts.go:150:3:150:14 | call to Print | stmts.go:150:3:150:14 | After call to Print | +| stmts.go:150:3:150:14 | expression statement | stmts.go:150:3:150:14 | Before call to Print | +| stmts.go:150:13:150:13 | After x | stmts.go:150:3:150:14 | call to Print | +| stmts.go:150:13:150:13 | Before x | stmts.go:150:13:150:13 | x | +| stmts.go:150:13:150:13 | x | stmts.go:150:13:150:13 | After x | +| stmts.go:153:2:155:2 | After range statement | stmts.go:157:2:158:2 | range statement | +| stmts.go:153:2:155:2 | [LoopHeader] range statement | stmts.go:153:2:155:2 | After range statement | +| stmts.go:153:2:155:2 | [LoopHeader] range statement | stmts.go:153:2:155:2 | next range statement | +| stmts.go:153:2:155:2 | assign:0 range statement | stmts.go:153:2:155:2 | extract:1 range statement | +| stmts.go:153:2:155:2 | assign:1 range statement | stmts.go:153:23:155:2 | block statement | +| stmts.go:153:2:155:2 | extract:0 range statement | stmts.go:153:2:155:2 | assign:0 range statement | +| stmts.go:153:2:155:2 | extract:1 range statement | stmts.go:153:2:155:2 | assign:1 range statement | +| stmts.go:153:2:155:2 | next range statement | stmts.go:153:2:155:2 | extract:0 range statement | +| stmts.go:153:2:155:2 | range statement | stmts.go:153:20:153:21 | Before xs | +| stmts.go:153:20:153:21 | After xs | stmts.go:153:2:155:2 | [LoopHeader] range statement | +| stmts.go:153:20:153:21 | Before xs | stmts.go:153:20:153:21 | xs | +| stmts.go:153:20:153:21 | xs | stmts.go:153:20:153:21 | After xs | +| stmts.go:153:23:155:2 | After block statement | stmts.go:153:2:155:2 | [LoopHeader] range statement | +| stmts.go:153:23:155:2 | block statement | stmts.go:154:3:154:17 | expression statement | +| stmts.go:154:3:154:11 | After selection of Print | stmts.go:154:13:154:13 | Before i | +| stmts.go:154:3:154:11 | Before selection of Print | stmts.go:154:3:154:11 | selection of Print | +| stmts.go:154:3:154:11 | selection of Print | stmts.go:154:3:154:11 | After selection of Print | +| stmts.go:154:3:154:17 | After call to Print | stmts.go:154:3:154:17 | After expression statement | +| stmts.go:154:3:154:17 | After expression statement | stmts.go:153:23:155:2 | After block statement | +| stmts.go:154:3:154:17 | Before call to Print | stmts.go:154:3:154:11 | Before selection of Print | +| stmts.go:154:3:154:17 | call to Print | stmts.go:145:1:159:1 | Exceptional Exit | +| stmts.go:154:3:154:17 | call to Print | stmts.go:154:3:154:17 | After call to Print | +| stmts.go:154:3:154:17 | expression statement | stmts.go:154:3:154:17 | Before call to Print | +| stmts.go:154:13:154:13 | After i | stmts.go:154:16:154:16 | Before v | +| stmts.go:154:13:154:13 | Before i | stmts.go:154:13:154:13 | i | +| stmts.go:154:13:154:13 | i | stmts.go:154:13:154:13 | After i | +| stmts.go:154:16:154:16 | After v | stmts.go:154:3:154:17 | call to Print | +| stmts.go:154:16:154:16 | Before v | stmts.go:154:16:154:16 | v | +| stmts.go:154:16:154:16 | v | stmts.go:154:16:154:16 | After v | +| stmts.go:157:2:158:2 | After range statement | stmts.go:145:23:159:1 | After block statement | +| stmts.go:157:2:158:2 | [LoopHeader] range statement | stmts.go:157:2:158:2 | After range statement | +| stmts.go:157:2:158:2 | [LoopHeader] range statement | stmts.go:157:2:158:2 | next range statement | +| stmts.go:157:2:158:2 | next range statement | stmts.go:157:15:158:2 | block statement | +| stmts.go:157:2:158:2 | range statement | stmts.go:157:12:157:13 | Before xs | +| stmts.go:157:12:157:13 | After xs | stmts.go:157:2:158:2 | [LoopHeader] range statement | +| stmts.go:157:12:157:13 | Before xs | stmts.go:157:12:157:13 | xs | +| stmts.go:157:12:157:13 | xs | stmts.go:157:12:157:13 | After xs | +| stmts.go:157:15:158:2 | block statement | stmts.go:157:2:158:2 | [LoopHeader] range statement | +| tst.go:0:0:0:0 | After tst.go | tst.go:0:0:0:0 | Normal Exit | +| tst.go:0:0:0:0 | Entry | tst.go:0:0:0:0 | tst.go | +| tst.go:0:0:0:0 | Normal Exit | tst.go:0:0:0:0 | Exit | +| tst.go:0:0:0:0 | tst.go | tst.go:3:1:12:1 | Before function declaration | +| tst.go:3:1:12:1 | After function declaration | tst.go:14:1:21:1 | Before function declaration | +| tst.go:3:1:12:1 | Before function declaration | tst.go:3:1:12:1 | function declaration | +| tst.go:3:1:12:1 | Entry | tst.go:3:19:12:1 | block statement | +| tst.go:3:1:12:1 | Normal Exit | tst.go:3:1:12:1 | Exit | +| tst.go:3:1:12:1 | function declaration | tst.go:3:1:12:1 | After function declaration | +| tst.go:3:19:12:1 | After block statement | tst.go:3:1:12:1 | Normal Exit | +| tst.go:3:19:12:1 | arg:0 block statement | tst.go:3:19:12:1 | param-init:0 block statement | +| tst.go:3:19:12:1 | block statement | tst.go:3:19:12:1 | arg:0 block statement | +| tst.go:3:19:12:1 | param-init:0 block statement | tst.go:4:2:11:2 | expression-switch statement | +| tst.go:4:2:11:2 | After expression-switch statement | tst.go:3:19:12:1 | After block statement | +| tst.go:4:2:11:2 | expression-switch statement | tst.go:5:2:5:13 | case clause | +| tst.go:5:2:5:13 | case clause | tst.go:5:7:5:12 | Before ...<... | +| tst.go:5:7:5:7 | After x | tst.go:5:11:5:12 | Before 23 | +| tst.go:5:7:5:7 | Before x | tst.go:5:7:5:7 | x | +| tst.go:5:7:5:7 | x | tst.go:5:7:5:7 | After x | +| tst.go:5:7:5:12 | ...<... | tst.go:5:7:5:12 | After ...<... [false] | +| tst.go:5:7:5:12 | ...<... | tst.go:5:7:5:12 | After ...<... [true] | +| tst.go:5:7:5:12 | After ...<... [false] | tst.go:4:2:11:2 | After expression-switch statement | +| tst.go:5:7:5:12 | After ...<... [false] | tst.go:7:2:7:13 | case clause | +| tst.go:5:7:5:12 | After ...<... [true] | tst.go:4:2:11:2 | After expression-switch statement | +| tst.go:5:7:5:12 | After ...<... [true] | tst.go:7:2:7:13 | case clause | +| tst.go:5:7:5:12 | Before ...<... | tst.go:5:7:5:7 | Before x | +| tst.go:5:11:5:12 | 23 | tst.go:5:11:5:12 | After 23 | +| tst.go:5:11:5:12 | After 23 | tst.go:5:7:5:12 | ...<... | +| tst.go:5:11:5:12 | Before 23 | tst.go:5:11:5:12 | 23 | +| tst.go:7:2:7:13 | case clause | tst.go:7:7:7:12 | Before ...<... | +| tst.go:7:7:7:7 | After x | tst.go:7:11:7:12 | Before 42 | +| tst.go:7:7:7:7 | Before x | tst.go:7:7:7:7 | x | +| tst.go:7:7:7:7 | x | tst.go:7:7:7:7 | After x | +| tst.go:7:7:7:12 | ...<... | tst.go:7:7:7:12 | After ...<... [false] | +| tst.go:7:7:7:12 | ...<... | tst.go:7:7:7:12 | After ...<... [true] | +| tst.go:7:7:7:12 | After ...<... [false] | tst.go:4:2:11:2 | After expression-switch statement | +| tst.go:7:7:7:12 | After ...<... [false] | tst.go:9:2:9:13 | case clause | +| tst.go:7:7:7:12 | After ...<... [true] | tst.go:4:2:11:2 | After expression-switch statement | +| tst.go:7:7:7:12 | After ...<... [true] | tst.go:9:2:9:13 | case clause | +| tst.go:7:7:7:12 | Before ...<... | tst.go:7:7:7:7 | Before x | +| tst.go:7:11:7:12 | 42 | tst.go:7:11:7:12 | After 42 | +| tst.go:7:11:7:12 | After 42 | tst.go:7:7:7:12 | ...<... | +| tst.go:7:11:7:12 | Before 42 | tst.go:7:11:7:12 | 42 | +| tst.go:9:2:9:13 | case clause | tst.go:9:7:9:12 | Before ...<... | +| tst.go:9:7:9:7 | After x | tst.go:9:11:9:12 | Before 23 | +| tst.go:9:7:9:7 | Before x | tst.go:9:7:9:7 | x | +| tst.go:9:7:9:7 | x | tst.go:9:7:9:7 | After x | +| tst.go:9:7:9:12 | ...<... | tst.go:9:7:9:12 | After ...<... [false] | +| tst.go:9:7:9:12 | ...<... | tst.go:9:7:9:12 | After ...<... [true] | +| tst.go:9:7:9:12 | After ...<... [false] | tst.go:4:2:11:2 | After expression-switch statement | +| tst.go:9:7:9:12 | After ...<... [true] | tst.go:4:2:11:2 | After expression-switch statement | +| tst.go:9:7:9:12 | Before ...<... | tst.go:9:7:9:7 | Before x | +| tst.go:9:11:9:12 | 23 | tst.go:9:11:9:12 | After 23 | +| tst.go:9:11:9:12 | After 23 | tst.go:9:7:9:12 | ...<... | +| tst.go:9:11:9:12 | Before 23 | tst.go:9:11:9:12 | 23 | +| tst.go:14:1:21:1 | After function declaration | tst.go:23:1:26:1 | Before function declaration | +| tst.go:14:1:21:1 | Before function declaration | tst.go:14:1:21:1 | function declaration | +| tst.go:14:1:21:1 | Entry | tst.go:14:26:21:1 | block statement | +| tst.go:14:1:21:1 | Normal Exit | tst.go:14:1:21:1 | Exit | +| tst.go:14:1:21:1 | function declaration | tst.go:14:1:21:1 | After function declaration | +| tst.go:14:26:21:1 | After block statement | tst.go:14:1:21:1 | Normal Exit | +| tst.go:14:26:21:1 | arg:0 block statement | tst.go:14:26:21:1 | param-init:0 block statement | +| tst.go:14:26:21:1 | block statement | tst.go:14:26:21:1 | arg:0 block statement | +| tst.go:14:26:21:1 | param-init:0 block statement | tst.go:15:2:20:2 | expression-switch statement | +| tst.go:15:2:20:2 | After expression-switch statement | tst.go:14:26:21:1 | After block statement | +| tst.go:15:2:20:2 | expression-switch statement | tst.go:16:2:16:34 | case clause | +| tst.go:16:2:16:34 | case clause | tst.go:16:7:16:33 | Before ...<... | +| tst.go:16:7:16:11 | After value | tst.go:16:15:16:33 | Before ...*... | +| tst.go:16:7:16:11 | Before value | tst.go:16:7:16:11 | value | +| tst.go:16:7:16:11 | value | tst.go:16:7:16:11 | After value | +| tst.go:16:7:16:33 | ...<... | tst.go:16:7:16:33 | After ...<... [false] | +| tst.go:16:7:16:33 | ...<... | tst.go:16:7:16:33 | After ...<... [true] | +| tst.go:16:7:16:33 | After ...<... [false] | tst.go:15:2:20:2 | After expression-switch statement | +| tst.go:16:7:16:33 | After ...<... [false] | tst.go:18:2:18:39 | case clause | +| tst.go:16:7:16:33 | After ...<... [true] | tst.go:15:2:20:2 | After expression-switch statement | +| tst.go:16:7:16:33 | After ...<... [true] | tst.go:18:2:18:39 | case clause | +| tst.go:16:7:16:33 | Before ...<... | tst.go:16:7:16:11 | Before value | +| tst.go:16:15:16:18 | 1024 | tst.go:16:15:16:18 | After 1024 | +| tst.go:16:15:16:18 | After 1024 | tst.go:16:20:16:23 | Before 1024 | +| tst.go:16:15:16:18 | Before 1024 | tst.go:16:15:16:18 | 1024 | +| tst.go:16:15:16:23 | ...*... | tst.go:16:15:16:23 | After ...*... | +| tst.go:16:15:16:23 | After ...*... | tst.go:16:25:16:28 | Before 1024 | +| tst.go:16:15:16:23 | Before ...*... | tst.go:16:15:16:18 | Before 1024 | +| tst.go:16:15:16:28 | ...*... | tst.go:16:15:16:28 | After ...*... | +| tst.go:16:15:16:28 | After ...*... | tst.go:16:30:16:33 | Before 1024 | +| tst.go:16:15:16:28 | Before ...*... | tst.go:16:15:16:23 | Before ...*... | +| tst.go:16:15:16:33 | ...*... | tst.go:16:15:16:33 | After ...*... | +| tst.go:16:15:16:33 | After ...*... | tst.go:16:7:16:33 | ...<... | +| tst.go:16:15:16:33 | Before ...*... | tst.go:16:15:16:28 | Before ...*... | +| tst.go:16:20:16:23 | 1024 | tst.go:16:20:16:23 | After 1024 | +| tst.go:16:20:16:23 | After 1024 | tst.go:16:15:16:23 | ...*... | +| tst.go:16:20:16:23 | Before 1024 | tst.go:16:20:16:23 | 1024 | +| tst.go:16:25:16:28 | 1024 | tst.go:16:25:16:28 | After 1024 | +| tst.go:16:25:16:28 | After 1024 | tst.go:16:15:16:28 | ...*... | +| tst.go:16:25:16:28 | Before 1024 | tst.go:16:25:16:28 | 1024 | +| tst.go:16:30:16:33 | 1024 | tst.go:16:30:16:33 | After 1024 | +| tst.go:16:30:16:33 | After 1024 | tst.go:16:15:16:33 | ...*... | +| tst.go:16:30:16:33 | Before 1024 | tst.go:16:30:16:33 | 1024 | +| tst.go:18:2:18:39 | case clause | tst.go:18:7:18:38 | Before ...<... | +| tst.go:18:7:18:11 | After value | tst.go:18:15:18:38 | Before ...*... | +| tst.go:18:7:18:11 | Before value | tst.go:18:7:18:11 | value | +| tst.go:18:7:18:11 | value | tst.go:18:7:18:11 | After value | +| tst.go:18:7:18:38 | ...<... | tst.go:18:7:18:38 | After ...<... [false] | +| tst.go:18:7:18:38 | ...<... | tst.go:18:7:18:38 | After ...<... [true] | +| tst.go:18:7:18:38 | After ...<... [false] | tst.go:15:2:20:2 | After expression-switch statement | +| tst.go:18:7:18:38 | After ...<... [true] | tst.go:15:2:20:2 | After expression-switch statement | +| tst.go:18:7:18:38 | Before ...<... | tst.go:18:7:18:11 | Before value | +| tst.go:18:15:18:18 | 1024 | tst.go:18:15:18:18 | After 1024 | +| tst.go:18:15:18:18 | After 1024 | tst.go:18:20:18:23 | Before 1024 | +| tst.go:18:15:18:18 | Before 1024 | tst.go:18:15:18:18 | 1024 | +| tst.go:18:15:18:23 | ...*... | tst.go:18:15:18:23 | After ...*... | +| tst.go:18:15:18:23 | After ...*... | tst.go:18:25:18:28 | Before 1024 | +| tst.go:18:15:18:23 | Before ...*... | tst.go:18:15:18:18 | Before 1024 | +| tst.go:18:15:18:28 | ...*... | tst.go:18:15:18:28 | After ...*... | +| tst.go:18:15:18:28 | After ...*... | tst.go:18:30:18:33 | Before 1024 | +| tst.go:18:15:18:28 | Before ...*... | tst.go:18:15:18:23 | Before ...*... | +| tst.go:18:15:18:33 | ...*... | tst.go:18:15:18:33 | After ...*... | +| tst.go:18:15:18:33 | After ...*... | tst.go:18:35:18:38 | Before 1024 | +| tst.go:18:15:18:33 | Before ...*... | tst.go:18:15:18:28 | Before ...*... | +| tst.go:18:15:18:38 | ...*... | tst.go:18:15:18:38 | After ...*... | +| tst.go:18:15:18:38 | After ...*... | tst.go:18:7:18:38 | ...<... | +| tst.go:18:15:18:38 | Before ...*... | tst.go:18:15:18:33 | Before ...*... | +| tst.go:18:20:18:23 | 1024 | tst.go:18:20:18:23 | After 1024 | +| tst.go:18:20:18:23 | After 1024 | tst.go:18:15:18:23 | ...*... | +| tst.go:18:20:18:23 | Before 1024 | tst.go:18:20:18:23 | 1024 | +| tst.go:18:25:18:28 | 1024 | tst.go:18:25:18:28 | After 1024 | +| tst.go:18:25:18:28 | After 1024 | tst.go:18:15:18:28 | ...*... | +| tst.go:18:25:18:28 | Before 1024 | tst.go:18:25:18:28 | 1024 | +| tst.go:18:30:18:33 | 1024 | tst.go:18:30:18:33 | After 1024 | +| tst.go:18:30:18:33 | After 1024 | tst.go:18:15:18:33 | ...*... | +| tst.go:18:30:18:33 | Before 1024 | tst.go:18:30:18:33 | 1024 | +| tst.go:18:35:18:38 | 1024 | tst.go:18:35:18:38 | After 1024 | +| tst.go:18:35:18:38 | After 1024 | tst.go:18:15:18:38 | ...*... | +| tst.go:18:35:18:38 | Before 1024 | tst.go:18:35:18:38 | 1024 | +| tst.go:23:1:26:1 | After function declaration | tst.go:28:1:32:1 | Before function declaration | +| tst.go:23:1:26:1 | Before function declaration | tst.go:23:1:26:1 | function declaration | +| tst.go:23:1:26:1 | Entry | tst.go:23:15:26:1 | block statement | +| tst.go:23:1:26:1 | Normal Exit | tst.go:23:1:26:1 | Exit | +| tst.go:23:1:26:1 | function declaration | tst.go:23:1:26:1 | After function declaration | +| tst.go:23:15:26:1 | After block statement | tst.go:23:1:26:1 | Normal Exit | +| tst.go:23:15:26:1 | block statement | tst.go:24:2:25:2 | expression-switch statement | +| tst.go:24:2:25:2 | After expression-switch statement | tst.go:23:15:26:1 | After block statement | +| tst.go:24:2:25:2 | expression-switch statement | tst.go:24:2:25:2 | After expression-switch statement | +| tst.go:28:1:32:1 | After function declaration | tst.go:0:0:0:0 | After tst.go | +| tst.go:28:1:32:1 | Before function declaration | tst.go:28:1:32:1 | function declaration | +| tst.go:28:1:32:1 | Entry | tst.go:28:15:32:1 | block statement | +| tst.go:28:1:32:1 | Normal Exit | tst.go:28:1:32:1 | Exit | +| tst.go:28:1:32:1 | function declaration | tst.go:28:1:32:1 | After function declaration | +| tst.go:28:15:32:1 | After block statement | tst.go:28:1:32:1 | Normal Exit | +| tst.go:28:15:32:1 | block statement | tst.go:29:2:31:2 | expression-switch statement | +| tst.go:29:2:31:2 | After expression-switch statement | tst.go:28:15:32:1 | After block statement | +| tst.go:29:2:31:2 | expression-switch statement | tst.go:30:2:30:9 | case clause | +| tst.go:30:2:30:9 | case clause | tst.go:29:2:31:2 | After expression-switch statement | +| tst.go:30:2:30:9 | case clause | tst.go:29:9:31:2 | After block statement | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/srcs.expected b/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/srcs.expected index 87ca46d4c13..5eb5039dd3c 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/srcs.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/srcs.expected @@ -4,9 +4,9 @@ invalidModelRow | test.go:40:8:40:15 | call to Src2 | qltest | | test.go:40:8:40:15 | call to Src2 | qltest-w-subtypes | | test.go:41:8:41:16 | call to Src2 | qltest-w-subtypes | -| test.go:42:2:42:21 | ... = ...[0] | qltest | -| test.go:42:2:42:21 | ... = ...[1] | qltest-w-subtypes | -| test.go:43:2:43:22 | ... = ...[1] | qltest-w-subtypes | +| test.go:42:2:42:21 | extract:0 ... = ... | qltest | +| test.go:42:2:42:21 | extract:1 ... = ... | qltest-w-subtypes | +| test.go:43:2:43:22 | extract:1 ... = ... | qltest-w-subtypes | | test.go:44:11:44:13 | arg [postupdate] | qltest-arg | | test.go:59:9:59:16 | call to Src1 | qltest | | test.go:102:46:102:53 | call to Src1 | qltest | @@ -22,4 +22,4 @@ invalidModelRow | test.go:187:24:187:31 | call to Src1 | qltest | | test.go:191:24:191:31 | call to Src1 | qltest | | test.go:209:10:209:28 | selection of SourceVariable | qltest | -| test.go:216:15:216:17 | SSA def(src) | qltest | +| test.go:216:37:218:1 | SSA def(src) | qltest | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/steps.expected b/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/steps.expected index eb52daa4253..83861e4d9f8 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/steps.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/steps.expected @@ -1,14 +1,14 @@ invalidModelRow #select | test.go:17:23:17:25 | arg | test.go:17:10:17:26 | call to StepArgRes | -| test.go:18:27:18:29 | arg | test.go:18:2:18:30 | ... = ...[1] | +| test.go:18:27:18:29 | arg | test.go:18:2:18:30 | extract:1 ... = ... | | test.go:19:15:19:17 | arg | test.go:19:20:19:23 | arg1 [postupdate] | | test.go:21:16:21:18 | arg | test.go:21:2:21:2 | t [postupdate] | | test.go:22:10:22:10 | t | test.go:22:10:22:24 | call to StepQualRes | | test.go:23:2:23:2 | t | test.go:23:16:23:18 | arg [postupdate] | | test.go:24:32:24:34 | arg | test.go:24:10:24:35 | call to StepArgResNoQual | | test.go:61:25:61:27 | src | test.go:61:12:61:28 | call to StepArgRes | -| test.go:64:29:64:31 | src | test.go:64:2:64:32 | ... := ...[1] | +| test.go:64:29:64:31 | src | test.go:64:2:64:32 | extract:1 ... := ... | | test.go:68:15:68:17 | src | test.go:68:20:68:25 | taint3 [postupdate] | | test.go:76:21:76:23 | src | test.go:76:2:76:7 | taint4 [postupdate] | | test.go:79:13:79:25 | type assertion | test.go:79:12:79:40 | call to StepQualRes | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/GlobalValueNumbering/GlobalValueNumber.expected b/go/ql/test/library-tests/semmle/go/dataflow/GlobalValueNumbering/GlobalValueNumber.expected index 287a7f735f2..22336637125 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/GlobalValueNumbering/GlobalValueNumber.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/GlobalValueNumbering/GlobalValueNumber.expected @@ -1,42 +1,40 @@ -| main.go:6:2:6:5 | 1 | main.go:14:7:14:7 | 1 | -| main.go:10:2:10:2 | SSA def(x) | main.go:10:7:10:7 | 0 | +| main.go:6:2:6:5 | implicit-one increment statement | main.go:14:7:14:7 | 1 | +| main.go:10:2:10:7 | SSA def(x) | main.go:10:7:10:7 | 0 | | main.go:10:7:10:7 | 0 | main.go:10:7:10:7 | 0 | -| main.go:11:6:11:6 | SSA def(y) | main.go:10:7:10:7 | 0 | -| main.go:11:6:11:6 | zero value for y | main.go:10:7:10:7 | 0 | +| main.go:11:6:11:10 | SSA def(y) | main.go:10:7:10:7 | 0 | +| main.go:11:6:11:10 | zero-init:0 value declaration specifier | main.go:10:7:10:7 | 0 | | main.go:12:2:12:18 | call to Println | main.go:12:2:12:18 | call to Println | | main.go:12:14:12:14 | x | main.go:10:7:10:7 | 0 | | main.go:12:17:12:17 | y | main.go:10:7:10:7 | 0 | -| main.go:14:2:14:2 | SSA def(z) | main.go:14:7:14:7 | 1 | +| main.go:14:2:14:7 | SSA def(z) | main.go:14:7:14:7 | 1 | | main.go:14:7:14:7 | 1 | main.go:14:7:14:7 | 1 | | main.go:15:2:15:9 | call to bump | main.go:15:2:15:9 | call to bump | | main.go:16:2:16:21 | call to Println | main.go:16:2:16:21 | call to Println | | main.go:16:14:16:14 | x | main.go:10:7:10:7 | 0 | | main.go:16:17:16:17 | y | main.go:10:7:10:7 | 0 | -| main.go:18:2:18:3 | SSA def(ss) | main.go:18:8:18:24 | call to make | +| main.go:18:2:18:24 | SSA def(ss) | main.go:18:8:18:24 | call to make | | main.go:18:8:18:24 | call to make | main.go:18:8:18:24 | call to make | | main.go:18:23:18:23 | 3 | main.go:18:23:18:23 | 3 | | main.go:19:5:19:5 | 2 | main.go:19:5:19:5 | 2 | | main.go:19:10:19:24 | "Hello, world!" | main.go:19:10:19:24 | "Hello, world!" | | main.go:20:2:20:16 | call to Println | main.go:20:2:20:16 | call to Println | -| main.go:23:14:23:16 | implicit read of res | main.go:24:8:24:8 | 4 | -| main.go:23:14:23:16 | zero value for res | main.go:10:7:10:7 | 0 | -| main.go:24:2:24:4 | SSA def(res) | main.go:24:8:24:8 | 4 | +| main.go:23:23:26:1 | result-read:0 block statement | main.go:24:8:24:8 | 4 | +| main.go:24:2:24:8 | SSA def(res) | main.go:24:8:24:8 | 4 | | main.go:24:8:24:8 | 4 | main.go:24:8:24:8 | 4 | -| main.go:28:15:28:17 | implicit read of res | main.go:30:9:30:9 | 6 | -| main.go:28:15:28:17 | zero value for res | main.go:10:7:10:7 | 0 | +| main.go:28:24:31:1 | result-read:0 block statement | main.go:29:8:29:8 | 5 | +| main.go:29:2:29:8 | SSA def(res) | main.go:29:8:29:8 | 5 | | main.go:29:8:29:8 | 5 | main.go:29:8:29:8 | 5 | | main.go:30:9:30:9 | 6 | main.go:30:9:30:9 | 6 | -| main.go:30:9:30:9 | SSA def(res) | main.go:30:9:30:9 | 6 | -| main.go:33:15:33:17 | zero value for res | main.go:10:7:10:7 | 0 | +| main.go:34:2:34:8 | SSA def(res) | main.go:34:8:34:8 | 7 | | main.go:34:8:34:8 | 7 | main.go:34:8:34:8 | 7 | | main.go:35:8:37:4 | function call | main.go:35:8:37:4 | function call | -| main.go:36:3:36:5 | SSA def(res) | main.go:36:9:36:9 | 8 | +| main.go:36:3:36:9 | SSA def(res) | main.go:36:9:36:9 | 8 | | main.go:36:9:36:9 | 8 | main.go:36:9:36:9 | 8 | | main.go:38:9:38:9 | 9 | main.go:38:9:38:9 | 9 | -| main.go:38:9:38:9 | SSA def(res) | main.go:38:9:38:9 | 9 | | regressions.go:5:11:5:31 | call to Sizeof | regressions.go:5:11:5:31 | call to Sizeof | +| regressions.go:5:25:5:30 | call to test | regressions.go:5:25:5:30 | call to test | | regressions.go:7:11:7:15 | false | regressions.go:7:11:7:15 | false | -| regressions.go:9:11:9:12 | !... | regressions.go:11:11:11:14 | true | +| regressions.go:9:12:9:12 | d | regressions.go:7:11:7:15 | false | | regressions.go:11:11:11:14 | true | regressions.go:11:11:11:14 | true | | regressions.go:30:9:30:22 | call to getPayload | regressions.go:30:9:30:22 | call to getPayload | | regressions.go:30:26:30:39 | call to getPayload | regressions.go:30:26:30:39 | call to getPayload | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ReadsAndWrites/readsElement.expected b/go/ql/test/library-tests/semmle/go/dataflow/ReadsAndWrites/readsElement.expected index 640c0dec267..df6a0b049b6 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ReadsAndWrites/readsElement.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ReadsAndWrites/readsElement.expected @@ -1,3 +1,3 @@ | tst.go:19:10:19:14 | index expression | tst.go:19:10:19:11 | xs | tst.go:19:13:19:13 | 1 | -| tst.go:20:10:20:14 | index expression | tst.go:20:10:20:11 | implicit dereference | tst.go:20:13:20:13 | 1 | +| tst.go:20:10:20:14 | index expression | tst.go:20:10:20:11 | implicit-deref ps | tst.go:20:13:20:13 | 1 | | tst.go:20:10:20:14 | index expression | tst.go:20:10:20:11 | ps | tst.go:20:13:20:13 | 1 | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ReadsAndWrites/readsField.expected b/go/ql/test/library-tests/semmle/go/dataflow/ReadsAndWrites/readsField.expected index 683117030c7..3dbbdc221e8 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ReadsAndWrites/readsField.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ReadsAndWrites/readsField.expected @@ -1,4 +1,4 @@ -| tst.go:8:8:8:10 | selection of f | tst.go:8:8:8:8 | implicit dereference | tst.go:4:2:4:2 | f | +| tst.go:8:8:8:10 | selection of f | tst.go:8:8:8:8 | implicit-deref t | tst.go:4:2:4:2 | f | | tst.go:8:8:8:10 | selection of f | tst.go:8:8:8:8 | t | tst.go:4:2:4:2 | f | | tst.go:13:9:13:11 | selection of f | tst.go:13:9:13:9 | t | tst.go:4:2:4:2 | f | | tst.go:17:8:17:10 | selection of f | tst.go:17:8:17:8 | x | tst.go:4:2:4:2 | f | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ReadsAndWrites/readsMethod.expected b/go/ql/test/library-tests/semmle/go/dataflow/ReadsAndWrites/readsMethod.expected index 1909e325745..0a948af2cd2 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ReadsAndWrites/readsMethod.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ReadsAndWrites/readsMethod.expected @@ -1,3 +1,3 @@ -| tst.go:9:9:9:13 | selection of get | tst.go:9:9:9:9 | implicit dereference | tst.go:12:12:12:14 | get | +| tst.go:9:9:9:13 | selection of get | tst.go:9:9:9:9 | implicit-deref t | tst.go:12:12:12:14 | get | | tst.go:9:9:9:13 | selection of get | tst.go:9:9:9:9 | t | tst.go:12:12:12:14 | get | | tst.go:18:2:18:7 | selection of bump | tst.go:18:2:18:2 | x | tst.go:7:13:7:16 | bump | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected index 4e885d284d4..c13bbc39ec8 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected @@ -5,11 +5,11 @@ | test.go:34:16:34:20 | param | test.go:33:11:33:27 | call to QueryParams | test.go:34:16:34:20 | param | Cross-site scripting vulnerability due to $@. | test.go:33:11:33:27 | call to QueryParams | user-provided value | test.go:0:0:0:0 | test.go | | | test.go:40:16:40:19 | qstr | test.go:39:10:39:26 | call to QueryString | test.go:40:16:40:19 | qstr | Cross-site scripting vulnerability due to $@. | test.go:39:10:39:26 | call to QueryString | user-provided value | test.go:0:0:0:0 | test.go | | | test.go:46:16:46:18 | val | test.go:45:9:45:34 | call to FormValue | test.go:46:16:46:18 | val | Cross-site scripting vulnerability due to $@. | test.go:45:9:45:34 | call to FormValue | user-provided value | test.go:0:0:0:0 | test.go | | -| test.go:52:16:52:37 | index expression | test.go:51:2:51:30 | ... := ...[0] | test.go:52:16:52:37 | index expression | Cross-site scripting vulnerability due to $@. | test.go:51:2:51:30 | ... := ...[0] | user-provided value | test.go:0:0:0:0 | test.go | | -| test.go:61:20:61:25 | buffer | test.go:57:2:57:46 | ... := ...[0] | test.go:61:20:61:25 | buffer | Cross-site scripting vulnerability due to $@. | test.go:57:2:57:46 | ... := ...[0] | user-provided value | test.go:0:0:0:0 | test.go | | -| test.go:67:16:67:41 | index expression | test.go:66:2:66:31 | ... := ...[0] | test.go:67:16:67:41 | index expression | Cross-site scripting vulnerability due to $@. | test.go:66:2:66:31 | ... := ...[0] | user-provided value | test.go:0:0:0:0 | test.go | | -| test.go:77:20:77:25 | buffer | test.go:72:2:72:31 | ... := ...[0] | test.go:77:20:77:25 | buffer | Cross-site scripting vulnerability due to $@. | test.go:72:2:72:31 | ... := ...[0] | user-provided value | test.go:0:0:0:0 | test.go | | -| test.go:83:16:83:24 | selection of Value | test.go:82:2:82:32 | ... := ...[0] | test.go:83:16:83:24 | selection of Value | Cross-site scripting vulnerability due to $@. | test.go:82:2:82:32 | ... := ...[0] | user-provided value | test.go:0:0:0:0 | test.go | | +| test.go:52:16:52:37 | index expression | test.go:51:2:51:30 | extract:0 ... := ... | test.go:52:16:52:37 | index expression | Cross-site scripting vulnerability due to $@. | test.go:51:2:51:30 | extract:0 ... := ... | user-provided value | test.go:0:0:0:0 | test.go | | +| test.go:61:20:61:25 | buffer | test.go:57:2:57:46 | extract:0 ... := ... | test.go:61:20:61:25 | buffer | Cross-site scripting vulnerability due to $@. | test.go:57:2:57:46 | extract:0 ... := ... | user-provided value | test.go:0:0:0:0 | test.go | | +| test.go:67:16:67:41 | index expression | test.go:66:2:66:31 | extract:0 ... := ... | test.go:67:16:67:41 | index expression | Cross-site scripting vulnerability due to $@. | test.go:66:2:66:31 | extract:0 ... := ... | user-provided value | test.go:0:0:0:0 | test.go | | +| test.go:77:20:77:25 | buffer | test.go:72:2:72:31 | extract:0 ... := ... | test.go:77:20:77:25 | buffer | Cross-site scripting vulnerability due to $@. | test.go:72:2:72:31 | extract:0 ... := ... | user-provided value | test.go:0:0:0:0 | test.go | | +| test.go:83:16:83:24 | selection of Value | test.go:82:2:82:32 | extract:0 ... := ... | test.go:83:16:83:24 | selection of Value | Cross-site scripting vulnerability due to $@. | test.go:82:2:82:32 | extract:0 ... := ... | user-provided value | test.go:0:0:0:0 | test.go | | | test.go:89:16:89:31 | selection of Value | test.go:88:13:88:25 | call to Cookies | test.go:89:16:89:31 | selection of Value | Cross-site scripting vulnerability due to $@. | test.go:88:13:88:25 | call to Cookies | user-provided value | test.go:0:0:0:0 | test.go | | | test.go:100:16:100:21 | selection of s | test.go:99:11:99:15 | &... [postupdate] | test.go:100:16:100:21 | selection of s | Cross-site scripting vulnerability due to $@. | test.go:99:11:99:15 | &... [postupdate] | user-provided value | test.go:0:0:0:0 | test.go | | | test.go:114:16:114:42 | type assertion | test.go:113:21:113:42 | call to Param | test.go:114:16:114:42 | type assertion | Cross-site scripting vulnerability due to $@. | test.go:113:21:113:42 | call to Param | user-provided value | test.go:0:0:0:0 | test.go | | @@ -25,23 +25,23 @@ edges | test.go:33:11:33:27 | call to QueryParams | test.go:34:16:34:20 | param | provenance | Src:MaD:11 | | test.go:39:10:39:26 | call to QueryString | test.go:40:16:40:19 | qstr | provenance | Src:MaD:12 | | test.go:45:9:45:34 | call to FormValue | test.go:46:16:46:18 | val | provenance | Src:MaD:6 | -| test.go:51:2:51:30 | ... := ...[0] | test.go:52:16:52:37 | index expression | provenance | Src:MaD:5 | -| test.go:57:2:57:46 | ... := ...[0] | test.go:58:13:58:22 | fileHeader | provenance | Src:MaD:4 | -| test.go:58:2:58:29 | ... := ...[0] | test.go:60:2:60:5 | file | provenance | | -| test.go:58:13:58:22 | fileHeader | test.go:58:2:58:29 | ... := ...[0] | provenance | MaD:17 | +| test.go:51:2:51:30 | extract:0 ... := ... | test.go:52:16:52:37 | index expression | provenance | Src:MaD:5 | +| test.go:57:2:57:46 | extract:0 ... := ... | test.go:58:13:58:22 | fileHeader | provenance | Src:MaD:4 | +| test.go:58:2:58:29 | extract:0 ... := ... | test.go:60:2:60:5 | file | provenance | | +| test.go:58:13:58:22 | fileHeader | test.go:58:2:58:29 | extract:0 ... := ... | provenance | MaD:17 | | test.go:60:2:60:5 | file | test.go:60:12:60:17 | buffer [postupdate] | provenance | MaD:15 | | test.go:60:2:60:5 | file | test.go:60:12:60:17 | buffer [postupdate] | provenance | MaD:16 | | test.go:60:2:60:5 | file | test.go:60:12:60:17 | buffer [postupdate] | provenance | MaD:18 | | test.go:60:12:60:17 | buffer [postupdate] | test.go:61:20:61:25 | buffer | provenance | | -| test.go:66:2:66:31 | ... := ...[0] | test.go:67:16:67:41 | index expression | provenance | Src:MaD:7 | -| test.go:72:2:72:31 | ... := ...[0] | test.go:74:13:74:22 | fileHeader | provenance | Src:MaD:7 | -| test.go:74:2:74:29 | ... := ...[0] | test.go:76:2:76:5 | file | provenance | | -| test.go:74:13:74:22 | fileHeader | test.go:74:2:74:29 | ... := ...[0] | provenance | MaD:17 | +| test.go:66:2:66:31 | extract:0 ... := ... | test.go:67:16:67:41 | index expression | provenance | Src:MaD:7 | +| test.go:72:2:72:31 | extract:0 ... := ... | test.go:74:13:74:22 | fileHeader | provenance | Src:MaD:7 | +| test.go:74:2:74:29 | extract:0 ... := ... | test.go:76:2:76:5 | file | provenance | | +| test.go:74:13:74:22 | fileHeader | test.go:74:2:74:29 | extract:0 ... := ... | provenance | MaD:17 | | test.go:76:2:76:5 | file | test.go:76:12:76:17 | buffer [postupdate] | provenance | MaD:15 | | test.go:76:2:76:5 | file | test.go:76:12:76:17 | buffer [postupdate] | provenance | MaD:16 | | test.go:76:2:76:5 | file | test.go:76:12:76:17 | buffer [postupdate] | provenance | MaD:18 | | test.go:76:12:76:17 | buffer [postupdate] | test.go:77:20:77:25 | buffer | provenance | | -| test.go:82:2:82:32 | ... := ...[0] | test.go:83:16:83:24 | selection of Value | provenance | Src:MaD:2 | +| test.go:82:2:82:32 | extract:0 ... := ... | test.go:83:16:83:24 | selection of Value | provenance | Src:MaD:2 | | test.go:88:13:88:25 | call to Cookies | test.go:89:16:89:31 | selection of Value | provenance | Src:MaD:3 | | test.go:99:11:99:15 | &... [postupdate] | test.go:100:16:100:21 | selection of s | provenance | Src:MaD:1 | | test.go:113:2:113:4 | ctx [postupdate] | test.go:114:16:114:18 | ctx | provenance | | @@ -88,23 +88,23 @@ nodes | test.go:40:16:40:19 | qstr | semmle.label | qstr | | test.go:45:9:45:34 | call to FormValue | semmle.label | call to FormValue | | test.go:46:16:46:18 | val | semmle.label | val | -| test.go:51:2:51:30 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:51:2:51:30 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | test.go:52:16:52:37 | index expression | semmle.label | index expression | -| test.go:57:2:57:46 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:58:2:58:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:57:2:57:46 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | +| test.go:58:2:58:29 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | test.go:58:13:58:22 | fileHeader | semmle.label | fileHeader | | test.go:60:2:60:5 | file | semmle.label | file | | test.go:60:12:60:17 | buffer [postupdate] | semmle.label | buffer [postupdate] | | test.go:61:20:61:25 | buffer | semmle.label | buffer | -| test.go:66:2:66:31 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:66:2:66:31 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | test.go:67:16:67:41 | index expression | semmle.label | index expression | -| test.go:72:2:72:31 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:74:2:74:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:72:2:72:31 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | +| test.go:74:2:74:29 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | test.go:74:13:74:22 | fileHeader | semmle.label | fileHeader | | test.go:76:2:76:5 | file | semmle.label | file | | test.go:76:12:76:17 | buffer [postupdate] | semmle.label | buffer [postupdate] | | test.go:77:20:77:25 | buffer | semmle.label | buffer | -| test.go:82:2:82:32 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:82:2:82:32 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | test.go:83:16:83:24 | selection of Value | semmle.label | selection of Value | | test.go:88:13:88:25 | call to Cookies | semmle.label | call to Cookies | | test.go:89:16:89:31 | selection of Value | semmle.label | selection of Value | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Gin/Gin.expected b/go/ql/test/library-tests/semmle/go/frameworks/Gin/Gin.expected index 071bf34cd7e..46239a3c339 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Gin/Gin.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Gin/Gin.expected @@ -7,18 +7,18 @@ | Gin.go:58:10:58:25 | call to Param | | Gin.go:62:10:62:34 | call to GetStringSlice | | Gin.go:66:10:66:29 | call to GetString | -| Gin.go:70:3:70:28 | ... := ...[0] | +| Gin.go:70:3:70:28 | extract:0 ... := ... | | Gin.go:74:10:74:23 | call to ClientIP | | Gin.go:78:10:78:26 | call to ContentType | -| Gin.go:82:3:82:29 | ... := ...[0] | -| Gin.go:86:3:86:36 | ... := ...[0] | -| Gin.go:90:3:90:31 | ... := ...[0] | -| Gin.go:94:3:94:39 | ... := ...[0] | -| Gin.go:98:3:98:34 | ... := ...[0] | +| Gin.go:82:3:82:29 | extract:0 ... := ... | +| Gin.go:86:3:86:36 | extract:0 ... := ... | +| Gin.go:90:3:90:31 | extract:0 ... := ... | +| Gin.go:94:3:94:39 | extract:0 ... := ... | +| Gin.go:98:3:98:34 | extract:0 ... := ... | | Gin.go:102:10:102:52 | call to DefaultPostForm | | Gin.go:106:10:106:49 | call to DefaultQuery | -| Gin.go:110:3:110:37 | ... := ...[0] | -| Gin.go:114:3:114:34 | ... := ...[0] | +| Gin.go:110:3:110:37 | extract:0 ... := ... | +| Gin.go:114:3:114:34 | extract:0 ... := ... | | Gin.go:118:10:118:32 | call to GetStringMap | | Gin.go:122:10:122:38 | call to GetStringMapString | | Gin.go:126:10:126:43 | call to GetStringMapStringSlice | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Gorestful/gorestful.expected b/go/ql/test/library-tests/semmle/go/frameworks/Gorestful/gorestful.expected index 0af67462f7c..b17e65d31ec 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Gorestful/gorestful.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Gorestful/gorestful.expected @@ -6,18 +6,18 @@ models | 5 | Source: github.com/emicklei/go-restful; Request; true; ReadEntity; ; ; Argument[0]; remote; manual | edges | gorestful.go:15:15:15:44 | call to QueryParameters | gorestful.go:15:15:15:47 | index expression | provenance | Src:MaD:4 Sink:MaD:1 | -| gorestful.go:17:2:17:39 | ... := ...[0] | gorestful.go:18:15:18:17 | val | provenance | Src:MaD:2 Sink:MaD:1 | +| gorestful.go:17:2:17:39 | extract:0 ... := ... | gorestful.go:18:15:18:17 | val | provenance | Src:MaD:2 Sink:MaD:1 | | gorestful.go:21:15:21:38 | call to PathParameters | gorestful.go:21:15:21:45 | index expression | provenance | Src:MaD:3 Sink:MaD:1 | | gorestful.go:23:21:23:24 | &... [postupdate] | gorestful.go:24:15:24:21 | selection of cmd | provenance | Src:MaD:5 Sink:MaD:1 | | gorestful_v2.go:15:15:15:44 | call to QueryParameters | gorestful_v2.go:15:15:15:47 | index expression | provenance | Src:MaD:4 Sink:MaD:1 | -| gorestful_v2.go:17:2:17:39 | ... := ...[0] | gorestful_v2.go:18:15:18:17 | val | provenance | Src:MaD:2 Sink:MaD:1 | +| gorestful_v2.go:17:2:17:39 | extract:0 ... := ... | gorestful_v2.go:18:15:18:17 | val | provenance | Src:MaD:2 Sink:MaD:1 | | gorestful_v2.go:21:15:21:38 | call to PathParameters | gorestful_v2.go:21:15:21:45 | index expression | provenance | Src:MaD:3 Sink:MaD:1 | | gorestful_v2.go:23:21:23:24 | &... [postupdate] | gorestful_v2.go:24:15:24:21 | selection of cmd | provenance | Src:MaD:5 Sink:MaD:1 | nodes | gorestful.go:15:15:15:44 | call to QueryParameters | semmle.label | call to QueryParameters | | gorestful.go:15:15:15:47 | index expression | semmle.label | index expression | | gorestful.go:16:15:16:43 | call to QueryParameter | semmle.label | call to QueryParameter | -| gorestful.go:17:2:17:39 | ... := ...[0] | semmle.label | ... := ...[0] | +| gorestful.go:17:2:17:39 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | gorestful.go:18:15:18:17 | val | semmle.label | val | | gorestful.go:19:15:19:44 | call to HeaderParameter | semmle.label | call to HeaderParameter | | gorestful.go:20:15:20:42 | call to PathParameter | semmle.label | call to PathParameter | @@ -28,7 +28,7 @@ nodes | gorestful_v2.go:15:15:15:44 | call to QueryParameters | semmle.label | call to QueryParameters | | gorestful_v2.go:15:15:15:47 | index expression | semmle.label | index expression | | gorestful_v2.go:16:15:16:43 | call to QueryParameter | semmle.label | call to QueryParameter | -| gorestful_v2.go:17:2:17:39 | ... := ...[0] | semmle.label | ... := ...[0] | +| gorestful_v2.go:17:2:17:39 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | gorestful_v2.go:18:15:18:17 | val | semmle.label | val | | gorestful_v2.go:19:15:19:44 | call to HeaderParameter | semmle.label | call to HeaderParameter | | gorestful_v2.go:20:15:20:42 | call to PathParameter | semmle.label | call to PathParameter | @@ -41,14 +41,14 @@ invalidModelRow #select | gorestful.go:15:15:15:47 | index expression | gorestful.go:15:15:15:44 | call to QueryParameters | gorestful.go:15:15:15:47 | index expression | This command depends on $@. | gorestful.go:15:15:15:44 | call to QueryParameters | a user-provided value | | gorestful.go:16:15:16:43 | call to QueryParameter | gorestful.go:16:15:16:43 | call to QueryParameter | gorestful.go:16:15:16:43 | call to QueryParameter | This command depends on $@. | gorestful.go:16:15:16:43 | call to QueryParameter | a user-provided value | -| gorestful.go:18:15:18:17 | val | gorestful.go:17:2:17:39 | ... := ...[0] | gorestful.go:18:15:18:17 | val | This command depends on $@. | gorestful.go:17:2:17:39 | ... := ...[0] | a user-provided value | +| gorestful.go:18:15:18:17 | val | gorestful.go:17:2:17:39 | extract:0 ... := ... | gorestful.go:18:15:18:17 | val | This command depends on $@. | gorestful.go:17:2:17:39 | extract:0 ... := ... | a user-provided value | | gorestful.go:19:15:19:44 | call to HeaderParameter | gorestful.go:19:15:19:44 | call to HeaderParameter | gorestful.go:19:15:19:44 | call to HeaderParameter | This command depends on $@. | gorestful.go:19:15:19:44 | call to HeaderParameter | a user-provided value | | gorestful.go:20:15:20:42 | call to PathParameter | gorestful.go:20:15:20:42 | call to PathParameter | gorestful.go:20:15:20:42 | call to PathParameter | This command depends on $@. | gorestful.go:20:15:20:42 | call to PathParameter | a user-provided value | | gorestful.go:21:15:21:45 | index expression | gorestful.go:21:15:21:38 | call to PathParameters | gorestful.go:21:15:21:45 | index expression | This command depends on $@. | gorestful.go:21:15:21:38 | call to PathParameters | a user-provided value | | gorestful.go:24:15:24:21 | selection of cmd | gorestful.go:23:21:23:24 | &... [postupdate] | gorestful.go:24:15:24:21 | selection of cmd | This command depends on $@. | gorestful.go:23:21:23:24 | &... [postupdate] | a user-provided value | | gorestful_v2.go:15:15:15:47 | index expression | gorestful_v2.go:15:15:15:44 | call to QueryParameters | gorestful_v2.go:15:15:15:47 | index expression | This command depends on $@. | gorestful_v2.go:15:15:15:44 | call to QueryParameters | a user-provided value | | gorestful_v2.go:16:15:16:43 | call to QueryParameter | gorestful_v2.go:16:15:16:43 | call to QueryParameter | gorestful_v2.go:16:15:16:43 | call to QueryParameter | This command depends on $@. | gorestful_v2.go:16:15:16:43 | call to QueryParameter | a user-provided value | -| gorestful_v2.go:18:15:18:17 | val | gorestful_v2.go:17:2:17:39 | ... := ...[0] | gorestful_v2.go:18:15:18:17 | val | This command depends on $@. | gorestful_v2.go:17:2:17:39 | ... := ...[0] | a user-provided value | +| gorestful_v2.go:18:15:18:17 | val | gorestful_v2.go:17:2:17:39 | extract:0 ... := ... | gorestful_v2.go:18:15:18:17 | val | This command depends on $@. | gorestful_v2.go:17:2:17:39 | extract:0 ... := ... | a user-provided value | | gorestful_v2.go:19:15:19:44 | call to HeaderParameter | gorestful_v2.go:19:15:19:44 | call to HeaderParameter | gorestful_v2.go:19:15:19:44 | call to HeaderParameter | This command depends on $@. | gorestful_v2.go:19:15:19:44 | call to HeaderParameter | a user-provided value | | gorestful_v2.go:20:15:20:42 | call to PathParameter | gorestful_v2.go:20:15:20:42 | call to PathParameter | gorestful_v2.go:20:15:20:42 | call to PathParameter | This command depends on $@. | gorestful_v2.go:20:15:20:42 | call to PathParameter | a user-provided value | | gorestful_v2.go:21:15:21:45 | index expression | gorestful_v2.go:21:15:21:38 | call to PathParameters | gorestful_v2.go:21:15:21:45 | index expression | This command depends on $@. | gorestful_v2.go:21:15:21:38 | call to PathParameters | a user-provided value | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Revel/OpenRedirect.expected b/go/ql/test/library-tests/semmle/go/frameworks/Revel/OpenRedirect.expected index 3c889cd177c..5868cd8c3e7 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Revel/OpenRedirect.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Revel/OpenRedirect.expected @@ -1,17 +1,17 @@ #select | EndToEnd.go:95:20:95:49 | call to Get | EndToEnd.go:95:20:95:27 | selection of Params | EndToEnd.go:95:20:95:49 | call to Get | This path to an untrusted URL redirection depends on a $@. | EndToEnd.go:95:20:95:27 | selection of Params | user-provided value | edges -| EndToEnd.go:95:20:95:27 | implicit dereference | EndToEnd.go:95:20:95:27 | selection of Params [postupdate] | provenance | Config | -| EndToEnd.go:95:20:95:27 | implicit dereference | EndToEnd.go:95:20:95:32 | selection of Form | provenance | Config | -| EndToEnd.go:95:20:95:27 | selection of Params | EndToEnd.go:95:20:95:27 | implicit dereference | provenance | Src:MaD:2 Config | +| EndToEnd.go:95:20:95:27 | implicit-deref selection of Params | EndToEnd.go:95:20:95:27 | selection of Params [postupdate] | provenance | Config | +| EndToEnd.go:95:20:95:27 | implicit-deref selection of Params | EndToEnd.go:95:20:95:32 | selection of Form | provenance | Config | +| EndToEnd.go:95:20:95:27 | selection of Params | EndToEnd.go:95:20:95:27 | implicit-deref selection of Params | provenance | Src:MaD:2 Config | | EndToEnd.go:95:20:95:27 | selection of Params | EndToEnd.go:95:20:95:32 | selection of Form | provenance | Src:MaD:2 Config | -| EndToEnd.go:95:20:95:27 | selection of Params [postupdate] | EndToEnd.go:95:20:95:27 | implicit dereference | provenance | Config | +| EndToEnd.go:95:20:95:27 | selection of Params [postupdate] | EndToEnd.go:95:20:95:27 | implicit-deref selection of Params | provenance | Config | | EndToEnd.go:95:20:95:32 | selection of Form | EndToEnd.go:95:20:95:49 | call to Get | provenance | Config Sink:MaD:1 | models | 1 | Sink: group:revel; Controller; true; Redirect; ; ; Argument[0]; url-redirection; manual | | 2 | Source: group:revel; Controller; true; Params; ; ; ; remote; manual | nodes -| EndToEnd.go:95:20:95:27 | implicit dereference | semmle.label | implicit dereference | +| EndToEnd.go:95:20:95:27 | implicit-deref selection of Params | semmle.label | implicit-deref selection of Params | | EndToEnd.go:95:20:95:27 | selection of Params | semmle.label | selection of Params | | EndToEnd.go:95:20:95:27 | selection of Params [postupdate] | semmle.label | selection of Params [postupdate] | | EndToEnd.go:95:20:95:32 | selection of Form | semmle.label | selection of Form | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/TaintSteps/TaintStep.expected b/go/ql/test/library-tests/semmle/go/frameworks/TaintSteps/TaintStep.expected index cfbbc771f77..98381fa1ed1 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/TaintSteps/TaintStep.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/TaintSteps/TaintStep.expected @@ -1,12 +1,12 @@ invalidModelRow #select -| crypto.go:9:14:9:31 | call to NewCipher | crypto.go:9:2:9:31 | ... := ...[0] | -| crypto.go:9:14:9:31 | call to NewCipher | crypto.go:9:2:9:31 | ... := ...[1] | -| crypto.go:10:15:10:34 | call to NewGCM | crypto.go:10:2:10:34 | ... := ...[0] | -| crypto.go:10:15:10:34 | call to NewGCM | crypto.go:10:2:10:34 | ... := ...[1] | -| crypto.go:11:18:11:57 | call to Open | crypto.go:11:2:11:57 | ... := ...[0] | -| crypto.go:11:18:11:57 | call to Open | crypto.go:11:2:11:57 | ... := ...[1] | -| crypto.go:11:42:11:51 | ciphertext | crypto.go:11:2:11:57 | ... := ...[0] | +| crypto.go:9:14:9:31 | call to NewCipher | crypto.go:9:2:9:31 | extract:0 ... := ... | +| crypto.go:9:14:9:31 | call to NewCipher | crypto.go:9:2:9:31 | extract:1 ... := ... | +| crypto.go:10:15:10:34 | call to NewGCM | crypto.go:10:2:10:34 | extract:0 ... := ... | +| crypto.go:10:15:10:34 | call to NewGCM | crypto.go:10:2:10:34 | extract:1 ... := ... | +| crypto.go:11:18:11:57 | call to Open | crypto.go:11:2:11:57 | extract:0 ... := ... | +| crypto.go:11:18:11:57 | call to Open | crypto.go:11:2:11:57 | extract:1 ... := ... | +| crypto.go:11:42:11:51 | ciphertext | crypto.go:11:2:11:57 | extract:0 ... := ... | | io.go:14:31:14:43 | "some string" | io.go:14:13:14:44 | call to NewReader | | io.go:16:23:16:27 | &... | io.go:16:24:16:27 | buf1 [postupdate] | | io.go:16:23:16:27 | &... [postupdate] | io.go:16:24:16:27 | buf1 [postupdate] | @@ -31,9 +31,9 @@ invalidModelRow | io.go:33:20:33:23 | buf1 | io.go:33:19:33:23 | &... | | io.go:33:20:33:23 | buf1 [postupdate] | io.go:33:19:33:23 | &... | | io.go:35:16:35:21 | reader | io.go:35:12:35:13 | w2 [postupdate] | -| io.go:39:11:39:19 | call to Pipe | io.go:39:3:39:19 | ... := ...[0] | -| io.go:39:11:39:19 | call to Pipe | io.go:39:3:39:19 | ... := ...[1] | -| io.go:40:14:40:14 | w [postupdate] | io.go:39:3:39:19 | ... := ...[0] | +| io.go:39:11:39:19 | call to Pipe | io.go:39:3:39:19 | extract:0 ... := ... | +| io.go:39:11:39:19 | call to Pipe | io.go:39:3:39:19 | extract:1 ... := ... | +| io.go:40:14:40:14 | w [postupdate] | io.go:39:3:39:19 | extract:0 ... := ... | | io.go:40:17:40:31 | "some string\\n" | io.go:40:14:40:14 | w [postupdate] | | io.go:43:16:43:16 | r | io.go:43:3:43:5 | buf [postupdate] | | io.go:44:13:44:15 | buf | io.go:44:13:44:24 | call to String | @@ -74,35 +74,35 @@ invalidModelRow | io.go:101:26:101:38 | "some string" | io.go:101:8:101:39 | call to NewReader | | io.go:102:3:102:3 | r | io.go:102:13:102:21 | selection of Stdout [postupdate] | | io.go:108:30:108:42 | "some string" | io.go:108:12:108:43 | call to NewReader | -| io.go:109:12:109:33 | call to ReadAll | io.go:109:2:109:33 | ... := ...[0] | -| io.go:109:12:109:33 | call to ReadAll | io.go:109:2:109:33 | ... := ...[1] | -| io.go:109:27:109:32 | reader | io.go:109:2:109:33 | ... := ...[0] | +| io.go:109:12:109:33 | call to ReadAll | io.go:109:2:109:33 | extract:0 ... := ... | +| io.go:109:12:109:33 | call to ReadAll | io.go:109:2:109:33 | extract:1 ... := ... | +| io.go:109:27:109:32 | reader | io.go:109:2:109:33 | extract:0 ... := ... | | io.go:110:18:110:20 | buf | io.go:110:2:110:10 | selection of Stdout [postupdate] | -| main.go:11:12:11:26 | call to Marshal | main.go:11:2:11:26 | ... := ...[0] | -| main.go:11:12:11:26 | call to Marshal | main.go:11:2:11:26 | ... := ...[1] | -| main.go:11:25:11:25 | v | main.go:11:2:11:26 | ... := ...[0] | -| main.go:13:14:13:52 | call to MarshalIndent | main.go:13:2:13:52 | ... := ...[0] | -| main.go:13:14:13:52 | call to MarshalIndent | main.go:13:2:13:52 | ... := ...[1] | -| main.go:13:33:13:33 | v | main.go:13:2:13:52 | ... := ...[0] | -| main.go:13:36:13:45 | "/*JSON*/" | main.go:13:2:13:52 | ... := ...[0] | -| main.go:13:48:13:51 | " " | main.go:13:2:13:52 | ... := ...[0] | +| main.go:11:12:11:26 | call to Marshal | main.go:11:2:11:26 | extract:0 ... := ... | +| main.go:11:12:11:26 | call to Marshal | main.go:11:2:11:26 | extract:1 ... := ... | +| main.go:11:25:11:25 | v | main.go:11:2:11:26 | extract:0 ... := ... | +| main.go:13:14:13:52 | call to MarshalIndent | main.go:13:2:13:52 | extract:0 ... := ... | +| main.go:13:14:13:52 | call to MarshalIndent | main.go:13:2:13:52 | extract:1 ... := ... | +| main.go:13:33:13:33 | v | main.go:13:2:13:52 | extract:0 ... := ... | +| main.go:13:36:13:45 | "/*JSON*/" | main.go:13:2:13:52 | extract:0 ... := ... | +| main.go:13:48:13:51 | " " | main.go:13:2:13:52 | extract:0 ... := ... | | main.go:14:25:14:25 | b | main.go:14:9:14:41 | slice literal | | main.go:14:28:14:30 | err | main.go:14:9:14:41 | slice literal | | main.go:14:33:14:34 | b2 | main.go:14:9:14:41 | slice literal | | main.go:14:37:14:40 | err2 | main.go:14:9:14:41 | slice literal | -| main.go:19:18:19:42 | call to DecodeString | main.go:19:2:19:42 | ... := ...[0] | -| main.go:19:18:19:42 | call to DecodeString | main.go:19:2:19:42 | ... := ...[1] | -| main.go:19:35:19:41 | encoded | main.go:19:2:19:42 | ... := ...[0] | +| main.go:19:18:19:42 | call to DecodeString | main.go:19:2:19:42 | extract:0 ... := ... | +| main.go:19:18:19:42 | call to DecodeString | main.go:19:2:19:42 | extract:1 ... := ... | +| main.go:19:35:19:41 | encoded | main.go:19:2:19:42 | extract:0 ... := ... | | main.go:23:25:23:31 | decoded | main.go:23:9:23:48 | slice literal | | main.go:23:34:23:36 | err | main.go:23:9:23:48 | slice literal | | main.go:23:39:23:47 | reEncoded | main.go:23:9:23:48 | slice literal | -| main.go:28:2:28:4 | implicit dereference | main.go:28:2:28:4 | req [postupdate] | -| main.go:28:2:28:4 | implicit dereference | main.go:28:2:28:9 | selection of Body | -| main.go:28:2:28:4 | req | main.go:28:2:28:4 | implicit dereference | -| main.go:28:2:28:4 | req [postupdate] | main.go:28:2:28:4 | implicit dereference | +| main.go:28:2:28:4 | implicit-deref req | main.go:28:2:28:4 | req [postupdate] | +| main.go:28:2:28:4 | implicit-deref req | main.go:28:2:28:9 | selection of Body | +| main.go:28:2:28:4 | req | main.go:28:2:28:4 | implicit-deref req | +| main.go:28:2:28:4 | req [postupdate] | main.go:28:2:28:4 | implicit-deref req | | main.go:28:2:28:9 | selection of Body | main.go:28:16:28:16 | b [postupdate] | -| main.go:34:2:34:4 | implicit dereference | main.go:34:2:34:4 | req [postupdate] | -| main.go:34:2:34:4 | implicit dereference | main.go:34:2:34:9 | selection of Body | -| main.go:34:2:34:4 | req | main.go:34:2:34:4 | implicit dereference | -| main.go:34:2:34:4 | req [postupdate] | main.go:34:2:34:4 | implicit dereference | +| main.go:34:2:34:4 | implicit-deref req | main.go:34:2:34:4 | req [postupdate] | +| main.go:34:2:34:4 | implicit-deref req | main.go:34:2:34:9 | selection of Body | +| main.go:34:2:34:4 | req | main.go:34:2:34:4 | implicit-deref req | +| main.go:34:2:34:4 | req [postupdate] | main.go:34:2:34:4 | implicit-deref req | | main.go:34:2:34:9 | selection of Body | main.go:34:16:34:16 | b [postupdate] | 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 a50f131a747..c7abdff5890 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 @@ -1,19 +1,19 @@ #select | server/main.go:30:38:30:48 | selection of Text | rpc/notes/service.twirp.go:538:25:538:32 | selection of Body | server/main.go:30:38:30:48 | selection of Text | The $@ of this request depends on a $@. | server/main.go:30:38:30:48 | selection of Text | URL | rpc/notes/service.twirp.go:538:25:538:32 | selection of Body | user-provided value | -| server/main.go:30:38:30:48 | selection of Text | server/main.go:19:56:19:61 | SSA def(params) | server/main.go:30:38:30:48 | selection of Text | The $@ of this request depends on a $@. | server/main.go:30:38:30:48 | selection of Text | URL | server/main.go:19:56:19:61 | SSA def(params) | user-provided value | +| server/main.go:30:38:30:48 | selection of Text | server/main.go:19:109:38:1 | SSA def(params) | server/main.go:30:38:30:48 | selection of Text | The $@ of this request depends on a $@. | server/main.go:30:38:30:48 | selection of Text | URL | server/main.go:19:109:38:1 | SSA def(params) | user-provided value | edges -| client/main.go:16:35:16:78 | &... | server/main.go:19:56:19:61 | SSA def(params) | provenance | | +| client/main.go:16:35:16:78 | &... | server/main.go:19:109:38:1 | SSA def(params) | provenance | | | client/main.go:16:35:16:78 | &... [postupdate] | client/main.go:16:35:16:78 | &... | 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:538:2:538:33 | extract: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 | extract:0 ... := ... | provenance | Src:MaD:1 MaD:3 | | rpc/notes/service.twirp.go:544:27:544:29 | buf | rpc/notes/service.twirp.go:544:32:544:41 | reqContent [postupdate] | provenance | MaD:2 | | rpc/notes/service.twirp.go:544:32:544:41 | reqContent [postupdate] | rpc/notes/service.twirp.go:574:2:577:2 | SSA def(reqContent) | provenance | | | rpc/notes/service.twirp.go:574:2:577:2 | SSA def(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 | SSA def(params) | provenance | | -| server/main.go:19:56:19:61 | SSA def(params) | server/main.go:19:56:19:61 | SSA def(params) [Return] | provenance | | -| server/main.go:19:56:19:61 | SSA def(params) | server/main.go:30:38:30:48 | selection of Text | provenance | | -| server/main.go:19:56:19:61 | SSA def(params) | server/main.go:30:38:30:48 | selection of Text | provenance | | -| server/main.go:19:56:19:61 | SSA def(params) [Return] | client/main.go:16:35:16:78 | &... [postupdate] | provenance | | +| rpc/notes/service.twirp.go:576:35:576:44 | reqContent | server/main.go:19:109:38:1 | SSA def(params) | provenance | | +| server/main.go:19:109:38:1 | SSA def(params) | server/main.go:19:109:38:1 | SSA def(params) [Return] | provenance | | +| server/main.go:19:109:38:1 | SSA def(params) | server/main.go:30:38:30:48 | selection of Text | provenance | | +| server/main.go:19:109:38:1 | SSA def(params) | server/main.go:30:38:30:48 | selection of Text | provenance | | +| server/main.go:19:109:38:1 | SSA def(params) [Return] | client/main.go:16:35:16:78 | &... [postupdate] | 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 | @@ -21,14 +21,17 @@ models nodes | client/main.go:16:35:16:78 | &... | semmle.label | &... | | client/main.go:16:35:16:78 | &... [postupdate] | semmle.label | &... [postupdate] | -| rpc/notes/service.twirp.go:538:2:538:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| rpc/notes/service.twirp.go:538:2:538:33 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | rpc/notes/service.twirp.go:538:25:538:32 | selection of Body | semmle.label | selection of Body | | rpc/notes/service.twirp.go:544:27:544:29 | buf | semmle.label | buf | | rpc/notes/service.twirp.go:544:32:544:41 | reqContent [postupdate] | semmle.label | reqContent [postupdate] | | rpc/notes/service.twirp.go:574:2:577:2 | SSA def(reqContent) | semmle.label | SSA def(reqContent) | | rpc/notes/service.twirp.go:576:35:576:44 | reqContent | semmle.label | reqContent | -| server/main.go:19:56:19:61 | SSA def(params) | semmle.label | SSA def(params) | -| server/main.go:19:56:19:61 | SSA def(params) | semmle.label | SSA def(params) | -| server/main.go:19:56:19:61 | SSA def(params) [Return] | semmle.label | SSA def(params) [Return] | +| server/main.go:19:109:38:1 | SSA def(params) | semmle.label | SSA def(params) | +| server/main.go:19:109:38:1 | SSA def(params) | semmle.label | SSA def(params) | +| server/main.go:19:109:38:1 | SSA def(params) [Return] | semmle.label | SSA def(params) [Return] | | server/main.go:30:38:30:48 | selection of Text | semmle.label | selection of Text | subpaths +testFailures +| server/main.go:19:109:38:1 | SSA def(params) | Unexpected result: Source | +| server/main.go:19:111:19:154 | comment | Missing result: Source | diff --git a/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected b/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected index 5ded10ee1bd..a8b9a445ddd 100644 --- a/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected +++ b/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected @@ -1,52 +1,52 @@ #select -| tests.go:10:8:10:8 | f | tests.go:32:5:32:78 | ... := ...[0] | tests.go:10:8:10:8 | 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:32:15:32:78 | call to OpenFile | call to OpenFile | -| tests.go:10:8:10:8 | f | tests.go:46:5:46:76 | ... := ...[0] | tests.go:10:8:10:8 | 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:46:15:46:76 | call to OpenFile | call to OpenFile | -| tests.go:15:3:15:3 | f | tests.go:32:5:32:78 | ... := ...[0] | tests.go:15:3:15: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:32:15:32:78 | call to OpenFile | call to OpenFile | -| tests.go:15:3:15:3 | f | tests.go:46:5:46:76 | ... := ...[0] | tests.go:15:3:15: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:46:15:46:76 | call to OpenFile | call to OpenFile | -| tests.go:57:3:57:3 | f | tests.go:55:5:55:78 | ... := ...[0] | tests.go:57:3:57: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:55:15:55:78 | call to OpenFile | call to OpenFile | -| tests.go:69:3:69:3 | f | tests.go:67:5:67:76 | ... := ...[0] | tests.go:69:3:69: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:67:15:67:76 | call to OpenFile | call to OpenFile | -| tests.go:126:9:126:9 | f | tests.go:124:5:124:78 | ... := ...[0] | tests.go:126:9:126:9 | 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:124:15:124:78 | call to OpenFile | call to OpenFile | -| tests.go:145:3:145:3 | f | tests.go:141:5:141:78 | ... := ...[0] | tests.go:145:3:145: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:141:15:141:78 | call to OpenFile | call to OpenFile | -| tests.go:166:8:166:8 | f | tests.go:162:2:162:74 | ... := ...[0] | tests.go:166:8:166:8 | 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:162:12:162:74 | call to OpenFile | call to OpenFile | +| tests.go:10:8:10:8 | f | tests.go:32:5:32:78 | extract:0 ... := ... | tests.go:10:8:10:8 | 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:32:15:32:78 | call to OpenFile | call to OpenFile | +| tests.go:10:8:10:8 | f | tests.go:46:5:46:76 | extract:0 ... := ... | tests.go:10:8:10:8 | 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:46:15:46:76 | call to OpenFile | call to OpenFile | +| tests.go:15:3:15:3 | f | tests.go:32:5:32:78 | extract:0 ... := ... | tests.go:15:3:15: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:32:15:32:78 | call to OpenFile | call to OpenFile | +| tests.go:15:3:15:3 | f | tests.go:46:5:46:76 | extract:0 ... := ... | tests.go:15:3:15: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:46:15:46:76 | call to OpenFile | call to OpenFile | +| tests.go:57:3:57:3 | f | tests.go:55:5:55:78 | extract:0 ... := ... | tests.go:57:3:57: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:55:15:55:78 | call to OpenFile | call to OpenFile | +| tests.go:69:3:69:3 | f | tests.go:67:5:67:76 | extract:0 ... := ... | tests.go:69:3:69: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:67:15:67:76 | call to OpenFile | call to OpenFile | +| tests.go:126:9:126:9 | f | tests.go:124:5:124:78 | extract:0 ... := ... | tests.go:126:9:126:9 | 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:124:15:124:78 | call to OpenFile | call to OpenFile | +| tests.go:145:3:145:3 | f | tests.go:141:5:141:78 | extract:0 ... := ... | tests.go:145:3:145: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:141:15:141:78 | call to OpenFile | call to OpenFile | +| tests.go:166:8:166:8 | f | tests.go:162:2:162:74 | extract:0 ... := ... | tests.go:166:8:166:8 | 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:162:12:162:74 | call to OpenFile | call to OpenFile | edges -| tests.go:9:24:9:24 | SSA def(f) | tests.go:10:8:10:8 | f | provenance | | -| tests.go:13:32:13:32 | SSA def(f) | tests.go:14:13:16:2 | SSA def(f) | provenance | | +| tests.go:9:36:11:1 | SSA def(f) | tests.go:10:8:10:8 | f | provenance | | +| tests.go:13:44:19:1 | SSA def(f) | tests.go:14:13:16:2 | SSA def(f) | provenance | | | tests.go:14:13:16:2 | SSA def(f) | tests.go:15:3:15:3 | f | provenance | | -| tests.go:32:5:32:78 | ... := ...[0] | tests.go:33:21:33:21 | f | provenance | Src:MaD:1 | -| tests.go:32:5:32:78 | ... := ...[0] | tests.go:34:29:34:29 | f | provenance | Src:MaD:1 | -| tests.go:33:21:33:21 | f | tests.go:9:24:9:24 | SSA def(f) | provenance | | -| tests.go:34:29:34:29 | f | tests.go:13:32:13:32 | SSA def(f) | provenance | | -| tests.go:46:5:46:76 | ... := ...[0] | tests.go:47:21:47:21 | f | provenance | Src:MaD:1 | -| tests.go:46:5:46:76 | ... := ...[0] | tests.go:48:29:48:29 | f | provenance | Src:MaD:1 | -| tests.go:47:21:47:21 | f | tests.go:9:24:9:24 | SSA def(f) | provenance | | -| tests.go:48:29:48:29 | f | tests.go:13:32:13:32 | SSA def(f) | provenance | | -| tests.go:55:5:55:78 | ... := ...[0] | tests.go:57:3:57:3 | f | provenance | Src:MaD:1 | -| tests.go:67:5:67:76 | ... := ...[0] | tests.go:69:3:69:3 | f | provenance | Src:MaD:1 | -| tests.go:124:5:124:78 | ... := ...[0] | tests.go:126:9:126:9 | f | provenance | Src:MaD:1 | -| tests.go:141:5:141:78 | ... := ...[0] | tests.go:145:3:145:3 | f | provenance | Src:MaD:1 | -| tests.go:162:2:162:74 | ... := ...[0] | tests.go:166:8:166:8 | f | provenance | Src:MaD:1 | +| tests.go:32:5:32:78 | extract:0 ... := ... | tests.go:33:21:33:21 | f | provenance | Src:MaD:1 | +| tests.go:32:5:32:78 | extract:0 ... := ... | tests.go:34:29:34:29 | f | provenance | Src:MaD:1 | +| tests.go:33:21:33:21 | f | tests.go:9:36:11:1 | SSA def(f) | provenance | | +| tests.go:34:29:34:29 | f | tests.go:13:44:19:1 | SSA def(f) | provenance | | +| tests.go:46:5:46:76 | extract:0 ... := ... | tests.go:47:21:47:21 | f | provenance | Src:MaD:1 | +| tests.go:46:5:46:76 | extract:0 ... := ... | tests.go:48:29:48:29 | f | provenance | Src:MaD:1 | +| tests.go:47:21:47:21 | f | tests.go:9:36:11:1 | SSA def(f) | provenance | | +| tests.go:48:29:48:29 | f | tests.go:13:44:19:1 | SSA def(f) | provenance | | +| tests.go:55:5:55:78 | extract:0 ... := ... | tests.go:57:3:57:3 | f | provenance | Src:MaD:1 | +| tests.go:67:5:67:76 | extract:0 ... := ... | tests.go:69:3:69:3 | f | provenance | Src:MaD:1 | +| tests.go:124:5:124:78 | extract:0 ... := ... | tests.go:126:9:126:9 | f | provenance | Src:MaD:1 | +| tests.go:141:5:141:78 | extract:0 ... := ... | tests.go:145:3:145:3 | f | provenance | Src:MaD:1 | +| tests.go:162:2:162:74 | extract:0 ... := ... | tests.go:166:8:166:8 | f | provenance | Src:MaD:1 | models | 1 | Source: os; ; false; OpenFile; ; ; ReturnValue[0]; file; manual | nodes -| tests.go:9:24:9:24 | SSA def(f) | semmle.label | SSA def(f) | +| tests.go:9:36:11:1 | SSA def(f) | semmle.label | SSA def(f) | | tests.go:10:8:10:8 | f | semmle.label | f | -| tests.go:13:32:13:32 | SSA def(f) | semmle.label | SSA def(f) | +| tests.go:13:44:19:1 | SSA def(f) | semmle.label | SSA def(f) | | tests.go:14:13:16:2 | SSA def(f) | semmle.label | SSA def(f) | | tests.go:15:3:15:3 | f | semmle.label | f | -| tests.go:32:5:32:78 | ... := ...[0] | semmle.label | ... := ...[0] | +| tests.go:32:5:32:78 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | tests.go:33:21:33:21 | f | semmle.label | f | | tests.go:34:29:34:29 | f | semmle.label | f | -| tests.go:46:5:46:76 | ... := ...[0] | semmle.label | ... := ...[0] | +| tests.go:46:5:46:76 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | tests.go:47:21:47:21 | f | semmle.label | f | | tests.go:48:29:48:29 | f | semmle.label | f | -| tests.go:55:5:55:78 | ... := ...[0] | semmle.label | ... := ...[0] | +| tests.go:55:5:55:78 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | tests.go:57:3:57:3 | f | semmle.label | f | -| tests.go:67:5:67:76 | ... := ...[0] | semmle.label | ... := ...[0] | +| tests.go:67:5:67:76 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | tests.go:69:3:69:3 | f | semmle.label | f | -| tests.go:124:5:124:78 | ... := ...[0] | semmle.label | ... := ...[0] | +| tests.go:124:5:124:78 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | tests.go:126:9:126:9 | f | semmle.label | f | -| tests.go:141:5:141:78 | ... := ...[0] | semmle.label | ... := ...[0] | +| tests.go:141:5:141:78 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | tests.go:145:3:145:3 | f | semmle.label | f | -| tests.go:162:2:162:74 | ... := ...[0] | semmle.label | ... := ...[0] | +| tests.go:162:2:162:74 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | tests.go:166:8:166:8 | f | semmle.label | f | subpaths diff --git a/go/ql/test/query-tests/Security/CWE-022/ZipSlip.expected b/go/ql/test/query-tests/Security/CWE-022/ZipSlip.expected index 3bfd80a120c..f1b77213bbc 100644 --- a/go/ql/test/query-tests/Security/CWE-022/ZipSlip.expected +++ b/go/ql/test/query-tests/Security/CWE-022/ZipSlip.expected @@ -1,21 +1,21 @@ #select -| UnsafeUnzipSymlinkGood.go:72:3:72:25 | ... := ...[0] | UnsafeUnzipSymlinkGood.go:72:3:72:25 | ... := ...[0] | UnsafeUnzipSymlinkGood.go:61:31:61:62 | call to Join | Unsanitized archive entry, which may contain '..', is used in a $@. | UnsafeUnzipSymlinkGood.go:61:31:61:62 | call to Join | file system operation | -| ZipSlip.go:11:2:15:2 | range statement[1] | ZipSlip.go:11:2:15:2 | range statement[1] | ZipSlip.go:14:20:14:20 | p | Unsanitized archive entry, which may contain '..', is used in a $@. | ZipSlip.go:14:20:14:20 | p | file system operation | -| tarslip.go:15:2:15:30 | ... := ...[0] | tarslip.go:15:2:15:30 | ... := ...[0] | tarslip.go:16:14:16:34 | call to Dir | Unsanitized archive entry, which may contain '..', is used in a $@. | tarslip.go:16:14:16:34 | call to Dir | file system operation | -| tst.go:23:2:43:2 | range statement[1] | tst.go:23:2:43:2 | range statement[1] | tst.go:29:20:29:23 | path | Unsanitized archive entry, which may contain '..', is used in a $@. | tst.go:29:20:29:23 | path | file system operation | +| UnsafeUnzipSymlinkGood.go:72:3:72:25 | extract:0 ... := ... | UnsafeUnzipSymlinkGood.go:72:3:72:25 | extract:0 ... := ... | UnsafeUnzipSymlinkGood.go:61:31:61:62 | call to Join | Unsanitized archive entry, which may contain '..', is used in a $@. | UnsafeUnzipSymlinkGood.go:61:31:61:62 | call to Join | file system operation | +| ZipSlip.go:11:2:15:2 | extract:1 range statement | ZipSlip.go:11:2:15:2 | extract:1 range statement | ZipSlip.go:14:20:14:20 | p | Unsanitized archive entry, which may contain '..', is used in a $@. | ZipSlip.go:14:20:14:20 | p | file system operation | +| tarslip.go:15:2:15:30 | extract:0 ... := ... | tarslip.go:15:2:15:30 | extract:0 ... := ... | tarslip.go:16:14:16:34 | call to Dir | Unsanitized archive entry, which may contain '..', is used in a $@. | tarslip.go:16:14:16:34 | call to Dir | file system operation | +| tst.go:23:2:43:2 | extract:1 range statement | tst.go:23:2:43:2 | extract:1 range statement | tst.go:29:20:29:23 | path | Unsanitized archive entry, which may contain '..', is used in a $@. | tst.go:29:20:29:23 | path | file system operation | edges -| UnsafeUnzipSymlinkGood.go:52:24:52:32 | SSA def(candidate) | UnsafeUnzipSymlinkGood.go:61:53:61:61 | candidate | provenance | | +| UnsafeUnzipSymlinkGood.go:52:55:67:1 | SSA def(candidate) | UnsafeUnzipSymlinkGood.go:61:53:61:61 | candidate | provenance | | | UnsafeUnzipSymlinkGood.go:61:53:61:61 | candidate | UnsafeUnzipSymlinkGood.go:61:31:61:62 | call to Join | provenance | FunctionModel Sink:MaD:3 | -| UnsafeUnzipSymlinkGood.go:72:3:72:25 | ... := ...[0] | UnsafeUnzipSymlinkGood.go:76:24:76:38 | selection of Linkname | provenance | | -| UnsafeUnzipSymlinkGood.go:72:3:72:25 | ... := ...[0] | UnsafeUnzipSymlinkGood.go:76:70:76:80 | selection of Name | provenance | | -| UnsafeUnzipSymlinkGood.go:76:24:76:38 | selection of Linkname | UnsafeUnzipSymlinkGood.go:52:24:52:32 | SSA def(candidate) | provenance | | -| UnsafeUnzipSymlinkGood.go:76:70:76:80 | selection of Name | UnsafeUnzipSymlinkGood.go:52:24:52:32 | SSA def(candidate) | provenance | | -| ZipSlip.go:11:2:15:2 | range statement[1] | ZipSlip.go:12:24:12:29 | selection of Name | provenance | | -| ZipSlip.go:12:3:12:30 | ... := ...[0] | ZipSlip.go:14:20:14:20 | p | provenance | Sink:MaD:1 | -| ZipSlip.go:12:24:12:29 | selection of Name | ZipSlip.go:12:3:12:30 | ... := ...[0] | provenance | MaD:4 | -| tarslip.go:15:2:15:30 | ... := ...[0] | tarslip.go:16:23:16:33 | selection of Name | provenance | | +| UnsafeUnzipSymlinkGood.go:72:3:72:25 | extract:0 ... := ... | UnsafeUnzipSymlinkGood.go:76:24:76:38 | selection of Linkname | provenance | | +| UnsafeUnzipSymlinkGood.go:72:3:72:25 | extract:0 ... := ... | UnsafeUnzipSymlinkGood.go:76:70:76:80 | selection of Name | provenance | | +| UnsafeUnzipSymlinkGood.go:76:24:76:38 | selection of Linkname | UnsafeUnzipSymlinkGood.go:52:55:67:1 | SSA def(candidate) | provenance | | +| UnsafeUnzipSymlinkGood.go:76:70:76:80 | selection of Name | UnsafeUnzipSymlinkGood.go:52:55:67:1 | SSA def(candidate) | provenance | | +| ZipSlip.go:11:2:15:2 | extract:1 range statement | ZipSlip.go:12:24:12:29 | selection of Name | provenance | | +| ZipSlip.go:12:3:12:30 | extract:0 ... := ... | ZipSlip.go:14:20:14:20 | p | provenance | Sink:MaD:1 | +| ZipSlip.go:12:24:12:29 | selection of Name | ZipSlip.go:12:3:12:30 | extract:0 ... := ... | provenance | MaD:4 | +| tarslip.go:15:2:15:30 | extract:0 ... := ... | tarslip.go:16:23:16:33 | selection of Name | provenance | | | tarslip.go:16:23:16:33 | selection of Name | tarslip.go:16:14:16:34 | call to Dir | provenance | MaD:5 Sink:MaD:2 | -| tst.go:23:2:43:2 | range statement[1] | tst.go:29:20:29:23 | path | provenance | Sink:MaD:1 | +| tst.go:23:2:43:2 | extract:1 range statement | tst.go:29:20:29:23 | path | provenance | Sink:MaD:1 | models | 1 | Sink: io/ioutil; ; false; WriteFile; ; ; Argument[0]; path-injection; manual | | 2 | Sink: os; ; false; MkdirAll; ; ; Argument[0]; path-injection; manual | @@ -23,19 +23,19 @@ models | 4 | Summary: path/filepath; ; false; Abs; ; ; Argument[0]; ReturnValue[0]; taint; manual | | 5 | Summary: path; ; false; Dir; ; ; Argument[0]; ReturnValue; taint; manual | nodes -| UnsafeUnzipSymlinkGood.go:52:24:52:32 | SSA def(candidate) | semmle.label | SSA def(candidate) | +| UnsafeUnzipSymlinkGood.go:52:55:67:1 | SSA def(candidate) | semmle.label | SSA def(candidate) | | UnsafeUnzipSymlinkGood.go:61:31:61:62 | call to Join | semmle.label | call to Join | | UnsafeUnzipSymlinkGood.go:61:53:61:61 | candidate | semmle.label | candidate | -| UnsafeUnzipSymlinkGood.go:72:3:72:25 | ... := ...[0] | semmle.label | ... := ...[0] | +| UnsafeUnzipSymlinkGood.go:72:3:72:25 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | UnsafeUnzipSymlinkGood.go:76:24:76:38 | selection of Linkname | semmle.label | selection of Linkname | | UnsafeUnzipSymlinkGood.go:76:70:76:80 | selection of Name | semmle.label | selection of Name | -| ZipSlip.go:11:2:15:2 | range statement[1] | semmle.label | range statement[1] | -| ZipSlip.go:12:3:12:30 | ... := ...[0] | semmle.label | ... := ...[0] | +| ZipSlip.go:11:2:15:2 | extract:1 range statement | semmle.label | extract:1 range statement | +| ZipSlip.go:12:3:12:30 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | ZipSlip.go:12:24:12:29 | selection of Name | semmle.label | selection of Name | | ZipSlip.go:14:20:14:20 | p | semmle.label | p | -| tarslip.go:15:2:15:30 | ... := ...[0] | semmle.label | ... := ...[0] | +| tarslip.go:15:2:15:30 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | tarslip.go:16:14:16:34 | call to Dir | semmle.label | call to Dir | | tarslip.go:16:23:16:33 | selection of Name | semmle.label | selection of Name | -| tst.go:23:2:43:2 | range statement[1] | semmle.label | range statement[1] | +| tst.go:23:2:43:2 | extract:1 range statement | semmle.label | extract:1 range statement | | tst.go:29:20:29:23 | path | semmle.label | path | subpaths diff --git a/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected b/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected index e8c6848b569..510f18ca0c4 100644 --- a/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected @@ -8,8 +8,6 @@ | main.go:16:11:16:85 | call to Sprintf | main.go:16:63:16:70 | selection of Header | main.go:16:11:16:85 | call to Sprintf | This query depends on a $@. | main.go:16:63:16:70 | selection of Header | user-provided value | | main.go:35:11:35:11 | q | main.go:30:13:30:19 | selection of URL | main.go:35:11:35:11 | q | This query depends on a $@. | main.go:30:13:30:19 | selection of URL | user-provided value | | main.go:44:11:44:11 | q | main.go:40:25:40:31 | selection of URL | main.go:44:11:44:11 | q | This query depends on a $@. | main.go:40:25:40:31 | selection of URL | user-provided value | -| main.go:53:11:53:11 | q | main.go:49:28:49:34 | selection of URL | main.go:53:11:53:11 | q | This query depends on a $@. | main.go:49:28:49:34 | selection of URL | user-provided value | -| main.go:62:11:62:11 | q | main.go:58:28:58:34 | selection of URL | main.go:62:11:62:11 | q | This query depends on a $@. | main.go:58:28:58:34 | selection of URL | user-provided value | | mongoDB.go:57:22:57:29 | pipeline | mongoDB.go:40:20:40:30 | call to Referer | mongoDB.go:57:22:57:29 | pipeline | This query depends on a $@. | mongoDB.go:40:20:40:30 | call to Referer | user-provided value | | mongoDB.go:61:27:61:32 | filter | mongoDB.go:40:20:40:30 | call to Referer | mongoDB.go:61:27:61:32 | filter | This query depends on a $@. | mongoDB.go:40:20:40:30 | call to Referer | user-provided value | | mongoDB.go:63:23:63:28 | filter | mongoDB.go:40:20:40:30 | call to Referer | mongoDB.go:63:23:63:28 | filter | This query depends on a $@. | mongoDB.go:40:20:40:30 | call to Referer | user-provided value | @@ -31,16 +29,16 @@ edges | SqlInjection.go:11:3:11:17 | call to Query | SqlInjection.go:11:3:11:29 | index expression | provenance | | | SqlInjection.go:11:3:11:29 | index expression | SqlInjection.go:10:7:11:30 | []type{args} [array] | provenance | | | SqlInjection.go:11:3:11:29 | index expression | SqlInjection.go:10:7:11:30 | call to Sprintf | provenance | FunctionModel | -| issue48.go:17:2:17:33 | ... := ...[0] | issue48.go:18:17:18:17 | b | provenance | | -| issue48.go:17:25:17:32 | selection of Body | issue48.go:17:2:17:33 | ... := ...[0] | provenance | Src:MaD:17 MaD:24 | +| issue48.go:17:2:17:33 | extract:0 ... := ... | issue48.go:18:17:18:17 | b | provenance | | +| issue48.go:17:25:17:32 | selection of Body | issue48.go:17:2:17:33 | extract:0 ... := ... | provenance | Src:MaD:17 MaD:24 | | issue48.go:18:17:18:17 | b | issue48.go:18:20:18:39 | &... [postupdate] | provenance | MaD:22 | | issue48.go:18:20:18:39 | &... [postupdate] | issue48.go:21:3:21:33 | index expression | provenance | | | issue48.go:20:8:21:34 | []type{args} [array] | issue48.go:20:8:21:34 | call to Sprintf | provenance | MaD:23 | | issue48.go:20:8:21:34 | call to Sprintf | issue48.go:22:11:22:12 | q3 | provenance | Sink:MaD:1 | | issue48.go:21:3:21:33 | index expression | issue48.go:20:8:21:34 | []type{args} [array] | provenance | | | issue48.go:21:3:21:33 | index expression | issue48.go:20:8:21:34 | call to Sprintf | provenance | FunctionModel | -| issue48.go:27:2:27:34 | ... := ...[0] | issue48.go:28:17:28:18 | b2 | provenance | | -| issue48.go:27:26:27:33 | selection of Body | issue48.go:27:2:27:34 | ... := ...[0] | provenance | Src:MaD:17 MaD:24 | +| issue48.go:27:2:27:34 | extract:0 ... := ... | issue48.go:28:17:28:18 | b2 | provenance | | +| issue48.go:27:26:27:33 | selection of Body | issue48.go:27:2:27:34 | extract:0 ... := ... | provenance | Src:MaD:17 MaD:24 | | issue48.go:28:17:28:18 | b2 | issue48.go:28:21:28:41 | &... [postupdate] | provenance | MaD:22 | | issue48.go:28:21:28:41 | &... [postupdate] | issue48.go:31:3:31:31 | selection of Category | provenance | | | issue48.go:30:8:31:32 | []type{args} [array] | issue48.go:30:8:31:32 | call to Sprintf | provenance | MaD:23 | @@ -72,43 +70,21 @@ edges | main.go:30:13:30:39 | index expression | main.go:28:18:31:2 | struct literal [Category] | provenance | | | main.go:33:7:34:23 | []type{args} [array] | main.go:33:7:34:23 | call to Sprintf | provenance | MaD:23 | | main.go:33:7:34:23 | call to Sprintf | main.go:35:11:35:11 | q | provenance | Sink:MaD:1 | -| main.go:34:3:34:13 | RequestData [pointer, Category] | main.go:34:3:34:13 | implicit dereference [Category] | provenance | | -| main.go:34:3:34:13 | implicit dereference [Category] | main.go:34:3:34:22 | selection of Category | provenance | | +| main.go:34:3:34:13 | RequestData [pointer, Category] | main.go:34:3:34:13 | implicit-deref RequestData [Category] | provenance | | +| main.go:34:3:34:13 | implicit-deref RequestData [Category] | main.go:34:3:34:22 | selection of Category | provenance | | | main.go:34:3:34:22 | selection of Category | main.go:33:7:34:23 | []type{args} [array] | provenance | | | main.go:34:3:34:22 | selection of Category | main.go:33:7:34:23 | call to Sprintf | provenance | FunctionModel | | main.go:40:2:40:12 | RequestData [postupdate] [pointer, Category] | main.go:43:3:43:13 | RequestData [pointer, Category] | provenance | | -| main.go:40:2:40:12 | implicit dereference [postupdate] [Category] | main.go:40:2:40:12 | RequestData [postupdate] [pointer, Category] | provenance | | +| main.go:40:2:40:12 | implicit-deref RequestData [postupdate] [Category] | main.go:40:2:40:12 | RequestData [postupdate] [pointer, Category] | provenance | | | main.go:40:25:40:31 | selection of URL | main.go:40:25:40:39 | call to Query | provenance | Src:MaD:21 MaD:26 | | main.go:40:25:40:39 | call to Query | main.go:40:25:40:51 | index expression | provenance | | -| main.go:40:25:40:51 | index expression | main.go:40:2:40:12 | implicit dereference [postupdate] [Category] | provenance | | +| main.go:40:25:40:51 | index expression | main.go:40:2:40:12 | implicit-deref RequestData [postupdate] [Category] | provenance | | | main.go:42:7:43:23 | []type{args} [array] | main.go:42:7:43:23 | call to Sprintf | provenance | MaD:23 | | main.go:42:7:43:23 | call to Sprintf | main.go:44:11:44:11 | q | provenance | Sink:MaD:1 | -| main.go:43:3:43:13 | RequestData [pointer, Category] | main.go:43:3:43:13 | implicit dereference [Category] | provenance | | -| main.go:43:3:43:13 | implicit dereference [Category] | main.go:43:3:43:22 | selection of Category | provenance | | +| main.go:43:3:43:13 | RequestData [pointer, Category] | main.go:43:3:43:13 | implicit-deref RequestData [Category] | provenance | | +| main.go:43:3:43:13 | implicit-deref RequestData [Category] | main.go:43:3:43:22 | selection of Category | provenance | | | main.go:43:3:43:22 | selection of Category | main.go:42:7:43:23 | []type{args} [array] | provenance | | | main.go:43:3:43:22 | selection of Category | main.go:42:7:43:23 | call to Sprintf | provenance | FunctionModel | -| main.go:49:3:49:14 | star expression [postupdate] [Category] | main.go:49:4:49:14 | RequestData [postupdate] [pointer, Category] | provenance | | -| main.go:49:4:49:14 | RequestData [postupdate] [pointer, Category] | main.go:52:3:52:13 | RequestData [pointer, Category] | provenance | | -| main.go:49:28:49:34 | selection of URL | main.go:49:28:49:42 | call to Query | provenance | Src:MaD:21 MaD:26 | -| main.go:49:28:49:42 | call to Query | main.go:49:28:49:54 | index expression | provenance | | -| main.go:49:28:49:54 | index expression | main.go:49:3:49:14 | star expression [postupdate] [Category] | provenance | | -| main.go:51:7:52:23 | []type{args} [array] | main.go:51:7:52:23 | call to Sprintf | provenance | MaD:23 | -| main.go:51:7:52:23 | call to Sprintf | main.go:53:11:53:11 | q | provenance | Sink:MaD:1 | -| main.go:52:3:52:13 | RequestData [pointer, Category] | main.go:52:3:52:13 | implicit dereference [Category] | provenance | | -| main.go:52:3:52:13 | implicit dereference [Category] | main.go:52:3:52:22 | selection of Category | provenance | | -| main.go:52:3:52:22 | selection of Category | main.go:51:7:52:23 | []type{args} [array] | provenance | | -| main.go:52:3:52:22 | selection of Category | main.go:51:7:52:23 | call to Sprintf | provenance | FunctionModel | -| main.go:58:3:58:14 | star expression [postupdate] [Category] | main.go:58:4:58:14 | RequestData [postupdate] [pointer, Category] | provenance | | -| main.go:58:4:58:14 | RequestData [postupdate] [pointer, Category] | main.go:61:5:61:15 | RequestData [pointer, Category] | provenance | | -| main.go:58:28:58:34 | selection of URL | main.go:58:28:58:42 | call to Query | provenance | Src:MaD:21 MaD:26 | -| main.go:58:28:58:42 | call to Query | main.go:58:28:58:54 | index expression | provenance | | -| main.go:58:28:58:54 | index expression | main.go:58:3:58:14 | star expression [postupdate] [Category] | provenance | | -| main.go:60:7:61:26 | []type{args} [array] | main.go:60:7:61:26 | call to Sprintf | provenance | MaD:23 | -| main.go:60:7:61:26 | call to Sprintf | main.go:62:11:62:11 | q | provenance | Sink:MaD:1 | -| main.go:61:3:61:25 | selection of Category | main.go:60:7:61:26 | []type{args} [array] | provenance | | -| main.go:61:3:61:25 | selection of Category | main.go:60:7:61:26 | call to Sprintf | provenance | FunctionModel | -| main.go:61:4:61:15 | star expression [Category] | main.go:61:3:61:25 | selection of Category | provenance | | -| main.go:61:5:61:15 | RequestData [pointer, Category] | main.go:61:4:61:15 | star expression [Category] | provenance | | | mongoDB.go:40:20:40:30 | call to Referer | mongoDB.go:42:28:42:41 | untrustedInput | provenance | Src:MaD:20 | | mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:50:34:50:39 | filter | provenance | | | mongoDB.go:42:28:42:41 | untrustedInput | mongoDB.go:42:19:42:42 | struct literal | provenance | Config | @@ -161,7 +137,7 @@ nodes | SqlInjection.go:11:3:11:17 | call to Query | semmle.label | call to Query | | SqlInjection.go:11:3:11:29 | index expression | semmle.label | index expression | | SqlInjection.go:12:11:12:11 | q | semmle.label | q | -| issue48.go:17:2:17:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| issue48.go:17:2:17:33 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | issue48.go:17:25:17:32 | selection of Body | semmle.label | selection of Body | | issue48.go:18:17:18:17 | b | semmle.label | b | | issue48.go:18:20:18:39 | &... [postupdate] | semmle.label | &... [postupdate] | @@ -169,7 +145,7 @@ nodes | issue48.go:20:8:21:34 | call to Sprintf | semmle.label | call to Sprintf | | issue48.go:21:3:21:33 | index expression | semmle.label | index expression | | issue48.go:22:11:22:12 | q3 | semmle.label | q3 | -| issue48.go:27:2:27:34 | ... := ...[0] | semmle.label | ... := ...[0] | +| issue48.go:27:2:27:34 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | issue48.go:27:26:27:33 | selection of Body | semmle.label | selection of Body | | issue48.go:28:17:28:18 | b2 | semmle.label | b2 | | issue48.go:28:21:28:41 | &... [postupdate] | semmle.label | &... [postupdate] | @@ -204,42 +180,20 @@ nodes | main.go:33:7:34:23 | []type{args} [array] | semmle.label | []type{args} [array] | | main.go:33:7:34:23 | call to Sprintf | semmle.label | call to Sprintf | | main.go:34:3:34:13 | RequestData [pointer, Category] | semmle.label | RequestData [pointer, Category] | -| main.go:34:3:34:13 | implicit dereference [Category] | semmle.label | implicit dereference [Category] | +| main.go:34:3:34:13 | implicit-deref RequestData [Category] | semmle.label | implicit-deref RequestData [Category] | | main.go:34:3:34:22 | selection of Category | semmle.label | selection of Category | | main.go:35:11:35:11 | q | semmle.label | q | | main.go:40:2:40:12 | RequestData [postupdate] [pointer, Category] | semmle.label | RequestData [postupdate] [pointer, Category] | -| main.go:40:2:40:12 | implicit dereference [postupdate] [Category] | semmle.label | implicit dereference [postupdate] [Category] | +| main.go:40:2:40:12 | implicit-deref RequestData [postupdate] [Category] | semmle.label | implicit-deref RequestData [postupdate] [Category] | | main.go:40:25:40:31 | selection of URL | semmle.label | selection of URL | | main.go:40:25:40:39 | call to Query | semmle.label | call to Query | | main.go:40:25:40:51 | index expression | semmle.label | index expression | | main.go:42:7:43:23 | []type{args} [array] | semmle.label | []type{args} [array] | | main.go:42:7:43:23 | call to Sprintf | semmle.label | call to Sprintf | | main.go:43:3:43:13 | RequestData [pointer, Category] | semmle.label | RequestData [pointer, Category] | -| main.go:43:3:43:13 | implicit dereference [Category] | semmle.label | implicit dereference [Category] | +| main.go:43:3:43:13 | implicit-deref RequestData [Category] | semmle.label | implicit-deref RequestData [Category] | | main.go:43:3:43:22 | selection of Category | semmle.label | selection of Category | | main.go:44:11:44:11 | q | semmle.label | q | -| main.go:49:3:49:14 | star expression [postupdate] [Category] | semmle.label | star expression [postupdate] [Category] | -| main.go:49:4:49:14 | RequestData [postupdate] [pointer, Category] | semmle.label | RequestData [postupdate] [pointer, Category] | -| main.go:49:28:49:34 | selection of URL | semmle.label | selection of URL | -| main.go:49:28:49:42 | call to Query | semmle.label | call to Query | -| main.go:49:28:49:54 | index expression | semmle.label | index expression | -| main.go:51:7:52:23 | []type{args} [array] | semmle.label | []type{args} [array] | -| main.go:51:7:52:23 | call to Sprintf | semmle.label | call to Sprintf | -| main.go:52:3:52:13 | RequestData [pointer, Category] | semmle.label | RequestData [pointer, Category] | -| main.go:52:3:52:13 | implicit dereference [Category] | semmle.label | implicit dereference [Category] | -| main.go:52:3:52:22 | selection of Category | semmle.label | selection of Category | -| main.go:53:11:53:11 | q | semmle.label | q | -| main.go:58:3:58:14 | star expression [postupdate] [Category] | semmle.label | star expression [postupdate] [Category] | -| main.go:58:4:58:14 | RequestData [postupdate] [pointer, Category] | semmle.label | RequestData [postupdate] [pointer, Category] | -| main.go:58:28:58:34 | selection of URL | semmle.label | selection of URL | -| main.go:58:28:58:42 | call to Query | semmle.label | call to Query | -| main.go:58:28:58:54 | index expression | semmle.label | index expression | -| main.go:60:7:61:26 | []type{args} [array] | semmle.label | []type{args} [array] | -| main.go:60:7:61:26 | call to Sprintf | semmle.label | call to Sprintf | -| main.go:61:3:61:25 | selection of Category | semmle.label | selection of Category | -| main.go:61:4:61:15 | star expression [Category] | semmle.label | star expression [Category] | -| main.go:61:5:61:15 | RequestData [pointer, Category] | semmle.label | RequestData [pointer, Category] | -| main.go:62:11:62:11 | q | semmle.label | q | | mongoDB.go:40:20:40:30 | call to Referer | semmle.label | call to Referer | | mongoDB.go:42:19:42:42 | struct literal | semmle.label | struct literal | | mongoDB.go:42:28:42:41 | untrustedInput | semmle.label | untrustedInput | @@ -260,3 +214,8 @@ nodes | mongoDB.go:80:22:80:27 | filter | semmle.label | filter | | mongoDB.go:81:18:81:25 | pipeline | semmle.label | pipeline | subpaths +testFailures +| main.go:49:56:49:84 | comment | Missing result: Source[go/sql-injection] | +| main.go:53:14:53:41 | comment | Missing result: Alert[go/sql-injection] | +| main.go:58:56:58:84 | comment | Missing result: Source[go/sql-injection] | +| main.go:62:14:62:41 | comment | Missing result: Alert[go/sql-injection] | diff --git a/go/ql/test/query-tests/Security/CWE-089/StringBreak.expected b/go/ql/test/query-tests/Security/CWE-089/StringBreak.expected index 63caa73d596..31d7ff8622c 100644 --- a/go/ql/test/query-tests/Security/CWE-089/StringBreak.expected +++ b/go/ql/test/query-tests/Security/CWE-089/StringBreak.expected @@ -1,25 +1,25 @@ #select -| StringBreak.go:15:47:15:57 | versionJSON | StringBreak.go:11:2:11:40 | ... := ...[0] | StringBreak.go:15:47:15:57 | versionJSON | If this $@ contains a single quote, it could break out of the enclosing quotes. | StringBreak.go:11:2:11:40 | ... := ...[0] | JSON value | -| StringBreakMismatched.go:18:26:18:32 | escaped | StringBreakMismatched.go:13:2:13:40 | ... := ...[0] | StringBreakMismatched.go:18:26:18:32 | escaped | If this $@ contains a single quote, it could break out of the enclosing quotes. | StringBreakMismatched.go:13:2:13:40 | ... := ...[0] | JSON value | -| StringBreakMismatched.go:30:27:30:33 | escaped | StringBreakMismatched.go:25:2:25:40 | ... := ...[0] | StringBreakMismatched.go:30:27:30:33 | escaped | If this $@ contains a double quote, it could break out of the enclosing quotes. | StringBreakMismatched.go:25:2:25:40 | ... := ...[0] | JSON value | +| StringBreak.go:15:47:15:57 | versionJSON | StringBreak.go:11:2:11:40 | extract:0 ... := ... | StringBreak.go:15:47:15:57 | versionJSON | If this $@ contains a single quote, it could break out of the enclosing quotes. | StringBreak.go:11:2:11:40 | extract:0 ... := ... | JSON value | +| StringBreakMismatched.go:18:26:18:32 | escaped | StringBreakMismatched.go:13:2:13:40 | extract:0 ... := ... | StringBreakMismatched.go:18:26:18:32 | escaped | If this $@ contains a single quote, it could break out of the enclosing quotes. | StringBreakMismatched.go:13:2:13:40 | extract:0 ... := ... | JSON value | +| StringBreakMismatched.go:30:27:30:33 | escaped | StringBreakMismatched.go:25:2:25:40 | extract:0 ... := ... | StringBreakMismatched.go:30:27:30:33 | escaped | If this $@ contains a double quote, it could break out of the enclosing quotes. | StringBreakMismatched.go:25:2:25:40 | extract:0 ... := ... | JSON value | edges -| StringBreak.go:11:2:11:40 | ... := ...[0] | StringBreak.go:15:47:15:57 | versionJSON | provenance | | -| StringBreakMismatched.go:13:2:13:40 | ... := ...[0] | StringBreakMismatched.go:14:29:14:47 | type conversion | provenance | | +| StringBreak.go:11:2:11:40 | extract:0 ... := ... | StringBreak.go:15:47:15:57 | versionJSON | provenance | | +| StringBreakMismatched.go:13:2:13:40 | extract:0 ... := ... | StringBreakMismatched.go:14:29:14:47 | type conversion | provenance | | | StringBreakMismatched.go:14:13:14:62 | call to Replace | StringBreakMismatched.go:18:26:18:32 | escaped | provenance | | | StringBreakMismatched.go:14:29:14:47 | type conversion | StringBreakMismatched.go:14:13:14:62 | call to Replace | provenance | MaD:1 | -| StringBreakMismatched.go:25:2:25:40 | ... := ...[0] | StringBreakMismatched.go:26:29:26:47 | type conversion | provenance | | +| StringBreakMismatched.go:25:2:25:40 | extract:0 ... := ... | StringBreakMismatched.go:26:29:26:47 | type conversion | provenance | | | StringBreakMismatched.go:26:13:26:61 | call to Replace | StringBreakMismatched.go:30:27:30:33 | escaped | provenance | | | StringBreakMismatched.go:26:29:26:47 | type conversion | StringBreakMismatched.go:26:13:26:61 | call to Replace | provenance | MaD:1 | models | 1 | Summary: strings; ; false; Replace; ; ; Argument[0]; ReturnValue; taint; manual | nodes -| StringBreak.go:11:2:11:40 | ... := ...[0] | semmle.label | ... := ...[0] | +| StringBreak.go:11:2:11:40 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | StringBreak.go:15:47:15:57 | versionJSON | semmle.label | versionJSON | -| StringBreakMismatched.go:13:2:13:40 | ... := ...[0] | semmle.label | ... := ...[0] | +| StringBreakMismatched.go:13:2:13:40 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | StringBreakMismatched.go:14:13:14:62 | call to Replace | semmle.label | call to Replace | | StringBreakMismatched.go:14:29:14:47 | type conversion | semmle.label | type conversion | | StringBreakMismatched.go:18:26:18:32 | escaped | semmle.label | escaped | -| StringBreakMismatched.go:25:2:25:40 | ... := ...[0] | semmle.label | ... := ...[0] | +| StringBreakMismatched.go:25:2:25:40 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | StringBreakMismatched.go:26:13:26:61 | call to Replace | semmle.label | call to Replace | | StringBreakMismatched.go:26:29:26:47 | type conversion | semmle.label | type conversion | | StringBreakMismatched.go:30:27:30:33 | escaped | semmle.label | escaped | diff --git a/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected b/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected index 7a195352f39..904218f731f 100644 --- a/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected +++ b/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected @@ -1,80 +1,85 @@ #select | klog.go:23:15:23:20 | header | klog.go:21:30:21:37 | selection of Header | klog.go:23:15:23:20 | header | $@ flows to a logging call. | klog.go:21:30:21:37 | selection of Header | Sensitive data returned by HTTP request headers | | klog.go:29:13:29:41 | call to Get | klog.go:29:13:29:20 | selection of Header | klog.go:29:13:29:41 | call to Get | $@ flows to a logging call. | klog.go:29:13:29:20 | selection of Header | Sensitive data returned by HTTP request headers | -| main.go:19:12:19:19 | password | main.go:17:2:17:9 | SSA def(password) | main.go:19:12:19:19 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:20:19:20:26 | password | main.go:17:2:17:9 | SSA def(password) | main.go:20:19:20:26 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:21:13:21:20 | password | main.go:17:2:17:9 | SSA def(password) | main.go:21:13:21:20 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:22:14:22:21 | password | main.go:17:2:17:9 | SSA def(password) | main.go:22:14:22:21 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:24:13:24:20 | password | main.go:17:2:17:9 | SSA def(password) | main.go:24:13:24:20 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:27:20:27:27 | password | main.go:17:2:17:9 | SSA def(password) | main.go:27:20:27:27 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:30:14:30:21 | password | main.go:17:2:17:9 | SSA def(password) | main.go:30:14:30:21 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:33:15:33:22 | password | main.go:17:2:17:9 | SSA def(password) | main.go:33:15:33:22 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:36:13:36:20 | password | main.go:17:2:17:9 | SSA def(password) | main.go:36:13:36:20 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:39:20:39:27 | password | main.go:17:2:17:9 | SSA def(password) | main.go:39:20:39:27 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:42:14:42:21 | password | main.go:17:2:17:9 | SSA def(password) | main.go:42:14:42:21 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:45:15:45:22 | password | main.go:17:2:17:9 | SSA def(password) | main.go:45:15:45:22 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:47:16:47:23 | password | main.go:17:2:17:9 | SSA def(password) | main.go:47:16:47:23 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:51:10:51:17 | password | main.go:17:2:17:9 | SSA def(password) | main.go:51:10:51:17 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:52:17:52:24 | password | main.go:17:2:17:9 | SSA def(password) | main.go:52:17:52:24 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:53:11:53:18 | password | main.go:17:2:17:9 | SSA def(password) | main.go:53:11:53:18 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:54:12:54:19 | password | main.go:17:2:17:9 | SSA def(password) | main.go:54:12:54:19 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:56:11:56:18 | password | main.go:17:2:17:9 | SSA def(password) | main.go:56:11:56:18 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:59:18:59:25 | password | main.go:17:2:17:9 | SSA def(password) | main.go:59:18:59:25 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:62:12:62:19 | password | main.go:17:2:17:9 | SSA def(password) | main.go:62:12:62:19 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:65:13:65:20 | password | main.go:17:2:17:9 | SSA def(password) | main.go:65:13:65:20 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:68:11:68:18 | password | main.go:17:2:17:9 | SSA def(password) | main.go:68:11:68:18 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:71:18:71:25 | password | main.go:17:2:17:9 | SSA def(password) | main.go:71:18:71:25 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:74:12:74:19 | password | main.go:17:2:17:9 | SSA def(password) | main.go:74:12:74:19 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:77:13:77:20 | password | main.go:17:2:17:9 | SSA def(password) | main.go:77:13:77:20 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:79:14:79:21 | password | main.go:17:2:17:9 | SSA def(password) | main.go:79:14:79:21 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:82:12:82:19 | password | main.go:17:2:17:9 | SSA def(password) | main.go:82:12:82:19 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:83:17:83:24 | password | main.go:17:2:17:9 | SSA def(password) | main.go:83:17:83:24 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:87:29:87:34 | fields | main.go:17:2:17:9 | SSA def(password) | main.go:87:29:87:34 | fields | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| main.go:90:35:90:42 | password | main.go:17:2:17:9 | SSA def(password) | main.go:90:35:90:42 | password | $@ flows to a logging call. | main.go:17:2:17:9 | SSA def(password) | Sensitive data returned by an access to password | -| overrides.go:13:14:13:23 | call to String | overrides.go:8:2:8:9 | SSA def(password) | overrides.go:13:14:13:23 | call to String | $@ flows to a logging call. | overrides.go:8:2:8:9 | SSA def(password) | Sensitive data returned by an access to password | -| passwords.go:9:14:9:14 | x | passwords.go:21:2:21:9 | SSA def(password) | passwords.go:9:14:9:14 | x | $@ flows to a logging call. | passwords.go:21:2:21:9 | SSA def(password) | Sensitive data returned by an access to password | -| passwords.go:25:14:25:21 | password | passwords.go:21:2:21:9 | SSA def(password) | passwords.go:25:14:25:21 | password | $@ flows to a logging call. | passwords.go:21:2:21:9 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:19:12:19:19 | password | main.go:17:2:17:23 | SSA def(password) | main.go:19:12:19:19 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:20:19:20:26 | password | main.go:17:2:17:23 | SSA def(password) | main.go:20:19:20:26 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:21:13:21:20 | password | main.go:17:2:17:23 | SSA def(password) | main.go:21:13:21:20 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:22:14:22:21 | password | main.go:17:2:17:23 | SSA def(password) | main.go:22:14:22:21 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:24:13:24:20 | password | main.go:17:2:17:23 | SSA def(password) | main.go:24:13:24:20 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:27:20:27:27 | password | main.go:17:2:17:23 | SSA def(password) | main.go:27:20:27:27 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:30:14:30:21 | password | main.go:17:2:17:23 | SSA def(password) | main.go:30:14:30:21 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:33:15:33:22 | password | main.go:17:2:17:23 | SSA def(password) | main.go:33:15:33:22 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:36:13:36:20 | password | main.go:17:2:17:23 | SSA def(password) | main.go:36:13:36:20 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:39:20:39:27 | password | main.go:17:2:17:23 | SSA def(password) | main.go:39:20:39:27 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:42:14:42:21 | password | main.go:17:2:17:23 | SSA def(password) | main.go:42:14:42:21 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:45:15:45:22 | password | main.go:17:2:17:23 | SSA def(password) | main.go:45:15:45:22 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:47:16:47:23 | password | main.go:17:2:17:23 | SSA def(password) | main.go:47:16:47:23 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:51:10:51:17 | password | main.go:17:2:17:23 | SSA def(password) | main.go:51:10:51:17 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:52:17:52:24 | password | main.go:17:2:17:23 | SSA def(password) | main.go:52:17:52:24 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:53:11:53:18 | password | main.go:17:2:17:23 | SSA def(password) | main.go:53:11:53:18 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:54:12:54:19 | password | main.go:17:2:17:23 | SSA def(password) | main.go:54:12:54:19 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:56:11:56:18 | password | main.go:17:2:17:23 | SSA def(password) | main.go:56:11:56:18 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:59:18:59:25 | password | main.go:17:2:17:23 | SSA def(password) | main.go:59:18:59:25 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:62:12:62:19 | password | main.go:17:2:17:23 | SSA def(password) | main.go:62:12:62:19 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:65:13:65:20 | password | main.go:17:2:17:23 | SSA def(password) | main.go:65:13:65:20 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:68:11:68:18 | password | main.go:17:2:17:23 | SSA def(password) | main.go:68:11:68:18 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:71:18:71:25 | password | main.go:17:2:17:23 | SSA def(password) | main.go:71:18:71:25 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:74:12:74:19 | password | main.go:17:2:17:23 | SSA def(password) | main.go:74:12:74:19 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:77:13:77:20 | password | main.go:17:2:17:23 | SSA def(password) | main.go:77:13:77:20 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:79:14:79:21 | password | main.go:17:2:17:23 | SSA def(password) | main.go:79:14:79:21 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:82:12:82:19 | password | main.go:17:2:17:23 | SSA def(password) | main.go:82:12:82:19 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:83:17:83:24 | password | main.go:17:2:17:23 | SSA def(password) | main.go:83:17:83:24 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:87:29:87:34 | fields | main.go:17:2:17:23 | SSA def(password) | main.go:87:29:87:34 | fields | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| main.go:90:35:90:42 | password | main.go:17:2:17:23 | SSA def(password) | main.go:90:35:90:42 | password | $@ flows to a logging call. | main.go:17:2:17:23 | SSA def(password) | Sensitive data returned by an access to password | +| overrides.go:13:14:13:23 | call to String | overrides.go:8:2:8:40 | SSA def(password) | overrides.go:13:14:13:23 | call to String | $@ flows to a logging call. | overrides.go:8:2:8:40 | SSA def(password) | Sensitive data returned by an access to password | +| passwords.go:9:14:9:14 | x | passwords.go:21:2:21:23 | SSA def(password) | passwords.go:9:14:9:14 | x | $@ flows to a logging call. | passwords.go:21:2:21:23 | SSA def(password) | Sensitive data returned by an access to password | +| passwords.go:25:14:25:21 | password | passwords.go:21:2:21:23 | SSA def(password) | passwords.go:25:14:25:21 | password | $@ flows to a logging call. | passwords.go:21:2:21:23 | SSA def(password) | Sensitive data returned by an access to password | | passwords.go:26:14:26:23 | selection of password | passwords.go:26:14:26:23 | selection of password | passwords.go:26:14:26:23 | selection of password | $@ flows to a logging call. | passwords.go:26:14:26:23 | selection of password | Sensitive data returned by an access to password | | passwords.go:27:14:27:26 | call to getPassword | passwords.go:27:14:27:26 | call to getPassword | passwords.go:27:14:27:26 | call to getPassword | $@ flows to a logging call. | passwords.go:27:14:27:26 | call to getPassword | Sensitive data returned by a call to getPassword | | passwords.go:28:14:28:28 | call to getPassword | passwords.go:28:14:28:28 | call to getPassword | passwords.go:28:14:28:28 | call to getPassword | $@ flows to a logging call. | passwords.go:28:14:28:28 | call to getPassword | Sensitive data returned by a call to getPassword | -| passwords.go:33:13:33:20 | password | passwords.go:21:2:21:9 | SSA def(password) | passwords.go:33:13:33:20 | password | $@ flows to a logging call. | passwords.go:21:2:21:9 | SSA def(password) | Sensitive data returned by an access to password | -| passwords.go:36:14:36:35 | ...+... | passwords.go:21:2:21:9 | SSA def(password) | passwords.go:36:14:36:35 | ...+... | $@ flows to a logging call. | passwords.go:21:2:21:9 | SSA def(password) | Sensitive data returned by an access to password | +| passwords.go:33:13:33:20 | password | passwords.go:21:2:21:23 | SSA def(password) | passwords.go:33:13:33:20 | password | $@ flows to a logging call. | passwords.go:21:2:21:23 | SSA def(password) | Sensitive data returned by an access to password | +| passwords.go:36:14:36:35 | ...+... | passwords.go:21:2:21:23 | SSA def(password) | passwords.go:36:14:36:35 | ...+... | $@ flows to a logging call. | passwords.go:21:2:21:23 | SSA def(password) | Sensitive data returned by an access to password | +| passwords.go:41:14:41:17 | obj1 | passwords.go:39:3:39:13 | key-value pair | passwords.go:41:14:41:17 | obj1 | $@ flows to a logging call. | passwords.go:39:3:39:13 | key-value pair | Sensitive data returned by an access to password | | passwords.go:41:14:41:17 | obj1 | passwords.go:39:13:39:13 | x | passwords.go:41:14:41:17 | obj1 | $@ flows to a logging call. | passwords.go:39:13:39:13 | x | Sensitive data returned by an access to password | -| passwords.go:46:14:46:17 | obj2 | passwords.go:21:2:21:9 | SSA def(password) | passwords.go:46:14:46:17 | obj2 | $@ flows to a logging call. | passwords.go:21:2:21:9 | SSA def(password) | Sensitive data returned by an access to password | -| passwords.go:53:14:53:27 | fixed_password | passwords.go:52:2:52:15 | SSA def(fixed_password) | passwords.go:53:14:53:27 | fixed_password | $@ flows to a logging call. | passwords.go:52:2:52:15 | SSA def(fixed_password) | Sensitive data returned by an access to fixed_password | +| passwords.go:46:14:46:17 | obj2 | passwords.go:21:2:21:23 | SSA def(password) | passwords.go:46:14:46:17 | obj2 | $@ flows to a logging call. | passwords.go:21:2:21:23 | SSA def(password) | Sensitive data returned by an access to password | +| passwords.go:53:14:53:27 | fixed_password | passwords.go:52:2:52:44 | SSA def(fixed_password) | passwords.go:53:14:53:27 | fixed_password | $@ flows to a logging call. | passwords.go:52:2:52:44 | SSA def(fixed_password) | Sensitive data returned by an access to fixed_password | +| passwords.go:65:14:65:44 | struct literal | passwords.go:65:25:65:43 | key-value pair | passwords.go:65:14:65:44 | struct literal | $@ flows to a logging call. | passwords.go:65:25:65:43 | key-value pair | Sensitive data returned by an access to password | +| passwords.go:91:14:91:26 | utilityObject | passwords.go:89:3:89:36 | key-value pair | passwords.go:91:14:91:26 | utilityObject | $@ flows to a logging call. | passwords.go:89:3:89:36 | key-value pair | Sensitive data returned by an access to passwordSet | | passwords.go:91:14:91:26 | utilityObject | passwords.go:89:16:89:36 | call to make | passwords.go:91:14:91:26 | utilityObject | $@ flows to a logging call. | passwords.go:89:16:89:36 | call to make | Sensitive data returned by an access to passwordSet | -| passwords.go:94:23:94:28 | secret | passwords.go:21:2:21:9 | SSA def(password) | passwords.go:94:23:94:28 | secret | $@ flows to a logging call. | passwords.go:21:2:21:9 | SSA def(password) | Sensitive data returned by an access to password | -| passwords.go:104:15:104:40 | ...+... | passwords.go:21:2:21:9 | SSA def(password) | passwords.go:104:15:104:40 | ...+... | $@ flows to a logging call. | passwords.go:21:2:21:9 | SSA def(password) | Sensitive data returned by an access to password | -| passwords.go:110:16:110:41 | ...+... | passwords.go:21:2:21:9 | SSA def(password) | passwords.go:110:16:110:41 | ...+... | $@ flows to a logging call. | passwords.go:21:2:21:9 | SSA def(password) | Sensitive data returned by an access to password | -| passwords.go:115:15:115:40 | ...+... | passwords.go:21:2:21:9 | SSA def(password) | passwords.go:115:15:115:40 | ...+... | $@ flows to a logging call. | passwords.go:21:2:21:9 | SSA def(password) | Sensitive data returned by an access to password | -| passwords.go:119:14:119:45 | ...+... | passwords.go:118:6:118:14 | SSA def(password1) | passwords.go:119:14:119:45 | ...+... | $@ flows to a logging call. | passwords.go:118:6:118:14 | SSA def(password1) | Sensitive data returned by an access to password1 | -| passwords.go:129:14:129:19 | config | passwords.go:21:2:21:9 | SSA def(password) | passwords.go:129:14:129:19 | config | $@ flows to a logging call. | passwords.go:21:2:21:9 | SSA def(password) | Sensitive data returned by an access to password | +| passwords.go:94:23:94:28 | secret | passwords.go:21:2:21:23 | SSA def(password) | passwords.go:94:23:94:28 | secret | $@ flows to a logging call. | passwords.go:21:2:21:23 | SSA def(password) | Sensitive data returned by an access to password | +| passwords.go:104:15:104:40 | ...+... | passwords.go:21:2:21:23 | SSA def(password) | passwords.go:104:15:104:40 | ...+... | $@ flows to a logging call. | passwords.go:21:2:21:23 | SSA def(password) | Sensitive data returned by an access to password | +| passwords.go:110:16:110:41 | ...+... | passwords.go:21:2:21:23 | SSA def(password) | passwords.go:110:16:110:41 | ...+... | $@ flows to a logging call. | passwords.go:21:2:21:23 | SSA def(password) | Sensitive data returned by an access to password | +| passwords.go:115:15:115:40 | ...+... | passwords.go:21:2:21:23 | SSA def(password) | passwords.go:115:15:115:40 | ...+... | $@ flows to a logging call. | passwords.go:21:2:21:23 | SSA def(password) | Sensitive data returned by an access to password | +| passwords.go:119:14:119:45 | ...+... | passwords.go:118:6:118:50 | SSA def(password1) | passwords.go:119:14:119:45 | ...+... | $@ flows to a logging call. | passwords.go:118:6:118:50 | SSA def(password1) | Sensitive data returned by an access to password1 | +| passwords.go:129:14:129:19 | config | passwords.go:21:2:21:23 | SSA def(password) | passwords.go:129:14:129:19 | config | $@ flows to a logging call. | passwords.go:21:2:21:23 | SSA def(password) | Sensitive data returned by an access to password | +| passwords.go:129:14:129:19 | config | passwords.go:123:3:123:14 | key-value pair | passwords.go:129:14:129:19 | config | $@ flows to a logging call. | passwords.go:123:3:123:14 | key-value pair | Sensitive data returned by an access to password | | passwords.go:129:14:129:19 | config | passwords.go:123:13:123:14 | x3 | passwords.go:129:14:129:19 | config | $@ flows to a logging call. | passwords.go:123:13:123:14 | x3 | Sensitive data returned by an access to password | | passwords.go:129:14:129:19 | config | passwords.go:126:13:126:25 | call to getPassword | passwords.go:129:14:129:19 | config | $@ flows to a logging call. | passwords.go:126:13:126:25 | call to getPassword | Sensitive data returned by a call to getPassword | -| passwords.go:130:14:130:21 | selection of x | passwords.go:21:2:21:9 | SSA def(password) | passwords.go:130:14:130:21 | selection of x | $@ flows to a logging call. | passwords.go:21:2:21:9 | SSA def(password) | Sensitive data returned by an access to password | +| passwords.go:130:14:130:21 | selection of x | passwords.go:21:2:21:23 | SSA def(password) | passwords.go:130:14:130:21 | selection of x | $@ flows to a logging call. | passwords.go:21:2:21:23 | SSA def(password) | Sensitive data returned by an access to password | | passwords.go:131:14:131:21 | selection of y | passwords.go:126:13:126:25 | call to getPassword | passwords.go:131:14:131:21 | selection of y | $@ flows to a logging call. | passwords.go:126:13:126:25 | call to getPassword | Sensitive data returned by a call to getPassword | -| protobuf.go:14:14:14:35 | call to GetDescription | protobuf.go:9:2:9:9 | SSA def(password) | protobuf.go:14:14:14:35 | call to GetDescription | $@ flows to a logging call. | protobuf.go:9:2:9:9 | SSA def(password) | Sensitive data returned by an access to password | +| protobuf.go:14:14:14:35 | call to GetDescription | protobuf.go:9:2:9:23 | SSA def(password) | protobuf.go:14:14:14:35 | call to GetDescription | $@ flows to a logging call. | protobuf.go:9:2:9:23 | SSA def(password) | Sensitive data returned by an access to password | +| server1.go:19:15:19:19 | user3 | server1.go:17:4:17:63 | key-value pair | server1.go:19:15:19:19 | user3 | $@ flows to a logging call. | server1.go:17:4:17:63 | key-value pair | Sensitive data returned by an access to password | edges -| klog.go:21:3:26:3 | range statement[1] | klog.go:22:27:22:33 | headers | provenance | | -| klog.go:21:30:21:37 | selection of Header | klog.go:21:3:26:3 | range statement[1] | provenance | Src:MaD:11 Config | -| klog.go:22:4:25:4 | range statement[1] | klog.go:23:15:23:20 | header | provenance | | -| klog.go:22:27:22:33 | headers | klog.go:22:4:25:4 | range statement[1] | provenance | Config | +| klog.go:21:3:26:3 | extract:1 range statement | klog.go:22:27:22:33 | headers | provenance | | +| klog.go:21:30:21:37 | selection of Header | klog.go:21:3:26:3 | extract:1 range statement | provenance | Src:MaD:11 Config | +| klog.go:22:4:25:4 | extract:1 range statement | klog.go:23:15:23:20 | header | provenance | | +| klog.go:22:27:22:33 | headers | klog.go:22:4:25:4 | extract:1 range statement | provenance | Config | | klog.go:29:13:29:20 | selection of Header | klog.go:29:13:29:41 | call to Get | provenance | Src:MaD:11 Config | -| main.go:17:2:17:9 | SSA def(password) | main.go:19:12:19:19 | password | provenance | | -| main.go:17:2:17:9 | SSA def(password) | main.go:20:19:20:26 | password | provenance | | -| main.go:17:2:17:9 | SSA def(password) | main.go:21:13:21:20 | password | provenance | Sink:MaD:6 | -| main.go:17:2:17:9 | SSA def(password) | main.go:22:14:22:21 | password | provenance | | -| main.go:17:2:17:9 | SSA def(password) | main.go:24:13:24:20 | password | provenance | | -| main.go:17:2:17:9 | SSA def(password) | main.go:27:20:27:27 | password | provenance | | -| main.go:17:2:17:9 | SSA def(password) | main.go:30:14:30:21 | password | provenance | Sink:MaD:3 | -| main.go:17:2:17:9 | SSA def(password) | main.go:33:15:33:22 | password | provenance | | -| main.go:17:2:17:9 | SSA def(password) | main.go:36:13:36:20 | password | provenance | | -| main.go:17:2:17:9 | SSA def(password) | main.go:39:20:39:27 | password | provenance | | -| main.go:17:2:17:9 | SSA def(password) | main.go:42:14:42:21 | password | provenance | Sink:MaD:5 | -| main.go:17:2:17:9 | SSA def(password) | main.go:45:15:45:22 | password | provenance | | -| main.go:17:2:17:9 | SSA def(password) | main.go:47:16:47:23 | password | provenance | Sink:MaD:4 | -| main.go:17:2:17:9 | SSA def(password) | main.go:51:10:51:17 | password | provenance | | -| main.go:17:2:17:9 | SSA def(password) | main.go:51:10:51:17 | password | provenance | | +| main.go:17:2:17:23 | SSA def(password) | main.go:19:12:19:19 | password | provenance | | +| main.go:17:2:17:23 | SSA def(password) | main.go:20:19:20:26 | password | provenance | | +| main.go:17:2:17:23 | SSA def(password) | main.go:21:13:21:20 | password | provenance | Sink:MaD:6 | +| main.go:17:2:17:23 | SSA def(password) | main.go:22:14:22:21 | password | provenance | | +| main.go:17:2:17:23 | SSA def(password) | main.go:24:13:24:20 | password | provenance | | +| main.go:17:2:17:23 | SSA def(password) | main.go:27:20:27:27 | password | provenance | | +| main.go:17:2:17:23 | SSA def(password) | main.go:30:14:30:21 | password | provenance | Sink:MaD:3 | +| main.go:17:2:17:23 | SSA def(password) | main.go:33:15:33:22 | password | provenance | | +| main.go:17:2:17:23 | SSA def(password) | main.go:36:13:36:20 | password | provenance | | +| main.go:17:2:17:23 | SSA def(password) | main.go:39:20:39:27 | password | provenance | | +| main.go:17:2:17:23 | SSA def(password) | main.go:42:14:42:21 | password | provenance | Sink:MaD:5 | +| main.go:17:2:17:23 | SSA def(password) | main.go:45:15:45:22 | password | provenance | | +| main.go:17:2:17:23 | SSA def(password) | main.go:47:16:47:23 | password | provenance | Sink:MaD:4 | +| main.go:17:2:17:23 | SSA def(password) | main.go:51:10:51:17 | password | provenance | | +| main.go:17:2:17:23 | SSA def(password) | main.go:51:10:51:17 | password | provenance | | | main.go:51:10:51:17 | password | main.go:52:17:52:24 | password | provenance | | | main.go:51:10:51:17 | password | main.go:52:17:52:24 | password | provenance | | | main.go:52:17:52:24 | password | main.go:53:11:53:18 | password | provenance | | @@ -97,17 +102,18 @@ edges | main.go:86:2:86:7 | fields [postupdate] | main.go:87:29:87:34 | fields | provenance | Sink:MaD:2 | | main.go:86:19:86:26 | password | main.go:86:2:86:7 | fields [postupdate] | provenance | Config | | main.go:86:19:86:26 | password | main.go:90:35:90:42 | password | provenance | Sink:MaD:1 | -| overrides.go:8:2:8:9 | SSA def(password) | overrides.go:9:9:9:16 | password | provenance | | +| overrides.go:8:2:8:40 | SSA def(password) | overrides.go:9:9:9:16 | password | provenance | | | overrides.go:9:9:9:16 | password | overrides.go:13:14:13:23 | call to String | provenance | | -| passwords.go:8:12:8:12 | SSA def(x) | passwords.go:9:14:9:14 | x | provenance | | -| passwords.go:21:2:21:9 | SSA def(password) | passwords.go:25:14:25:21 | password | provenance | | -| passwords.go:21:2:21:9 | SSA def(password) | passwords.go:30:8:30:15 | password | provenance | | -| passwords.go:21:2:21:9 | SSA def(password) | passwords.go:33:13:33:20 | password | provenance | | -| passwords.go:21:2:21:9 | SSA def(password) | passwords.go:36:28:36:35 | password | provenance | | -| passwords.go:30:8:30:15 | password | passwords.go:8:12:8:12 | SSA def(x) | provenance | | +| passwords.go:8:22:10:1 | SSA def(x) | passwords.go:9:14:9:14 | x | provenance | | +| passwords.go:21:2:21:23 | SSA def(password) | passwords.go:25:14:25:21 | password | provenance | | +| passwords.go:21:2:21:23 | SSA def(password) | passwords.go:30:8:30:15 | password | provenance | | +| passwords.go:21:2:21:23 | SSA def(password) | passwords.go:33:13:33:20 | password | provenance | | +| passwords.go:21:2:21:23 | SSA def(password) | passwords.go:36:28:36:35 | password | provenance | | +| passwords.go:30:8:30:15 | password | passwords.go:8:22:10:1 | SSA def(x) | provenance | | | passwords.go:36:28:36:35 | password | passwords.go:36:14:36:35 | ...+... | provenance | Config | | passwords.go:36:28:36:35 | password | passwords.go:44:6:44:13 | password | provenance | | | passwords.go:38:10:40:2 | struct literal | passwords.go:41:14:41:17 | obj1 | provenance | | +| passwords.go:39:3:39:13 | key-value pair | passwords.go:38:10:40:2 | struct literal | provenance | Config | | passwords.go:39:13:39:13 | x | passwords.go:38:10:40:2 | struct literal | provenance | Config | | passwords.go:43:10:45:2 | struct literal | passwords.go:46:14:46:17 | obj2 | provenance | | | passwords.go:44:6:44:13 | password | passwords.go:43:10:45:2 | struct literal | provenance | Config | @@ -117,8 +123,10 @@ edges | passwords.go:50:11:50:18 | password | passwords.go:110:34:110:41 | password | provenance | | | passwords.go:50:11:50:18 | password | passwords.go:115:33:115:40 | password | provenance | | | passwords.go:50:11:50:18 | password | passwords.go:125:13:125:20 | password | provenance | | -| passwords.go:52:2:52:15 | SSA def(fixed_password) | passwords.go:53:14:53:27 | fixed_password | provenance | | +| passwords.go:52:2:52:44 | SSA def(fixed_password) | passwords.go:53:14:53:27 | fixed_password | provenance | | +| passwords.go:65:25:65:43 | key-value pair | passwords.go:65:14:65:44 | struct literal | provenance | Config | | passwords.go:88:19:90:2 | struct literal | passwords.go:91:14:91:26 | utilityObject | provenance | | +| passwords.go:89:3:89:36 | key-value pair | passwords.go:88:19:90:2 | struct literal | provenance | Config | | passwords.go:89:16:89:36 | call to make | passwords.go:88:19:90:2 | struct literal | provenance | Config | | passwords.go:104:33:104:40 | password | passwords.go:104:15:104:40 | ...+... | provenance | Config | | passwords.go:104:33:104:40 | password | passwords.go:110:34:110:41 | password | provenance | | @@ -129,12 +137,13 @@ edges | passwords.go:110:34:110:41 | password | passwords.go:125:13:125:20 | password | provenance | | | passwords.go:115:33:115:40 | password | passwords.go:115:15:115:40 | ...+... | provenance | Config | | passwords.go:115:33:115:40 | password | passwords.go:125:13:125:20 | password | provenance | | -| passwords.go:118:6:118:14 | SSA def(password1) | passwords.go:119:28:119:36 | password1 | provenance | | +| passwords.go:118:6:118:50 | SSA def(password1) | passwords.go:119:28:119:36 | password1 | provenance | | | passwords.go:119:28:119:36 | password1 | passwords.go:119:28:119:45 | call to String | provenance | Config | | passwords.go:119:28:119:45 | call to String | passwords.go:119:14:119:45 | ...+... | provenance | Config | | passwords.go:122:12:127:2 | struct literal | passwords.go:129:14:129:19 | config | provenance | | | passwords.go:122:12:127:2 | struct literal [x] | passwords.go:130:14:130:19 | config [x] | provenance | | | passwords.go:122:12:127:2 | struct literal [y] | passwords.go:131:14:131:19 | config [y] | provenance | | +| passwords.go:123:3:123:14 | key-value pair | passwords.go:122:12:127:2 | struct literal | provenance | Config | | passwords.go:123:13:123:14 | x3 | passwords.go:122:12:127:2 | struct literal | provenance | Config | | passwords.go:125:13:125:20 | password | passwords.go:122:12:127:2 | struct literal | provenance | Config | | passwords.go:125:13:125:20 | password | passwords.go:122:12:127:2 | struct literal [x] | provenance | | @@ -142,15 +151,17 @@ edges | passwords.go:126:13:126:25 | call to getPassword | passwords.go:122:12:127:2 | struct literal [y] | provenance | | | passwords.go:130:14:130:19 | config [x] | passwords.go:130:14:130:21 | selection of x | provenance | | | passwords.go:131:14:131:19 | config [y] | passwords.go:131:14:131:21 | selection of y | provenance | | -| protobuf.go:9:2:9:9 | SSA def(password) | protobuf.go:12:22:12:29 | password | provenance | | -| protobuf.go:12:2:12:6 | implicit dereference [postupdate] [Description] | protobuf.go:12:2:12:6 | query [postupdate] [pointer, Description] | provenance | | +| protobuf.go:9:2:9:23 | SSA def(password) | protobuf.go:12:22:12:29 | password | provenance | | +| protobuf.go:12:2:12:6 | implicit-deref query [postupdate] [Description] | protobuf.go:12:2:12:6 | query [postupdate] [pointer, Description] | provenance | | | protobuf.go:12:2:12:6 | query [postupdate] [pointer, Description] | protobuf.go:14:14:14:18 | query [pointer, Description] | provenance | | -| protobuf.go:12:22:12:29 | password | protobuf.go:12:2:12:6 | implicit dereference [postupdate] [Description] | provenance | | +| protobuf.go:12:22:12:29 | password | protobuf.go:12:2:12:6 | implicit-deref query [postupdate] [Description] | provenance | | | protobuf.go:14:14:14:18 | query [pointer, Description] | protobuf.go:14:14:14:35 | call to GetDescription | provenance | | -| protobuf.go:14:14:14:18 | query [pointer, Description] | protos/query/query.pb.go:117:7:117:7 | SSA def(x) [pointer, Description] | provenance | | -| protos/query/query.pb.go:117:7:117:7 | SSA def(x) [pointer, Description] | protos/query/query.pb.go:119:10:119:10 | x [pointer, Description] | provenance | | -| protos/query/query.pb.go:119:10:119:10 | implicit dereference [Description] | protos/query/query.pb.go:119:10:119:22 | selection of Description | provenance | | -| protos/query/query.pb.go:119:10:119:10 | x [pointer, Description] | protos/query/query.pb.go:119:10:119:10 | implicit dereference [Description] | provenance | | +| protobuf.go:14:14:14:18 | query [pointer, Description] | protos/query/query.pb.go:117:41:122:1 | SSA def(x) [pointer, Description] | provenance | | +| protos/query/query.pb.go:117:41:122:1 | SSA def(x) [pointer, Description] | protos/query/query.pb.go:119:10:119:10 | x [pointer, Description] | provenance | | +| protos/query/query.pb.go:119:10:119:10 | implicit-deref x [Description] | protos/query/query.pb.go:119:10:119:22 | selection of Description | provenance | | +| protos/query/query.pb.go:119:10:119:10 | x [pointer, Description] | protos/query/query.pb.go:119:10:119:10 | implicit-deref x [Description] | provenance | | +| server1.go:16:15:18:3 | struct literal | server1.go:19:15:19:19 | user3 | provenance | | +| server1.go:17:4:17:63 | key-value pair | server1.go:16:15:18:3 | struct literal | provenance | Config | models | 1 | Sink: group:logrus; ; false; WithField; ; ; Argument[0..1]; log-injection; manual | | 2 | Sink: group:logrus; ; false; WithFields; ; ; Argument[0]; log-injection; manual | @@ -164,14 +175,14 @@ models | 10 | Sink: log; Logger; true; Printf; ; ; Argument[0..1]; log-injection; manual | | 11 | Source: net/http; Request; true; Header; ; ; ; remote; manual | nodes -| klog.go:21:3:26:3 | range statement[1] | semmle.label | range statement[1] | +| klog.go:21:3:26:3 | extract:1 range statement | semmle.label | extract:1 range statement | | klog.go:21:30:21:37 | selection of Header | semmle.label | selection of Header | -| klog.go:22:4:25:4 | range statement[1] | semmle.label | range statement[1] | +| klog.go:22:4:25:4 | extract:1 range statement | semmle.label | extract:1 range statement | | klog.go:22:27:22:33 | headers | semmle.label | headers | | klog.go:23:15:23:20 | header | semmle.label | header | | klog.go:29:13:29:20 | selection of Header | semmle.label | selection of Header | | klog.go:29:13:29:41 | call to Get | semmle.label | call to Get | -| main.go:17:2:17:9 | SSA def(password) | semmle.label | SSA def(password) | +| main.go:17:2:17:23 | SSA def(password) | semmle.label | SSA def(password) | | main.go:19:12:19:19 | password | semmle.label | password | | main.go:20:19:20:26 | password | semmle.label | password | | main.go:21:13:21:20 | password | semmle.label | password | @@ -209,12 +220,12 @@ nodes | main.go:86:19:86:26 | password | semmle.label | password | | main.go:87:29:87:34 | fields | semmle.label | fields | | main.go:90:35:90:42 | password | semmle.label | password | -| overrides.go:8:2:8:9 | SSA def(password) | semmle.label | SSA def(password) | +| overrides.go:8:2:8:40 | SSA def(password) | semmle.label | SSA def(password) | | overrides.go:9:9:9:16 | password | semmle.label | password | | overrides.go:13:14:13:23 | call to String | semmle.label | call to String | -| passwords.go:8:12:8:12 | SSA def(x) | semmle.label | SSA def(x) | +| passwords.go:8:22:10:1 | SSA def(x) | semmle.label | SSA def(x) | | passwords.go:9:14:9:14 | x | semmle.label | x | -| passwords.go:21:2:21:9 | SSA def(password) | semmle.label | SSA def(password) | +| passwords.go:21:2:21:23 | SSA def(password) | semmle.label | SSA def(password) | | passwords.go:25:14:25:21 | password | semmle.label | password | | passwords.go:26:14:26:23 | selection of password | semmle.label | selection of password | | passwords.go:27:14:27:26 | call to getPassword | semmle.label | call to getPassword | @@ -224,15 +235,19 @@ nodes | passwords.go:36:14:36:35 | ...+... | semmle.label | ...+... | | passwords.go:36:28:36:35 | password | semmle.label | password | | passwords.go:38:10:40:2 | struct literal | semmle.label | struct literal | +| passwords.go:39:3:39:13 | key-value pair | semmle.label | key-value pair | | passwords.go:39:13:39:13 | x | semmle.label | x | | passwords.go:41:14:41:17 | obj1 | semmle.label | obj1 | | passwords.go:43:10:45:2 | struct literal | semmle.label | struct literal | | passwords.go:44:6:44:13 | password | semmle.label | password | | passwords.go:46:14:46:17 | obj2 | semmle.label | obj2 | | passwords.go:50:11:50:18 | password | semmle.label | password | -| passwords.go:52:2:52:15 | SSA def(fixed_password) | semmle.label | SSA def(fixed_password) | +| passwords.go:52:2:52:44 | SSA def(fixed_password) | semmle.label | SSA def(fixed_password) | | passwords.go:53:14:53:27 | fixed_password | semmle.label | fixed_password | +| passwords.go:65:14:65:44 | struct literal | semmle.label | struct literal | +| passwords.go:65:25:65:43 | key-value pair | semmle.label | key-value pair | | passwords.go:88:19:90:2 | struct literal | semmle.label | struct literal | +| passwords.go:89:3:89:36 | key-value pair | semmle.label | key-value pair | | passwords.go:89:16:89:36 | call to make | semmle.label | call to make | | passwords.go:91:14:91:26 | utilityObject | semmle.label | utilityObject | | passwords.go:94:23:94:28 | secret | semmle.label | secret | @@ -242,13 +257,14 @@ nodes | passwords.go:110:34:110:41 | password | semmle.label | password | | passwords.go:115:15:115:40 | ...+... | semmle.label | ...+... | | passwords.go:115:33:115:40 | password | semmle.label | password | -| passwords.go:118:6:118:14 | SSA def(password1) | semmle.label | SSA def(password1) | +| passwords.go:118:6:118:50 | SSA def(password1) | semmle.label | SSA def(password1) | | passwords.go:119:14:119:45 | ...+... | semmle.label | ...+... | | passwords.go:119:28:119:36 | password1 | semmle.label | password1 | | passwords.go:119:28:119:45 | call to String | semmle.label | call to String | | passwords.go:122:12:127:2 | struct literal | semmle.label | struct literal | | passwords.go:122:12:127:2 | struct literal [x] | semmle.label | struct literal [x] | | passwords.go:122:12:127:2 | struct literal [y] | semmle.label | struct literal [y] | +| passwords.go:123:3:123:14 | key-value pair | semmle.label | key-value pair | | passwords.go:123:13:123:14 | x3 | semmle.label | x3 | | passwords.go:125:13:125:20 | password | semmle.label | password | | passwords.go:126:13:126:25 | call to getPassword | semmle.label | call to getPassword | @@ -257,15 +273,23 @@ nodes | passwords.go:130:14:130:21 | selection of x | semmle.label | selection of x | | passwords.go:131:14:131:19 | config [y] | semmle.label | config [y] | | passwords.go:131:14:131:21 | selection of y | semmle.label | selection of y | -| protobuf.go:9:2:9:9 | SSA def(password) | semmle.label | SSA def(password) | -| protobuf.go:12:2:12:6 | implicit dereference [postupdate] [Description] | semmle.label | implicit dereference [postupdate] [Description] | +| protobuf.go:9:2:9:23 | SSA def(password) | semmle.label | SSA def(password) | +| protobuf.go:12:2:12:6 | implicit-deref query [postupdate] [Description] | semmle.label | implicit-deref query [postupdate] [Description] | | protobuf.go:12:2:12:6 | query [postupdate] [pointer, Description] | semmle.label | query [postupdate] [pointer, Description] | | protobuf.go:12:22:12:29 | password | semmle.label | password | | protobuf.go:14:14:14:18 | query [pointer, Description] | semmle.label | query [pointer, Description] | | protobuf.go:14:14:14:35 | call to GetDescription | semmle.label | call to GetDescription | -| protos/query/query.pb.go:117:7:117:7 | SSA def(x) [pointer, Description] | semmle.label | SSA def(x) [pointer, Description] | -| protos/query/query.pb.go:119:10:119:10 | implicit dereference [Description] | semmle.label | implicit dereference [Description] | +| protos/query/query.pb.go:117:41:122:1 | SSA def(x) [pointer, Description] | semmle.label | SSA def(x) [pointer, Description] | +| protos/query/query.pb.go:119:10:119:10 | implicit-deref x [Description] | semmle.label | implicit-deref x [Description] | | protos/query/query.pb.go:119:10:119:10 | x [pointer, Description] | semmle.label | x [pointer, Description] | | protos/query/query.pb.go:119:10:119:22 | selection of Description | semmle.label | selection of Description | +| server1.go:16:15:18:3 | struct literal | semmle.label | struct literal | +| server1.go:17:4:17:63 | key-value pair | semmle.label | key-value pair | +| server1.go:19:15:19:19 | user3 | semmle.label | user3 | subpaths -| protobuf.go:14:14:14:18 | query [pointer, Description] | protos/query/query.pb.go:117:7:117:7 | SSA def(x) [pointer, Description] | protos/query/query.pb.go:119:10:119:22 | selection of Description | protobuf.go:14:14:14:35 | call to GetDescription | +| protobuf.go:14:14:14:18 | query [pointer, Description] | protos/query/query.pb.go:117:41:122:1 | SSA def(x) [pointer, Description] | protos/query/query.pb.go:119:10:119:22 | selection of Description | protobuf.go:14:14:14:35 | call to GetDescription | +testFailures +| passwords.go:65:14:65:44 | struct literal | Unexpected result: Alert | +| passwords.go:65:25:65:43 | key-value pair | Unexpected result: Alert | +| server1.go:17:4:17:63 | key-value pair | Unexpected result: Source | +| server1.go:19:15:19:19 | user3 | Unexpected result: Alert | diff --git a/go/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.expected b/go/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.expected index 00eb67fea0b..17c258a601b 100644 --- a/go/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.expected +++ b/go/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.expected @@ -1,29 +1,29 @@ -| encryption.go:30:2:30:36 | call to Encrypt | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | -| encryption.go:34:2:34:42 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | -| encryption.go:38:2:38:42 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | -| encryption.go:42:2:42:42 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | -| encryption.go:46:2:46:42 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | -| encryption.go:50:2:50:47 | call to CryptBlocks | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | -| encryption.go:54:2:54:45 | call to XORKeyStream | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | -| encryption.go:56:22:56:91 | struct literal | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | -| encryption.go:59:21:59:68 | &... [postupdate] | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | -| encryption.go:59:22:59:68 | struct literal | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | -| encryption.go:59:22:59:68 | struct literal [postupdate] | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | -| encryption.go:60:10:60:24 | ctrStreamWriter [postupdate] | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | -| encryption.go:65:2:65:45 | call to XORKeyStream | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | -| encryption.go:69:2:69:45 | call to XORKeyStream | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | -| encryption.go:76:2:76:32 | call to Encrypt | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | -| encryption.go:80:2:80:38 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | -| encryption.go:84:2:84:38 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | -| encryption.go:88:2:88:42 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | -| encryption.go:92:2:92:42 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | -| encryption.go:96:2:96:43 | call to CryptBlocks | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | -| encryption.go:100:2:100:41 | call to XORKeyStream | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | -| encryption.go:102:22:102:87 | struct literal | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | -| encryption.go:105:21:105:68 | &... [postupdate] | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | -| encryption.go:105:22:105:68 | struct literal | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | -| encryption.go:105:22:105:68 | struct literal [postupdate] | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | -| encryption.go:106:10:106:24 | ctrStreamWriter [postupdate] | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | -| encryption.go:111:2:111:45 | call to XORKeyStream | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | -| encryption.go:115:2:115:45 | call to XORKeyStream | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | +| encryption.go:30:2:30:36 | call to Encrypt | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | extract:0 ... := ... | The cryptographic algorithm DES | +| encryption.go:34:2:34:42 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | extract:0 ... := ... | The cryptographic algorithm DES | +| encryption.go:38:2:38:42 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | extract:0 ... := ... | The cryptographic algorithm DES | +| encryption.go:42:2:42:42 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | extract:0 ... := ... | The cryptographic algorithm DES | +| encryption.go:46:2:46:42 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | extract:0 ... := ... | The cryptographic algorithm DES | +| encryption.go:50:2:50:47 | call to CryptBlocks | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | extract:0 ... := ... | The cryptographic algorithm DES | +| encryption.go:54:2:54:45 | call to XORKeyStream | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | extract:0 ... := ... | The cryptographic algorithm DES | +| encryption.go:56:22:56:91 | struct literal | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | extract:0 ... := ... | The cryptographic algorithm DES | +| encryption.go:59:21:59:68 | &... [postupdate] | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | extract:0 ... := ... | The cryptographic algorithm DES | +| encryption.go:59:22:59:68 | struct literal | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | extract:0 ... := ... | The cryptographic algorithm DES | +| encryption.go:59:22:59:68 | struct literal [postupdate] | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | extract:0 ... := ... | The cryptographic algorithm DES | +| encryption.go:60:10:60:24 | ctrStreamWriter [postupdate] | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | extract:0 ... := ... | The cryptographic algorithm DES | +| encryption.go:65:2:65:45 | call to XORKeyStream | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | extract:0 ... := ... | The cryptographic algorithm DES | +| encryption.go:69:2:69:45 | call to XORKeyStream | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | extract:0 ... := ... | The cryptographic algorithm DES | +| encryption.go:76:2:76:32 | call to Encrypt | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | extract:0 ... := ... | The cryptographic algorithm TRIPLEDES | +| encryption.go:80:2:80:38 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | extract:0 ... := ... | The cryptographic algorithm TRIPLEDES | +| encryption.go:84:2:84:38 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | extract:0 ... := ... | The cryptographic algorithm TRIPLEDES | +| encryption.go:88:2:88:42 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | extract:0 ... := ... | The cryptographic algorithm TRIPLEDES | +| encryption.go:92:2:92:42 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | extract:0 ... := ... | The cryptographic algorithm TRIPLEDES | +| encryption.go:96:2:96:43 | call to CryptBlocks | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | extract:0 ... := ... | The cryptographic algorithm TRIPLEDES | +| encryption.go:100:2:100:41 | call to XORKeyStream | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | extract:0 ... := ... | The cryptographic algorithm TRIPLEDES | +| encryption.go:102:22:102:87 | struct literal | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | extract:0 ... := ... | The cryptographic algorithm TRIPLEDES | +| encryption.go:105:21:105:68 | &... [postupdate] | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | extract:0 ... := ... | The cryptographic algorithm TRIPLEDES | +| encryption.go:105:22:105:68 | struct literal | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | extract:0 ... := ... | The cryptographic algorithm TRIPLEDES | +| encryption.go:105:22:105:68 | struct literal [postupdate] | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | extract:0 ... := ... | The cryptographic algorithm TRIPLEDES | +| encryption.go:106:10:106:24 | ctrStreamWriter [postupdate] | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | extract:0 ... := ... | The cryptographic algorithm TRIPLEDES | +| encryption.go:111:2:111:45 | call to XORKeyStream | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | extract:0 ... := ... | The cryptographic algorithm TRIPLEDES | +| encryption.go:115:2:115:45 | call to XORKeyStream | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | extract:0 ... := ... | The cryptographic algorithm TRIPLEDES | | encryption.go:166:2:166:33 | call to XORKeyStream | $@ is broken or weak, and should not be used. | encryption.go:166:2:166:33 | call to XORKeyStream | The cryptographic algorithm RC4 | diff --git a/go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.expected b/go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.expected index c1f41d118e7..5fc10903ccb 100644 --- a/go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.expected +++ b/go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.expected @@ -5,15 +5,15 @@ edges | go-jose.v3.go:25:16:25:20 | selection of URL | go-jose.v3.go:25:16:25:28 | call to Query | provenance | Src:MaD:3 MaD:5 | | go-jose.v3.go:25:16:25:28 | call to Query | go-jose.v3.go:25:16:25:47 | call to Get | provenance | MaD:6 | | go-jose.v3.go:25:16:25:47 | call to Get | go-jose.v3.go:26:15:26:25 | signedToken | provenance | | -| go-jose.v3.go:26:15:26:25 | signedToken | go-jose.v3.go:29:19:29:29 | SSA def(signedToken) | provenance | | -| go-jose.v3.go:29:19:29:29 | SSA def(signedToken) | go-jose.v3.go:31:37:31:47 | signedToken | provenance | | -| go-jose.v3.go:31:2:31:48 | ... := ...[0] | go-jose.v3.go:33:12:33:23 | DecodedToken | provenance | Sink:MaD:2 | -| go-jose.v3.go:31:37:31:47 | signedToken | go-jose.v3.go:31:2:31:48 | ... := ...[0] | provenance | MaD:4 | +| go-jose.v3.go:26:15:26:25 | signedToken | go-jose.v3.go:29:39:37:1 | SSA def(signedToken) | provenance | | +| go-jose.v3.go:29:39:37:1 | SSA def(signedToken) | go-jose.v3.go:31:37:31:47 | signedToken | provenance | | +| go-jose.v3.go:31:2:31:48 | extract:0 ... := ... | go-jose.v3.go:33:12:33:23 | DecodedToken | provenance | Sink:MaD:2 | +| go-jose.v3.go:31:37:31:47 | signedToken | go-jose.v3.go:31:2:31:48 | extract:0 ... := ... | provenance | MaD:4 | | golang-jwt-v5.go:28:16:28:20 | selection of URL | golang-jwt-v5.go:28:16:28:28 | call to Query | provenance | Src:MaD:3 MaD:5 | | golang-jwt-v5.go:28:16:28:28 | call to Query | golang-jwt-v5.go:28:16:28:47 | call to Get | provenance | MaD:6 | | golang-jwt-v5.go:28:16:28:47 | call to Get | golang-jwt-v5.go:29:25:29:35 | signedToken | provenance | | -| golang-jwt-v5.go:29:25:29:35 | signedToken | golang-jwt-v5.go:32:29:32:39 | SSA def(signedToken) | provenance | | -| golang-jwt-v5.go:32:29:32:39 | SSA def(signedToken) | golang-jwt-v5.go:34:58:34:68 | signedToken | provenance | Sink:MaD:1 | +| golang-jwt-v5.go:29:25:29:35 | signedToken | golang-jwt-v5.go:32:49:40:1 | SSA def(signedToken) | provenance | | +| golang-jwt-v5.go:32:49:40:1 | SSA def(signedToken) | golang-jwt-v5.go:34:58:34:68 | signedToken | provenance | Sink:MaD:1 | models | 1 | Sink: github.com/golang-jwt/jwt; Parser; true; ParseUnverified; ; ; Argument[0]; jwt; manual | | 2 | Sink: group:go-jose/jwt; JSONWebToken; true; UnsafeClaimsWithoutVerification; ; ; Argument[receiver]; jwt; manual | @@ -26,14 +26,14 @@ nodes | go-jose.v3.go:25:16:25:28 | call to Query | semmle.label | call to Query | | go-jose.v3.go:25:16:25:47 | call to Get | semmle.label | call to Get | | go-jose.v3.go:26:15:26:25 | signedToken | semmle.label | signedToken | -| go-jose.v3.go:29:19:29:29 | SSA def(signedToken) | semmle.label | SSA def(signedToken) | -| go-jose.v3.go:31:2:31:48 | ... := ...[0] | semmle.label | ... := ...[0] | +| go-jose.v3.go:29:39:37:1 | SSA def(signedToken) | semmle.label | SSA def(signedToken) | +| go-jose.v3.go:31:2:31:48 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | go-jose.v3.go:31:37:31:47 | signedToken | semmle.label | signedToken | | go-jose.v3.go:33:12:33:23 | DecodedToken | semmle.label | DecodedToken | | golang-jwt-v5.go:28:16:28:20 | selection of URL | semmle.label | selection of URL | | golang-jwt-v5.go:28:16:28:28 | call to Query | semmle.label | call to Query | | golang-jwt-v5.go:28:16:28:47 | call to Get | semmle.label | call to Get | | golang-jwt-v5.go:29:25:29:35 | signedToken | semmle.label | signedToken | -| golang-jwt-v5.go:32:29:32:39 | SSA def(signedToken) | semmle.label | SSA def(signedToken) | +| golang-jwt-v5.go:32:49:40:1 | SSA def(signedToken) | semmle.label | SSA def(signedToken) | | golang-jwt-v5.go:34:58:34:68 | signedToken | semmle.label | signedToken | subpaths diff --git a/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.expected b/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.expected index bdcf83b8935..22005b1ac6e 100644 --- a/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.expected +++ b/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.expected @@ -5,8 +5,8 @@ edges | UncontrolledAllocationSizeBad.go:11:12:11:24 | call to Query | UncontrolledAllocationSizeBad.go:13:15:13:20 | source | provenance | | | UncontrolledAllocationSizeBad.go:13:15:13:20 | source | UncontrolledAllocationSizeBad.go:13:15:13:29 | call to Get | provenance | MaD:3 | | UncontrolledAllocationSizeBad.go:13:15:13:29 | call to Get | UncontrolledAllocationSizeBad.go:14:28:14:36 | sourceStr | provenance | | -| UncontrolledAllocationSizeBad.go:14:2:14:37 | ... := ...[0] | UncontrolledAllocationSizeBad.go:20:27:20:30 | sink | provenance | | -| UncontrolledAllocationSizeBad.go:14:28:14:36 | sourceStr | UncontrolledAllocationSizeBad.go:14:2:14:37 | ... := ...[0] | provenance | Config | +| UncontrolledAllocationSizeBad.go:14:2:14:37 | extract:0 ... := ... | UncontrolledAllocationSizeBad.go:20:27:20:30 | sink | provenance | | +| UncontrolledAllocationSizeBad.go:14:28:14:36 | sourceStr | UncontrolledAllocationSizeBad.go:14:2:14:37 | extract:0 ... := ... | provenance | Config | models | 1 | Source: net/http; Request; true; URL; ; ; ; remote; manual | | 2 | Summary: net/url; URL; true; Query; ; ; Argument[receiver]; ReturnValue; taint; manual | @@ -16,7 +16,7 @@ nodes | UncontrolledAllocationSizeBad.go:11:12:11:24 | call to Query | semmle.label | call to Query | | UncontrolledAllocationSizeBad.go:13:15:13:20 | source | semmle.label | source | | UncontrolledAllocationSizeBad.go:13:15:13:29 | call to Get | semmle.label | call to Get | -| UncontrolledAllocationSizeBad.go:14:2:14:37 | ... := ...[0] | semmle.label | ... := ...[0] | +| UncontrolledAllocationSizeBad.go:14:2:14:37 | extract:0 ... := ... | semmle.label | extract:0 ... := ... | | UncontrolledAllocationSizeBad.go:14:28:14:36 | sourceStr | semmle.label | sourceStr | | UncontrolledAllocationSizeBad.go:20:27:20:30 | sink | semmle.label | sink | subpaths diff --git a/go/ql/test/query-tests/Security/CWE-918/RequestForgery.expected b/go/ql/test/query-tests/Security/CWE-918/RequestForgery.expected index 15b0e179e98..9dfdcd278a4 100644 --- a/go/ql/test/query-tests/Security/CWE-918/RequestForgery.expected +++ b/go/ql/test/query-tests/Security/CWE-918/RequestForgery.expected @@ -37,9 +37,9 @@ edges | tst.go:11:13:11:35 | call to FormValue | tst.go:39:11:39:29 | ...+... | provenance | Src:MaD:1 | | tst.go:11:13:11:35 | call to FormValue | tst.go:41:11:41:40 | ...+... | provenance | Src:MaD:1 | | tst.go:11:13:11:35 | call to FormValue | tst.go:48:11:48:18 | tainted2 | provenance | Src:MaD:1 | -| tst.go:48:2:48:2 | implicit dereference [postupdate] | tst.go:48:2:48:2 | u [postupdate] | provenance | | +| tst.go:48:2:48:2 | implicit-deref u [postupdate] | tst.go:48:2:48:2 | u [postupdate] | provenance | | | tst.go:48:2:48:2 | u [postupdate] | tst.go:49:11:49:11 | u | provenance | | -| tst.go:48:11:48:18 | tainted2 | tst.go:48:2:48:2 | implicit dereference [postupdate] | provenance | Config | +| tst.go:48:11:48:18 | tainted2 | tst.go:48:2:48:2 | implicit-deref u [postupdate] | provenance | Config | | tst.go:48:11:48:18 | tainted2 | tst.go:48:2:48:2 | u [postupdate] | provenance | Config | | tst.go:49:11:49:11 | u | tst.go:49:11:49:20 | call to String | provenance | MaD:3 | | websocket.go:60:21:60:31 | call to Referer | websocket.go:65:27:65:40 | untrustedInput | provenance | Src:MaD:2 | @@ -71,7 +71,7 @@ nodes | tst.go:37:18:37:24 | tainted | semmle.label | tainted | | tst.go:39:11:39:29 | ...+... | semmle.label | ...+... | | tst.go:41:11:41:40 | ...+... | semmle.label | ...+... | -| tst.go:48:2:48:2 | implicit dereference [postupdate] | semmle.label | implicit dereference [postupdate] | +| tst.go:48:2:48:2 | implicit-deref u [postupdate] | semmle.label | implicit-deref u [postupdate] | | tst.go:48:2:48:2 | u [postupdate] | semmle.label | u [postupdate] | | tst.go:48:11:48:18 | tainted2 | semmle.label | tainted2 | | tst.go:49:11:49:11 | u | semmle.label | u |