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..af7aa675e8e 100644 --- a/go/ql/test/library-tests/semmle/go/IR/test.expected +++ b/go/ql/test/library-tests/semmle/go/IR/test.expected @@ -1,9 +1,9 @@ -| 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: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 | | 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 | 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 f3d27b4bf38..15139510143 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 @@ -5,40 +5,40 @@ | 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:9 | After msg | DuplicateSwitchCase.go:5:14:5:20 | Before "start" | +| DuplicateSwitchCase.go:5:7:5:20 | ...==... | DuplicateSwitchCase.go:5:7:5:20 | After ...==... [false] | | 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 | ...==... | DuplicateSwitchCase.go:5:7:5:20 | After ...==... [true] | | 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:5:14:5:20 | After "start" | DuplicateSwitchCase.go:5:7:5:20 | ...==... | +| DuplicateSwitchCase.go:6:3:6:7 | After 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 | Exceptional Exit | +| DuplicateSwitchCase.go:7:7:7:9 | After msg | DuplicateSwitchCase.go:7:14:7:20 | Before "start" | +| DuplicateSwitchCase.go:7:7:7:20 | ...==... | DuplicateSwitchCase.go:7:7:7:20 | After ...==... [false] | | 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 | ...==... | DuplicateSwitchCase.go:7:7:7:20 | After ...==... [true] | | 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:7:14:7:20 | After "start" | DuplicateSwitchCase.go:7:7:7:20 | ...==... | +| DuplicateSwitchCase.go:8:3:8:6 | After 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 | Exceptional Exit | +| DuplicateSwitchCase.go:10:3:10:7 | After panic | DuplicateSwitchCase.go:10:9:10:33 | Before "Message not understood." | +| DuplicateSwitchCase.go:10:3:10:34 | call to panic | DuplicateSwitchCase.go:3:1:12:1 | Exceptional Exit | +| DuplicateSwitchCase.go:10:9:10:33 | After "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 | block statement | | 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:14:14:14:15 | block statement | DuplicateSwitchCase.go:14:1:14:15 | Normal Exit | +| DuplicateSwitchCase.go:16:1:16:14 | Entry | DuplicateSwitchCase.go:16:13:16:14 | block statement | +| DuplicateSwitchCase.go:16:1:16:14 | After function declaration | DuplicateSwitchCase.go:0:0:0:0 | After DuplicateSwitchCase.go | | 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 | -| 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 | +| DuplicateSwitchCase.go:16:13:16:14 | block statement | DuplicateSwitchCase.go:16:1:16:14 | Normal 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: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:1:13:1 | After function declaration | equalitytests.go:0:0:0:0 | After equalitytests.go | | 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 | @@ -64,47 +64,47 @@ | 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: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: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 | ...==... 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 | After ...&&... [false] | equalitytests.go:12:9:12:40 | After ...&&... [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 | After ...&&... [false] | equalitytests.go:12:9:12:52 | After ...&&... [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 | After ...&&... [false] | equalitytests.go:12:9:12:64 | After ...&&... [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 | After ...&&... [false] | equalitytests.go:12:9:12:76 | After ...&&... | | 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: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:21:12:22 | After e1 | equalitytests.go:12:27:12:28 | Before 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: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:27:12:28 | After e2 | equalitytests.go:12:21:12:28 | ...==... | +| equalitytests.go:12:33:12:34 | After s1 | equalitytests.go:12:39:12:40 | Before 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: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:39:12:40 | After s2 | equalitytests.go:12:33:12:40 | ...==... | +| equalitytests.go:12:45:12:46 | After s3 | equalitytests.go:12:51:12:52 | Before 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: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:51:12:52 | After s4 | equalitytests.go:12:45:12:52 | ...==... | +| equalitytests.go:12:57:12:58 | After a1 | equalitytests.go:12:63:12:64 | Before 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: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:63:12:64 | After a2 | equalitytests.go:12:57:12:64 | ...==... | +| equalitytests.go:12:69:12:70 | After a3 | equalitytests.go:12:75:12:76 | Before 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 | +| equalitytests.go:12:69:12:76 | After ...==... | equalitytests.go:12:9:12:76 | After ...&&... | +| equalitytests.go:12:75:12:76 | After a4 | equalitytests.go:12:69:12:76 | ...==... | +| exprs.go:0:0:0:0 | exprs.go | exprs.go:3:1:3:29 | type declaration | | 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 | @@ -113,21 +113,21 @@ | 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:13:6:13 | After 0 | exprs.go:6:16:6:26 | Before ...+... | | 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:7:14:7:14 | After 2 | exprs.go:7:16:7:16 | Before j | +| exprs.go:7:14:7:16 | After ...*... | exprs.go:7:10:7:16 | ...+... | +| exprs.go:7:16:7:16 | After 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:8:16:8:24 | After type conversion | exprs.go:8:7:8:24 | ...+... | +| exprs.go:8:23:8:23 | After 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 | @@ -138,142 +138,142 @@ | 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: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: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:9:48:9:59 | After ...<... | exprs.go:9:41:9:59 | return statement | +| exprs.go:9:50:9:50 | After b | exprs.go:9:48:9:50 | ...*... | +| exprs.go:9:54:9:59 | After type conversion | exprs.go:9:48:9:59 | ...<... | +| exprs.go:9:58:9:58 | After 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:11:13:14:21 | struct literal | exprs.go:14:4:14:4 | Before 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:4:14:4 | After k | exprs.go:14:4:14:4 | lit-init k | +| exprs.go:14:7:14:8 | After fn | exprs.go:14:10:14:10 | Before i | +| 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 | 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:14:10:14:10 | After i | exprs.go:14:13:14:13 | Before j | +| exprs.go:14:13:14:13 | After j | exprs.go:14:16:14:19 | Before .../... | +| exprs.go:14:16:14:19 | After .../... | 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:35:15:41 | After struct1 | exprs.go:15:35:15:43 | selection of x | +| exprs.go:15:35:15:43 | After selection of x | exprs.go:15:32:15:43 | 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:15:49:15:55 | After struct2 | exprs.go:15:49:15:57 | selection of x | +| exprs.go:15:49:15:57 | After selection of x | exprs.go:15:46:15:57 | 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: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:25 | Before selection of x | exprs.go:16:17:16:23 | Before 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:16:17:16:25 | lit-index selection of x | exprs.go:16:17:16:25 | lit-init 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: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:27 | Before selection of x | exprs.go:17:19:17:25 | Before 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:19:17:27 | lit-index selection of x | exprs.go:17:19:17:27 | lit-init 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:17:33:17:36 | After arr1 | exprs.go:17:38:17:38 | Before 0 | +| exprs.go:17:33:17:39 | index expression | exprs.go:5:1:26:1 | Exceptional Exit | +| exprs.go:17:33:17:39 | After index expression | exprs.go:17:30:17:39 | key-value pair | +| exprs.go:17:38:17:38 | After 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: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 | 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 | 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:18:21:18:21 | Before s | exprs.go:18:21:18:21 | 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:25 | After slc | exprs.go:19:27:19:27 | Before 0 | +| 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: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:19:27:19:27 | After 0 | exprs.go:19:23:19:28 | index expression | +| exprs.go:19:31:19:34 | After arr2 | exprs.go:19:36:19:36 | Before 1 | +| exprs.go:19:31:19:37 | index expression | exprs.go:5:1:26:1 | Exceptional Exit | +| exprs.go:19:31:19:37 | After index expression | exprs.go:19:23:19:37 | key-value pair | +| exprs.go:19:36:19:36 | After 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:12 | After slc | exprs.go:20:14:20:14 | Before 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:20:14:20:14 | After 1 | exprs.go:20:16:20:16 | Before 2 | +| exprs.go:20:16:20:16 | After 2 | exprs.go:20:18:20:18 | Before 3 | +| exprs.go:20:18:20:18 | After 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:13 | After slc2 | exprs.go:21:10:21:19 | implicit-low slice expression | +| 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: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:21:16:21:16 | After 2 | exprs.go:21:18:21:18 | Before 3 | +| exprs.go:21:18:21:18 | After 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:13 | After slc3 | exprs.go:22:15:22:15 | Before 0 | +| 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: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:22:15:22:15 | After 0 | exprs.go:22:17:22:17 | Before 2 | +| exprs.go:22:17:22:17 | After 2 | exprs.go:22:10:22:18 | implicit-max slice expression | | 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:13 | After slc4 | exprs.go:23:15:23:15 | Before 0 | +| 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: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:23:15:23:15 | After 0 | exprs.go:23:10:23:17 | implicit-high slice expression | | 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:13 | After slc5 | exprs.go:24:10:24:17 | implicit-low slice expression | +| 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: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:24:16:24:16 | After 2 | exprs.go:24:10:24:17 | implicit-max slice expression | +| exprs.go:25:2:25:34 | return statement | exprs.go:5:1:26:1 | Normal 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:16 | After mp | exprs.go:25:18:25:18 | Before s | +| 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 | 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:18:25:18 | After 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 | After call to len | exprs.go:25:22:25:33 | lit-init 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:25:26:25:29 | After slc6 | exprs.go:25:31:25:31 | Before 0 | +| exprs.go:25:26:25:32 | index expression | exprs.go:5:1:26:1 | Exceptional Exit | +| exprs.go:25:26:25:32 | After index expression | exprs.go:25:22:25:33 | call to len | +| exprs.go:25:31:25:31 | After 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: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:19 | type assertion | exprs.go:28:1:30:1 | Exceptional Exit | +| exprs.go:29:9:29:19 | After type assertion | exprs.go:29:9:29:21 | selection of x | +| exprs.go:29:9:29:21 | After 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 | @@ -285,17 +285,17 @@ | 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:14:33:16 | After arg | exprs.go:33:14:33:24 | type assertion | +| exprs.go:33:14:33:24 | After type assertion | exprs.go:33:5:33:24 | extract:0 ... := ... | +| 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 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: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:12 | After 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 | Normal Exit | +| exprs.go:36:9:36:10 | After -... | 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 | @@ -313,17 +313,17 @@ | 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:42:10:42:12 | After arg | exprs.go:42:10:42:20 | type assertion | +| exprs.go:42:10:42:20 | After type assertion | exprs.go:42:2:42:20 | extract:0 ... = ... | +| 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 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: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:12 | After 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 | Normal Exit | +| exprs.go:46:9:46:10 | After -... | 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 | @@ -336,65 +336,65 @@ | 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 | ...<... | 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 | ...<... 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:18:50:20 | After len | exprs.go:50:22:50:23 | Before xs | +| exprs.go:50:18:50:24 | After call to len | exprs.go:50:14:50:24 | ...<... | +| exprs.go:50:22:50:23 | After xs | exprs.go:50:18:50:24 | call to len | +| exprs.go:50:27:50:27 | After i | exprs.go:50:27:50:29 | implicit-one increment statement | +| 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 | 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:50:27:50:29 | incdec-rhs 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:51:3:51:14 | ... += ... | exprs.go:51:3:51:5 | Before res | +| exprs.go:51:10:51:11 | After xs | exprs.go:51:13:51:13 | Before i | +| exprs.go:51:10:51:14 | index expression | exprs.go:49:1:54:1 | Exceptional Exit | +| exprs.go:51:10:51:14 | After index expression | exprs.go:51:3:51:14 | compound-rhs ... += ... | +| exprs.go:51:13:51:13 | After 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: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:15 | call to sum | exprs.go:56:1:58:1 | Exceptional Exit | +| exprs.go:57:9:57:15 | After call to sum | exprs.go:57:2:57:15 | return statement | +| exprs.go:57:13:57:14 | After 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:2:61:22 | return statement | exprs.go:60:1:62:1 | Normal Exit | +| 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 | 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 | 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 | 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:0:0:0:0 | Exceptional 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:64:13:64:16 | After 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 | Exceptional Exit | +| exprs.go:64:13:64:18 | After 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:0:0:0:0 | Exceptional 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:65:15:65:18 | After 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 | Exceptional Exit | +| exprs.go:65:15:65:20 | After 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 | @@ -402,26 +402,26 @@ | 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: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:13 | After ...+... | exprs.go:68:2:68:13 | return statement | +| exprs.go:68:13:68:13 | After 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:72:2:72:12 | return statement | exprs.go:71:1:73:1 | Normal Exit | +| exprs.go:72:9:72:9 | After 1 | exprs.go:72:12:72:12 | Before 2 | +| exprs.go:72:12:72:12 | After 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:0:0:0:0 | Exceptional 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 | exprs.go:75:10:75:19 | After call to add | | 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:75:14:75:16 | After 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 | Exceptional Exit | +| exprs.go:75:14:75:18 | After call to gen | exprs.go:75:10:75:19 | call to add | | 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 | @@ -431,19 +431,19 @@ | 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:2:78:22 | return statement | exprs.go:77:1:79:1 | Normal 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: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 | After ...\|\|... | 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:78:22:78:22 | After z | exprs.go:78:9:78:22 | After ...\|\|... | | 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 | @@ -455,28 +455,28 @@ | 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:82:13:82:16 | After <-... | exprs.go:82:2:82:16 | extract:0 ... := ... | +| exprs.go:82:15:82:16 | After ch | exprs.go:82:13:82:16 | <-... | +| 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 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:84:3:84:12 | return statement | exprs.go:81:1:87:1 | Normal Exit | +| exprs.go:84:10:84:12 | After val | exprs.go:84:3:84:12 | return statement | +| exprs.go:86:2:86:6 | After panic | exprs.go:86:8:86:17 | Before "No value" | +| exprs.go:86:2:86:18 | call to panic | exprs.go:81:1:87:1 | Exceptional Exit | +| exprs.go:86:8:86:17 | After "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:21 | After ...+... | exprs.go:91:24:91:24 | Before 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:91:24:91:24 | After 2 | exprs.go:91:15:91:24 | 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:1:95:1 | After function declaration | exprs.go:0:0:0:0 | After exprs.go | | 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 | @@ -484,28 +484,28 @@ | 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:2:94:21 | return statement | exprs.go:93:1:95:1 | Normal Exit | +| 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 | After ...\|\|... | 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 | +| exprs.go:94:21:94:21 | After z | exprs.go:94:9:94:21 | After ...\|\|... | +| generic.go:0:0:0:0 | generic.go | generic.go:3:1:5:1 | type declaration | | 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:1:7:55 | After function declaration | generic.go:9:1:12:1 | type declaration | | 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: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: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 | @@ -514,15 +514,15 @@ | 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: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: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: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: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 | @@ -530,50 +530,50 @@ | 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: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:12:21:12 | After 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:1:35:1 | After function declaration | generic.go:0:0:0:0 | After generic.go | | 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: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 | 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:9 | After gs1 | generic.go:26:7:26:18 | selection of Identity | +| generic.go:26:7:26:18 | After selection of Identity | generic.go:26:20:26:26 | Before "hello" | +| 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:2:26:2 | assignment to a | -| generic.go:26:20:26:26 | "hello" | generic.go:26:7:26:27 | call to Identity | +| generic.go:26:20:26:26 | After "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: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 | 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 | 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:9 | After gs2 | generic.go:28:7:28:19 | selection of Identity1 | +| generic.go:28:7:28:19 | After selection of Identity1 | generic.go:28:21:28:21 | Before a | +| 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:2:28:2 | assignment to b | -| generic.go:28:21:28:21 | a | generic.go:28:7:28:22 | call to Identity1 | +| generic.go:28:21:28:21 | After 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:24:1:35:1 | Exceptional 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:29:32:29:32 | After 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:22 | After genericIdentity1 | generic.go:30:24:30:24 | Before c | +| 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:2:30:2 | assignment to d | -| generic.go:30:24:30:24 | c | generic.go:30:7:30:25 | call to genericIdentity1 | +| generic.go:30:24:30:24 | After 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 | @@ -581,47 +581,47 @@ | 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:31:10:31:53 | call to genericIdentity2 | generic.go:24:1:35:1 | Exceptional Exit | +| generic.go:31:10:31:53 | After call to genericIdentity2 | generic.go:31:2:31:53 | extract:0 ... := ... | +| generic.go:31:43:31:43 | After d | generic.go:31:46:31:52 | Before "hello" | +| generic.go:31:46:31:52 | After "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:32:10:32:25 | After genericIdentity2 | generic.go:32:27:32:27 | Before e | +| generic.go:32:10:32:31 | call to genericIdentity2 | generic.go:24:1:35:1 | Exceptional Exit | +| generic.go:32:10:32:31 | After call to genericIdentity2 | generic.go:32:2:32:31 | extract:0 ... := ... | +| generic.go:32:27:32:27 | After e | generic.go:32:30:32:30 | Before f | +| generic.go:32:30:32:30 | After 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:0:0:0:0 | hello.go | hello.go:3:1:3:12 | import declaration | | 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:1:9:1 | After function declaration | hello.go:0:0:0:0 | After hello.go | | 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 | +| hello.go:8:2:8:12 | After selection of Println | hello.go:8:14:8:20 | Before message | +| hello.go:8:2:8:21 | call to Println | hello.go:7:1:9:1 | Exceptional Exit | +| hello.go:8:14:8:20 | After message | hello.go:8:2:8:21 | call to Println | +| main.go:0:0:0:0 | main.go | main.go:3:1:6:1 | import declaration | | 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: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:22 | call to Float64 | main.go:8:1:10:1 | Exceptional Exit | +| main.go:9:9:9:22 | After call to Float64 | main.go:9:27:9:29 | Before 0.5 | +| main.go:9:9:9:29 | After ...>=... | main.go:9:2:9:29 | return statement | +| main.go:9:27:9:29 | After 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 | @@ -631,39 +631,39 @@ | 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:10 | After selection of Print | main.go:15:12:15:12 | Before x | +| 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: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:15:12:15:12 | After x | main.go:15:15:15:15 | Before y | +| main.go:15:15:15:15 | After y | main.go:15:2:15:16 | call to Print | +| main.go:16:5:16:8 | After 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 | 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: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:17:3:17:3 | After y | main.go:17:8:17:9 | Before 19 | +| main.go:17:3:17:9 | ... += ... | main.go:17:3:17:3 | Before y | +| main.go:17:8:17:9 | After 19 | main.go:17:3:17:9 | compound-rhs ... += ... | +| main.go:19:2:19:10 | After selection of Print | main.go:19:12:19:12 | Before x | +| 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: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:19:12:19:12 | After x | main.go:19:15:19:15 | Before y | +| main.go:19:15:19:15 | After y | main.go:19:2:19:16 | call to Print | +| main.go:20:5:20:8 | After 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 | 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: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:23:2:23:10 | After selection of Print | main.go:23:12:23:12 | Before x | +| main.go:23:2:23:16 | call to Print | main.go:12:1:24:1 | Exceptional Exit | +| main.go:23:12:23:12 | After x | main.go:23:15:23:15 | Before y | +| main.go:23:15:23:15 | After 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 | @@ -673,23 +673,23 @@ | 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:10:27:10 | After x | main.go:27:13:27:13 | Before 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:8 | After 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 | 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: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:10:29:10 | After b | main.go:29:13:29:13 | Before 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: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:12:31:12 | After 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 | @@ -697,10 +697,10 @@ | 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:35:2:35:3 | After star expression | main.go:35:8:35:9 | Before 19 | +| main.go:35:2:35:9 | ... += ... | main.go:35:2:35:3 | Before star expression | +| main.go:35:3:35:3 | After x | main.go:35:2:35:3 | star expression | +| main.go:35:8:35:9 | After 19 | main.go:35:2:35:9 | compound-rhs ... += ... | | 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 | @@ -710,20 +710,20 @@ | 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:40:10:40:10 | After x | main.go:40:9:40:10 | &... | +| main.go:41:5:41:8 | After 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 | 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: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:6 | After bump | main.go:42:8:42:10 | Before ptr | +| 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: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:42:8:42:10 | After ptr | main.go:42:3:42:11 | call to bump | +| main.go:44:2:44:10 | After selection of Print | main.go:44:12:44:12 | Before x | +| main.go:44:2:44:13 | call to Print | main.go:38:1:45:1 | Exceptional Exit | +| main.go:44:12:44:12 | After 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 | @@ -747,66 +747,66 @@ | main.go:57:6:57:6 | assignment to x | main.go:58:6:58:9 | cond | | main.go:57:6:57:6 | skip | main.go:57:6:57:6 | zero value for x | | main.go:57:6:57:6 | zero value for x | main.go:57:6:57:6 | assignment to x | -| main.go:58:6:58:9 | cond | main.go:58:6:58:11 | call to cond | -| main.go:58:6:58:11 | call to cond | main.go:56:1:80:1 | exit | -| main.go:58:6:58:11 | call to cond | main.go:58:6:58:11 | call to cond is false | -| main.go:58:6:58:11 | call to cond | main.go:58:6:58:11 | call to cond is true | +| main.go:58:6:58:9 | After cond | main.go:58:6:58:11 | call to cond | +| main.go:58:6:58:11 | call to cond | main.go:56:1:80:1 | Exceptional Exit | +| main.go:58:6:58:11 | call to cond | main.go:58:6:58:11 | After call to cond [false] | +| main.go:58:6:58:11 | call to cond | main.go:58:6:58:11 | After call to cond [true] | | main.go:58:6:58:11 | call to cond is false | main.go:61:2:61:10 | selection of Print | | main.go:58:6:58:11 | call to cond is true | main.go:59:3:59:3 | skip | | main.go:59:3:59:3 | assignment to x | main.go:58:6:58:9 | cond | | main.go:59:3:59:3 | skip | main.go:59:7:59:7 | 2 | | main.go:59:7:59:7 | 2 | main.go:59:3:59:3 | assignment to x | -| main.go:61:2:61:10 | selection of Print | main.go:61:12:61:12 | x | -| main.go:61:2:61:13 | call to Print | main.go:56:1:80:1 | exit | +| main.go:61:2:61:10 | After selection of Print | main.go:61:12:61:12 | Before x | +| main.go:61:2:61:13 | call to Print | main.go:56:1:80:1 | Exceptional Exit | | main.go:61:2:61:13 | call to Print | main.go:63:2:63:2 | skip | -| main.go:61:12:61:12 | x | main.go:61:2:61:13 | call to Print | +| main.go:61:12:61:12 | After x | main.go:61:2:61:13 | call to Print | | main.go:63:2:63:2 | assignment to y | main.go:64:6:64:6 | skip | | main.go:63:2:63:2 | skip | main.go:63:7:63:7 | 1 | | main.go:63:7:63:7 | 1 | main.go:63:2:63:2 | assignment to y | | main.go:64:6:64:6 | assignment to i | main.go:65:6:65:9 | cond | | main.go:64:6:64:6 | skip | main.go:64:11:64:11 | 0 | | main.go:64:11:64:11 | 0 | main.go:64:6:64:6 | assignment to i | -| main.go:64:16:64:16 | i | main.go:64:16:64:18 | 1 | -| main.go:64:16:64:18 | 1 | main.go:64:16:64:18 | rhs of increment statement | +| main.go:64:16:64:16 | After i | main.go:64:16:64:18 | implicit-one increment statement | +| main.go:64:16:64:18 | implicit-one increment statement | main.go:64:16:64:18 | incdec-rhs increment statement | | main.go:64:16:64:18 | increment statement | main.go:65:6:65:9 | cond | -| main.go:64:16:64:18 | rhs of increment statement | main.go:64:16:64:18 | increment statement | -| main.go:65:6:65:9 | cond | main.go:65:6:65:11 | call to cond | -| main.go:65:6:65:11 | call to cond | main.go:56:1:80:1 | exit | -| main.go:65:6:65:11 | call to cond | main.go:65:6:65:11 | call to cond is false | -| main.go:65:6:65:11 | call to cond | main.go:65:6:65:11 | call to cond is true | +| main.go:64:16:64:18 | incdec-rhs increment statement | main.go:64:16:64:18 | increment statement | +| main.go:65:6:65:9 | After cond | main.go:65:6:65:11 | call to cond | +| main.go:65:6:65:11 | call to cond | main.go:56:1:80:1 | Exceptional Exit | +| main.go:65:6:65:11 | call to cond | main.go:65:6:65:11 | After call to cond [false] | +| main.go:65:6:65:11 | call to cond | main.go:65:6:65:11 | After call to cond [true] | | main.go:65:6:65:11 | call to cond is false | main.go:68:3:68:3 | skip | | main.go:65:6:65:11 | call to cond is true | main.go:66:4:66:8 | skip | | main.go:66:4:66:8 | skip | main.go:70:2:70:10 | selection of Print | | main.go:68:3:68:3 | assignment to y | main.go:64:16:64:16 | i | | main.go:68:3:68:3 | skip | main.go:68:7:68:7 | 2 | | main.go:68:7:68:7 | 2 | main.go:68:3:68:3 | assignment to y | -| main.go:70:2:70:10 | selection of Print | main.go:70:12:70:12 | y | -| main.go:70:2:70:13 | call to Print | main.go:56:1:80:1 | exit | +| main.go:70:2:70:10 | After selection of Print | main.go:70:12:70:12 | Before y | +| main.go:70:2:70:13 | call to Print | main.go:56:1:80:1 | Exceptional Exit | | main.go:70:2:70:13 | call to Print | main.go:72:2:72:2 | skip | -| main.go:70:12:70:12 | y | main.go:70:2:70:13 | call to Print | +| main.go:70:12:70:12 | After y | main.go:70:2:70:13 | call to Print | | main.go:72:2:72:2 | assignment to z | main.go:73:6:73:6 | skip | | main.go:72:2:72:2 | skip | main.go:72:7:72:7 | 1 | | main.go:72:7:72:7 | 1 | main.go:72:2:72:2 | assignment to z | | main.go:73:6:73:6 | assignment to i | main.go:74:3:74:3 | skip | | main.go:73:6:73:6 | skip | main.go:73:11:73:11 | 0 | | main.go:73:11:73:11 | 0 | main.go:73:6:73:6 | assignment to i | -| main.go:73:16:73:16 | i | main.go:73:16:73:18 | 1 | -| main.go:73:16:73:18 | 1 | main.go:73:16:73:18 | rhs of increment statement | +| main.go:73:16:73:16 | After i | main.go:73:16:73:18 | implicit-one increment statement | +| main.go:73:16:73:18 | implicit-one increment statement | main.go:73:16:73:18 | incdec-rhs increment statement | | main.go:73:16:73:18 | increment statement | main.go:74:3:74:3 | skip | -| main.go:73:16:73:18 | rhs of increment statement | main.go:73:16:73:18 | increment statement | +| main.go:73:16:73:18 | incdec-rhs increment statement | main.go:73:16:73:18 | increment statement | | main.go:74:3:74:3 | assignment to z | main.go:75:6:75:9 | cond | | main.go:74:3:74:3 | skip | main.go:74:7:74:7 | 2 | | main.go:74:7:74:7 | 2 | main.go:74:3:74:3 | assignment to z | -| main.go:75:6:75:9 | cond | main.go:75:6:75:11 | call to cond | -| main.go:75:6:75:11 | call to cond | main.go:56:1:80:1 | exit | -| main.go:75:6:75:11 | call to cond | main.go:75:6:75:11 | call to cond is false | -| main.go:75:6:75:11 | call to cond | main.go:75:6:75:11 | call to cond is true | +| main.go:75:6:75:9 | After cond | main.go:75:6:75:11 | call to cond | +| main.go:75:6:75:11 | call to cond | main.go:56:1:80: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:6:75:11 | call to cond is false | main.go:73:16:73:16 | i | | main.go:75:6:75:11 | call to cond is true | main.go:76:4:76:8 | skip | | main.go:76:4:76:8 | skip | main.go:79:2:79:10 | selection of Print | -| main.go:79:2:79:10 | selection of Print | main.go:79:12:79:12 | z | -| main.go:79:2:79:13 | call to Print | main.go:56:1:80:1 | exit | -| main.go:79:12:79:12 | z | main.go:79:2:79:13 | call to Print | +| main.go:79:2:79:10 | After selection of Print | main.go:79:12:79:12 | Before z | +| main.go:79:2:79:13 | call to Print | main.go:56:1:80:1 | Exceptional Exit | +| main.go:79:12:79:12 | After z | main.go:79:2:79:13 | call to Print | | main.go:82:1:86:1 | entry | main.go:82:18:82:18 | zero value for a | | main.go:82:1:86:1 | function declaration | main.go:88:6:88:23 | skip | | main.go:82:6:82:13 | skip | main.go:82:1:86:1 | function declaration | @@ -823,13 +823,13 @@ | main.go:84:2:84:2 | skip | main.go:84:5:84:5 | skip | | main.go:84:5:84:5 | assignment to a | main.go:85:2:85:7 | return statement | | main.go:84:5:84:5 | skip | main.go:84:9:84:9 | x | -| main.go:84:9:84:9 | x | main.go:84:11:84:12 | 19 | -| main.go:84:9:84:12 | ...+... | main.go:84:15:84:15 | x | -| main.go:84:11:84:12 | 19 | main.go:84:9:84:12 | ...+... | +| main.go:84:9:84:9 | After x | main.go:84:11:84:12 | Before 19 | +| main.go:84:9:84:12 | After ...+... | main.go:84:15:84:15 | Before x | +| main.go:84:11:84:12 | After 19 | main.go:84:9:84:12 | ...+... | | main.go:84:15:84:15 | x | main.go:84:2:84:2 | assignment to x | | main.go:85:2:85:7 | return statement | main.go:82:18:82:18 | implicit read of a | | main.go:88:1:96:1 | entry | main.go:88:25:88:25 | argument corresponding to x | -| main.go:88:1:96:1 | function declaration | main.go:0:0:0:0 | exit | +| main.go:88:1:96:1 | After function declaration | main.go:0:0:0:0 | After main.go | | main.go:88:6:88:23 | skip | main.go:88:1:96:1 | function declaration | | main.go:88:25:88:25 | argument corresponding to x | main.go:88:25:88:25 | initialization of x | | main.go:88:25:88:25 | initialization of x | main.go:89:2:89:2 | skip | @@ -837,104 +837,104 @@ | main.go:89:2:89:2 | skip | main.go:89:5:89:5 | skip | | main.go:89:5:89:5 | assignment to b | main.go:90:5:90:8 | cond | | main.go:89:5:89:5 | skip | main.go:89:10:89:10 | x | -| main.go:89:10:89:10 | x | main.go:89:13:89:13 | 0 | +| main.go:89:10:89:10 | After x | main.go:89:13:89:13 | Before 0 | | main.go:89:13:89:13 | 0 | main.go:89:2:89:2 | assignment to a | -| main.go:90:5:90:8 | cond | main.go:90:5:90:10 | call to cond | -| main.go:90:5:90:10 | call to cond | main.go:88:1:96:1 | exit | -| main.go:90:5:90:10 | call to cond | main.go:90:5:90:10 | call to cond is false | -| main.go:90:5:90:10 | call to cond | main.go:90:5:90:10 | call to cond is true | +| main.go:90:5:90:8 | After cond | main.go:90:5:90:10 | call to cond | +| main.go:90:5:90:10 | call to cond | main.go:88:1:96:1 | Exceptional Exit | +| main.go:90:5:90:10 | call to cond | main.go:90:5:90:10 | After call to cond [false] | +| main.go:90:5:90:10 | call to cond | main.go:90:5:90:10 | After call to cond [true] | | main.go:90:5:90:10 | call to cond is false | main.go:93:3:93:3 | skip | | main.go:90:5:90:10 | call to cond is true | main.go:91:3:91:3 | skip | | main.go:91:3:91:3 | assignment to a | main.go:95:9:95:9 | a | | main.go:91:3:91:3 | skip | main.go:91:6:91:6 | skip | | main.go:91:6:91:6 | skip | main.go:91:10:91:10 | b | -| main.go:91:10:91:10 | b | main.go:91:13:91:13 | a | +| main.go:91:10:91:10 | After b | main.go:91:13:91:13 | Before a | | main.go:91:13:91:13 | a | main.go:91:3:91:3 | assignment to a | | main.go:93:3:93:3 | skip | main.go:93:6:93:6 | skip | | main.go:93:6:93:6 | assignment to b | main.go:95:9:95:9 | a | | main.go:93:6:93:6 | skip | main.go:93:10:93:10 | b | -| main.go:93:10:93:10 | b | main.go:93:13:93:13 | a | +| main.go:93:10:93:10 | After b | main.go:93:13:93:13 | Before a | | main.go:93:13:93:13 | a | main.go:93:6:93:6 | assignment to b | -| main.go:95:2:95:12 | return statement | main.go:88:1:96:1 | exit | -| main.go:95:9:95:9 | a | main.go:95:12:95:12 | b | -| main.go:95:12:95:12 | b | main.go:95:2:95:12 | return statement | -| noretfunctions.go:0:0:0:0 | entry | noretfunctions.go:3:1:6:1 | skip | +| main.go:95:2:95:12 | return statement | main.go:88:1:96:1 | Normal Exit | +| main.go:95:9:95:9 | After a | main.go:95:12:95:12 | Before b | +| main.go:95:12:95:12 | After b | main.go:95:2:95:12 | return statement | +| noretfunctions.go:0:0:0:0 | noretfunctions.go | noretfunctions.go:3:1:6:1 | import declaration | | 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:9:2:9:8 | After selection of Exit | noretfunctions.go:9:10:9:10 | Before 1 | +| noretfunctions.go:9:2:9:11 | call to Exit | noretfunctions.go:8:1:10:1 | Exceptional Exit | +| noretfunctions.go:9:10:9:10 | After 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:5 | After x | noretfunctions.go:13:10:13:10 | Before 0 | +| 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 | ...!=... 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:13:10:13:10 | After 0 | noretfunctions.go:13:5:13:10 | ...!=... | +| noretfunctions.go:14:3:14:9 | After selection of Exit | noretfunctions.go:14:11:14:11 | Before x | +| noretfunctions.go:14:3:14:12 | call to Exit | noretfunctions.go:12:1:16:1 | Exceptional Exit | +| noretfunctions.go:14:11:14:11 | After x | noretfunctions.go:14:3:14:12 | call to Exit | +| noretfunctions.go:18:1:18:17 | Entry | noretfunctions.go:18:16:18:17 | block statement | | 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:18:16:18:17 | block statement | noretfunctions.go:18:1:18:17 | Normal 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:21:2:21:10 | After selection of Fatal | noretfunctions.go:21:12:21:18 | Before "Oh no" | +| noretfunctions.go:21:2:21:19 | call to Fatal | noretfunctions.go:20:1:22:1 | Exceptional Exit | +| noretfunctions.go:21:12:21:18 | After "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:1:26:1 | After function declaration | noretfunctions.go:0:0:0:0 | After noretfunctions.go | | 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 | +| 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:31 | call to Fatalf | noretfunctions.go:24:1:26:1 | Exceptional Exit | +| noretfunctions.go:25:13:25:30 | After "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:10 | After test7 | stmts2.go:4:12:4:12 | Before 0 | +| 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:5:6:5:6 | skip | -| stmts2.go:4:12:4:12 | 0 | stmts2.go:4:6:4:13 | call to test7 | +| stmts2.go:4:12:4:12 | After 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:14 | After test7 | stmts2.go:5:16:5:16 | Before 1 | +| 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: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:5:16:5:16 | After 1 | stmts2.go:5:10:5:17 | call to test7 | +| stmts2.go:6:2:6:9 | return statement | stmts2.go:3:1:7:1 | Normal Exit | +| stmts2.go:6:9:6:9 | After 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 | assign:1 ... := ... | stmts2.go:10:2:10:14 | After ... := ... | | 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:10:10:10:12 | After 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 | Exceptional Exit | +| stmts2.go:10:10:10:14 | After call to gen | stmts2.go:10:2:10:14 | extract: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 | assign:1 value declaration specifier | stmts2.go:11:6:11:17 | After value declaration specifier | | 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:11:13:11:15 | After 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 | Exceptional Exit | +| stmts2.go:11:13:11:17 | After call to gen | stmts2.go:11:6:11:17 | extract:0 value declaration specifier | +| 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:13 | After ...+... | stmts2.go:12:2:12:13 | return statement | +| stmts2.go:12:13:12:13 | After 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 | @@ -946,64 +946,64 @@ | 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: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: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:7 | After x | stmts2.go:18:10:18:10 | Before _ | | 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:18:10:18:10 | After _ | stmts2.go:18:7:18:18 | extract:0 ... := ... | +| 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: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:20:7:20:7 | After _ | stmts2.go:20:10:20:10 | Before y | +| stmts2.go:20:7:20:18 | extract:0 ... := ... | stmts2.go:20:7:20:18 | extract: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:20:10:20:10 | After y | stmts2.go:20:7:20:18 | extract:0 ... := ... | +| 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: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 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:24:3:24:10 | return statement | stmts2.go:15:1:28:1 | Normal Exit | +| stmts2.go:24:10:24:10 | After 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:7 | After _ | stmts2.go:25:10:25:10 | Before _ | +| stmts2.go:25:7:25:17 | extract:0 ... = ... | stmts2.go:25:7:25:17 | extract: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:25:10:25:10 | After _ | stmts2.go:25:7:25:17 | extract:0 ... = ... | +| 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:27:2:27:9 | return statement | stmts2.go:15:1:28:1 | Normal Exit | +| stmts2.go:27:9:27:9 | After 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:1:34:1 | After function declaration | stmts2.go:0:0:0:0 | After stmts2.go | | 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:31:10:31:12 | After 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 | Exceptional Exit | +| stmts2.go:31:10:31:14 | After call to gen | stmts2.go:31:2:31:14 | extract: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 | +| stmts2.go:32:13:32:15 | After 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 | Exceptional Exit | +| stmts2.go:32:13:32:17 | After call to gen | stmts2.go:32:6:32:17 | extract:0 value declaration specifier | +| 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:13 | After ...+... | stmts2.go:33:2:33:13 | return statement | +| stmts2.go:33:13:33:13 | After y | stmts2.go:33:9:33:13 | ...+... | +| stmts3.go:0:0:0:0 | stmts3.go | stmts3.go:3:1:3:13 | import declaration | | 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 | @@ -1011,14 +1011,14 @@ | 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: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: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: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:11:2:11:26 | return statement | stmts3.go:5:1:12:1 | Normal Exit | +| stmts3.go:11:9:11:26 | After ...-... | 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 | @@ -1030,19 +1030,19 @@ | 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:1:20:1 | After function declaration | stmts3.go:0:0:0:0 | After stmts3.go | | 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:2:19:11 | After selection of Usage | stmts3.go:19:15:19:23 | Before function literal | +| stmts3.go:19:15:19:23 | Entry | stmts3.go:19:22:19:23 | block statement | | 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 | +| stmts3.go:19:22:19:23 | block statement | stmts3.go:19:15:19:23 | Normal 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:1:5:26 | After function declaration | stmts4.go:0:0:0:0 | After stmts4.go | | 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:0:0:0:0 | stmts5.go | stmts5.go:3:1:5:1 | type declaration | | 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 | @@ -1051,47 +1051,47 @@ | 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:3 | After 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:8:2:8:7 | After selection of val | stmts5.go:8:12:8:16 | Before other | +| stmts5.go:8:2:8:16 | ... += ... | stmts5.go:8:2:8:7 | Before selection of val | +| stmts5.go:8:12:8:16 | After other | stmts5.go:8:2:8:16 | compound-rhs ... += ... | +| stmts5.go:11:1:12:1 | Entry | stmts5.go:11:20:12:1 | block statement | +| stmts5.go:11:1:12:1 | After function declaration | stmts5.go:0:0:0:0 | After stmts5.go | | 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 | +| stmts5.go:11:20:12:1 | block statement | stmts5.go:11:1:12:1 | Normal 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:1:8:1 | After function declaration | stmts6.go:0:0:0:0 | After stmts6.go | | 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 | Before true | stmts6.go:4:5:4:8 | 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:5:3:5:11 | return statement | stmts6.go:3:1:8:1 | Normal Exit | +| stmts6.go:5:10:5:11 | After 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:0:0:0:0 | stmts7.go | stmts7.go:3:1:3:12 | import declaration | | 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:16 | After 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:7:2:7:12 | After selection of Println | stmts7.go:7:14:7:26 | Before "recovered: " | +| stmts7.go:7:2:7:33 | call to Println | stmts7.go:5:1:8:1 | Exceptional Exit | +| stmts7.go:7:14:7:26 | After "recovered: " | stmts7.go:7:29:7:32 | Before blah | +| stmts7.go:7:29:7:32 | After 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:1:13:1 | After function declaration | stmts7.go:15:1:17:1 | type declaration | | 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:11:8:11:21 | call to recoverPanic | stmts7.go:10:1:13:1 | Exceptional Exit | +| stmts7.go:12:2:12:6 | After panic | stmts7.go:12:8:12:9 | Before "" | | 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:12:8:12:9 | After "" | 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 | @@ -1099,32 +1099,32 @@ | 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: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:13 | call to fn | stmts7.go:19:1:21:1 | Exceptional 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:1:28:1 | After function declaration | stmts7.go:0:0:0:0 | After stmts7.go | | 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:15 | After 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:24:8:24:20 | call to fn | stmts7.go:23:1:28:1 | Exceptional 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:18 | implicit-deref (...) | 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:12 | After selection of Println | stmts7.go:26:14:26:30 | Before "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:26:14:26:30 | After "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 | +| stmts7.go:27:9:27:13 | After 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 | @@ -1133,31 +1133,31 @@ | 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:7 | After x | stmts8.go:4:12:4:12 | Before 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:4:12:4:12 | After 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:7 | After x | stmts8.go:5:12:5:12 | Before 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:5:12:5:12 | After 1 | stmts8.go:5:7:5:13 | ...%... | +| stmts8.go:6:2:6:17 | return statement | stmts8.go:3:1:7:1 | Normal 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:6:12:6:12 | After y | stmts8.go:6:16:6:17 | Before 13 | +| stmts8.go:6:12:6:17 | After ...%... | stmts8.go:6:2:6:17 | return statement | +| stmts8.go:6:16:6:17 | After 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:1:14:1 | After function declaration | stmts8.go:0:0:0:0 | After stmts8.go | | 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 | 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 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 | +| 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: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 | +| stmts.go:0:0:0:0 | stmts.go | stmts.go:3:1:3:12 | import declaration | | 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 | @@ -1168,62 +1168,62 @@ | 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:12:7:12:7 | After b [false] | stmts.go:12:6:12:7 | After !... [true] | | 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:15:3:16:3 | block statement | stmts.go:17:3:17:3 | empty statement | | 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:12 | After selection of Println | stmts.go:20:14:20:17 | Before "Hi" | +| 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: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:20:14:20:17 | After "Hi" | stmts.go:20:2:20:18 | call to Println | +| stmts.go:23:6:23:9 | Before true | stmts.go:23:6:23:9 | 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:15 | After i | stmts.go:24:19:24:20 | Before 10 | +| 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 | ...<... 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:19:24:20 | After 10 | stmts.go:24:15:24:20 | ...<... | +| stmts.go:24:23:24:23 | After i | stmts.go:24:23:24:25 | implicit-one increment statement | +| 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 | 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:24:23:24:25 | incdec-rhs 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:12 | After i | stmts.go:25:16:25:16 | Before 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:16:25:16 | After 1 | stmts.go:25:12:25:16 | ...-... | +| stmts.go:25:19:25:19 | After j | stmts.go:25:23:25:23 | Before 5 | +| 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 | ...>... is false | stmts.go:27:14:27:14 | i | | stmts.go:25:19:25:23 | ...>... is true | stmts.go:26:5:26:15 | skip | -| stmts.go:25:23:25:23 | 5 | stmts.go:25:19:25:23 | ...>... | +| stmts.go:25:23:25:23 | After 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:14 | After i | stmts.go:27:18:27:18 | Before 3 | +| 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 | ...<... is false | stmts.go:29:14:29:14 | i | | stmts.go:27:14:27:18 | ...<... is true | stmts.go:28:5:28:9 | skip | -| stmts.go:27:18:27:18 | 3 | stmts.go:27:14:27:18 | ...<... | +| stmts.go:27:18:27:18 | After 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:14 | After i | stmts.go:29:19:29:19 | Before 9 | +| 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 | ...!=... is false | stmts.go:31:14:31:14 | i | | stmts.go:29:14:29:19 | ...!=... is true | stmts.go:30:5:30:18 | skip | -| stmts.go:29:19:29:19 | 9 | stmts.go:29:14:29:19 | ...!=... | +| stmts.go:29:19:29:19 | After 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:14 | After i | stmts.go:31:19:31:19 | Before 4 | +| 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 | ...>=... is false | stmts.go:34:5:34:12 | skip | | stmts.go:31:14:31:19 | ...>=... is true | stmts.go:32:5:32:14 | skip | -| stmts.go:31:19:31:19 | 4 | stmts.go:31:14:31:19 | ...>=... | +| stmts.go:31:19:31:19 | After 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 | @@ -1252,67 +1252,67 @@ | 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:51:9:51:11 | After ch1 | stmts.go:53:19:53:21 | Before ch2 | +| 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:31 | call to Println | stmts.go:46:1:62:1 | Exceptional 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:52:15:52:30 | After "Heard from ch1" | stmts.go:52:3:52:31 | call to Println | +| stmts.go:53:7:53:7 | After a | stmts.go:53:9:53:9 | Before 0 | | stmts.go:53:7:53:10 | assignment to element | stmts.go:53:7:53:21 | ... = ...[1] | -| stmts.go:53:7:53:10 | skip | stmts.go:46:1:62:1 | exit | -| stmts.go:53:7:53:10 | skip | stmts.go:53:13:53:13 | skip | +| stmts.go:53:7:53:10 | index expression | stmts.go:46:1:62:1 | Exceptional Exit | +| stmts.go:53:7:53:10 | After index expression | stmts.go:53:13:53:13 | Before w | | 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:9:53:9 | After 0 | stmts.go:53:7:53:10 | index expression | | 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:13:53:13 | After w | stmts.go:53:7:53:21 | extract: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:53:19:53:21 | After ch2 | stmts.go:58:7:58:9 | Before ch1 | +| stmts.go:54:3:54:13 | After selection of Println | stmts.go:54:15:54:15 | Before a | +| 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: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:54:15:54:15 | After a | stmts.go:54:3:54:16 | call to Println | +| stmts.go:55:3:55:13 | After selection of Println | stmts.go:55:15:55:15 | Before w | +| 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: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:55:15:55:15 | After w | stmts.go:55:3:55:16 | call to Println | +| stmts.go:57:3:57:13 | After 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 | Exceptional 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:9 | After ch1 | stmts.go:58:14:58:15 | Before 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:58:14:58:15 | After 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:5 | After x | stmts.go:66:9:66:9 | Before 0 | +| 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 | ...>... is false | stmts.go:69:9:69:34 | function literal | | stmts.go:66:5:66:9 | ...>... is true | stmts.go:67:9:67:33 | function literal | -| stmts.go:66:9:66:9 | 0 | stmts.go:66:5:66:9 | ...>... | +| stmts.go:66:9:66:9 | After 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:67:9:67:35 | function call | stmts.go:65:1:72:1 | Exceptional Exit | +| stmts.go:67:18:67:28 | After selection of Println | stmts.go:67:30:67:30 | Before x | +| stmts.go:67:18:67:31 | call to Println | stmts.go:67:9:67:33 | Exceptional Exit | +| stmts.go:67:30:67:30 | After 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:9:69:36 | function call | stmts.go:65:1:72:1 | Exceptional 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:69:18:69:32 | call to Println | stmts.go:69:9:69:34 | Exceptional Exit | +| stmts.go:69:30:69:31 | After -... | stmts.go:69:18:69:32 | call to Println | +| stmts.go:69:31:69:31 | After 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:71:9:71:10 | After 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 | @@ -1322,49 +1322,49 @@ | 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:17 | After y | stmts.go:79:21:79:22 | Before 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:79:21:79:22 | After 19 | stmts.go:79:17:79:22 | ...-... | +| stmts.go:81:3:81:7 | After test5 | stmts.go:81:9:81:13 | Before false | +| stmts.go:81:3:81:14 | call to test5 | stmts.go:75:1:109:1 | Exceptional Exit | +| stmts.go:81:9:81:13 | After 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 | 1 | stmts.go:85:7:85:7 | After 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 | 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 | 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 | 3 | stmts.go:86:10:86:10 | After 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:87:3:87:7 | After test5 | stmts.go:87:9:87:12 | Before true | +| stmts.go:87:9:87:12 | After 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 | 1 | stmts.go:91:7:91:7 | After 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:92:3:92:7 | After test5 | stmts.go:92:9:92:13 | Before false | +| stmts.go:92:9:92:13 | After 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 | ...-... | stmts.go:94:7:94:11 | After ...-... | | 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:95:3:95:7 | After test5 | stmts.go:95:9:95:12 | Before true | +| stmts.go:95:9:95:12 | After 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 | 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 | 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:101:3:101:7 | After test5 | stmts.go:101:9:101:12 | Before true | +| stmts.go:101:9:101:12 | After 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 | 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: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 | @@ -1375,58 +1375,58 @@ | 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:14 | After 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:7:114:11 | error | stmts.go:114:14:114:19 | 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:13 | After selection of Println | stmts.go:115:15:115:15 | Before y | +| 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:123:9:123:9 | skip | -| stmts.go:115:15:115:15 | y | stmts.go:115:3:115:16 | call to Println | +| stmts.go:115:15:115:15 | After 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: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:13 | call to test5 | stmts.go:112:1:137:1 | Exceptional Exit | +| stmts.go:117:9:117:12 | After true | stmts.go:117:3:117:13 | call to test5 | +| stmts.go:118:3:118:7 | After test5 | stmts.go:118:9:118:13 | Before false | +| stmts.go:118:9:118:13 | After 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:17 | After 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 | error | stmts.go:124:14:124:19 | 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:13 | After selection of Println | stmts.go:125:15:125:15 | Before y | +| 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:133:9:133:9 | skip | -| stmts.go:125:15:125:15 | y | stmts.go:125:3:125:16 | call to Println | +| stmts.go:125:15:125:15 | After 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:127:3:127:7 | After test5 | stmts.go:127:9:127:12 | Before true | +| stmts.go:127:3:127:13 | call to test5 | stmts.go:112:1:137:1 | Exceptional Exit | +| stmts.go:127:9:127:12 | After true | stmts.go:127:3:127:13 | call to test5 | +| stmts.go:128:3:128:7 | After test5 | stmts.go:128:9:128:13 | Before false | +| stmts.go:128:9:128:13 | After 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:17 | After 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:135:3:135:7 | After test5 | stmts.go:135:9:135:13 | Before false | +| stmts.go:135:3:135:14 | call to test5 | stmts.go:112:1:137:1 | Exceptional Exit | +| stmts.go:135:9:135:13 | After 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 | @@ -1435,7 +1435,7 @@ | 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:1:159:1 | After function declaration | stmts.go:0:0:0:0 | After stmts.go | | 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 | @@ -1444,19 +1444,19 @@ | 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:146:17:146:18 | Before xs | stmts.go:146:17:146:18 | xs | +| stmts.go:147:6:147:6 | After x | stmts.go:147:10:147:10 | Before 5 | +| 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 | ...>... is false | stmts.go:150:3:150:11 | selection of Print | | stmts.go:147:6:147:10 | ...>... is true | stmts.go:148:4:148:11 | skip | -| stmts.go:147:10:147:10 | 5 | stmts.go:147:6:147:10 | ...>... | +| stmts.go:147:10:147:10 | After 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:11 | After selection of Print | stmts.go:150:13:150:13 | Before x | +| 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: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:150:13:150:13 | After x | stmts.go:150:3:150:14 | call to Print | +| stmts.go:153:2:155:2 | [LoopHeader] range statement | stmts.go:153:2:155:2 | After range statement | | 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 | @@ -1464,15 +1464,15 @@ | 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:153:20:153:21 | Before xs | stmts.go:153:20:153:21 | xs | +| stmts.go:154:3:154:11 | After selection of Print | stmts.go:154:13:154:13 | Before i | +| 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: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:154:13:154:13 | After i | stmts.go:154:16:154:16 | Before v | +| stmts.go:154:16:154:16 | After 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:12:157:13 | Before xs | stmts.go:157:12:157:13 | xs | | 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 | @@ -1482,29 +1482,29 @@ | 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:7 | After x | tst.go:5:11:5:12 | Before 23 | +| tst.go:5:7:5:12 | ...<... | tst.go:5:7:5:12 | After ...<... [false] | | 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 | ...<... | tst.go:5:7:5:12 | After ...<... [true] | | tst.go:5:7:5:12 | case ...<... | tst.go:5:7:5:12 | ...<... is true | -| tst.go:5:11:5:12 | 23 | tst.go:5:7:5:12 | ...<... | +| tst.go:5:11:5:12 | After 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:7 | After x | tst.go:7:11:7:12 | Before 42 | +| tst.go:7:7:7:12 | ...<... | tst.go:7:7:7:12 | After ...<... [false] | | 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 | ...<... | tst.go:7:7:7:12 | After ...<... [true] | | tst.go:7:7:7:12 | case ...<... | tst.go:7:7:7:12 | ...<... is true | -| tst.go:7:11:7:12 | 42 | tst.go:7:7:7:12 | ...<... | +| tst.go:7:11:7:12 | After 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:7 | After x | tst.go:9:11:9:12 | Before 23 | +| tst.go:9:7:9:12 | ...<... | tst.go:9:7:9:12 | After ...<... [false] | | 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 | ...<... | tst.go:9:7:9:12 | After ...<... [true] | | tst.go:9:7:9:12 | case ...<... | tst.go:9:7:9:12 | ...<... is true | -| tst.go:9:11:9:12 | 23 | tst.go:9:7:9:12 | ...<... | +| tst.go:9:11:9:12 | After 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 | @@ -1512,27 +1512,27 @@ | 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:11 | After value | tst.go:16:15:16:33 | Before ...*... | +| tst.go:16:7:16:33 | ...<... | tst.go:16:7:16:33 | After ...<... [false] | | 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 | ...<... | tst.go:16:7:16:33 | After ...<... [true] | | tst.go:16:7:16:33 | case ...<... | tst.go:16:7:16:33 | ...<... is true | -| tst.go:16:15:16:33 | ...*... | tst.go:16:7:16:33 | ...<... | +| tst.go:16:15:16:33 | After ...*... | 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:11 | After value | tst.go:18:15:18:38 | Before ...*... | +| tst.go:18:7:18:38 | ...<... | tst.go:18:7:18:38 | After ...<... [false] | | 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 | ...<... | tst.go:18:7:18:38 | After ...<... [true] | | tst.go:18:7:18:38 | case ...<... | tst.go:18:7:18:38 | ...<... is true | -| tst.go:18:15:18:38 | ...*... | tst.go:18:7:18:38 | ...<... | +| tst.go:18:15:18:38 | After ...*... | 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:1:32:1 | After function declaration | tst.go:0:0:0:0 | After tst.go | | 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:29:2:31:2 | expression-switch statement | tst.go:30:2:30:9 | case clause | | tst.go:30:2:30:9 | skip | tst.go:28:1:32:1 | exit | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/srcs.expected b/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/srcs.expected index f5768d49d1b..430772fb9da 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 | 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 93b3593ec94..afcc55c1aef 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,4 +1,4 @@ -| main.go:6:2:6:5 | 1 | main.go:14:7:14:7 | 1 | +| main.go:6:2:6:5 | implicit-one increment statement | main.go:14:7:14:7 | 1 | | main.go:10:2:10:2 | definition of 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 | definition of y | main.go:10:7:10:7 | 0 | 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..4df73eb04dd 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 | | 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..e375fe75be8 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,11 +6,11 @@ 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 @@ -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 d3f52f4f9c6..453d61a3e38 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,11 +1,11 @@ #select | EndToEnd.go:94:20:94:49 | call to Get | EndToEnd.go:94:20:94:27 | selection of Params | EndToEnd.go:94:20:94:49 | call to Get | This path to an untrusted URL redirection depends on a $@. | EndToEnd.go:94:20:94:27 | selection of Params | user-provided value | edges -| EndToEnd.go:94:20:94:27 | implicit dereference | EndToEnd.go:94:20:94:27 | selection of Params [postupdate] | provenance | Config | -| EndToEnd.go:94:20:94:27 | implicit dereference | EndToEnd.go:94:20:94:32 | selection of Form | provenance | Config | -| EndToEnd.go:94:20:94:27 | selection of Params | EndToEnd.go:94:20:94:27 | implicit dereference | provenance | Src:MaD:2 Config | +| EndToEnd.go:94:20:94:27 | implicit-deref selection of Params | EndToEnd.go:94:20:94:27 | selection of Params [postupdate] | provenance | Config | +| EndToEnd.go:94:20:94:27 | implicit-deref selection of Params | EndToEnd.go:94:20:94:32 | selection of Form | provenance | Config | +| EndToEnd.go:94:20:94:27 | selection of Params | EndToEnd.go:94:20:94:27 | implicit-deref selection of Params | provenance | Src:MaD:2 Config | | EndToEnd.go:94:20:94:27 | selection of Params | EndToEnd.go:94:20:94:32 | selection of Form | provenance | Src:MaD:2 Config | -| EndToEnd.go:94:20:94:27 | selection of Params [postupdate] | EndToEnd.go:94:20:94:27 | implicit dereference | provenance | Config | +| EndToEnd.go:94:20:94:27 | selection of Params [postupdate] | EndToEnd.go:94:20:94:27 | implicit-deref selection of Params | provenance | Config | | EndToEnd.go:94:20:94:32 | selection of Form | EndToEnd.go:94:20:94:49 | call to Get | provenance | Config Sink:MaD:1 | models | 1 | Sink: group:revel; Controller; true; Redirect; ; ; Argument[0]; url-redirection; manual | 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 7b1fa1a3121..df1f5ec39b8 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 @@ -4,8 +4,8 @@ edges | client/main.go:16:35:16:78 | &... | server/main.go:19:56:19:61 | definition of 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 | capture variable reqContent | provenance | | | rpc/notes/service.twirp.go:574:2:577:2 | capture variable reqContent | rpc/notes/service.twirp.go:576:35:576:44 | reqContent | provenance | | diff --git a/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected b/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected index 41034c55796..5b6df847e0b 100644 --- a/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected +++ b/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected @@ -1,30 +1,30 @@ #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:111:9:111:9 | f | tests.go:109:5:109:78 | ... := ...[0] | tests.go:111:9:111: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:109:15:109:78 | call to OpenFile | call to OpenFile | -| tests.go:130:3:130:3 | f | tests.go:126:5:126:78 | ... := ...[0] | tests.go:130:3:130: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:126:15:126:78 | call to OpenFile | call to OpenFile | -| tests.go:151:8:151:8 | f | tests.go:147:2:147:74 | ... := ...[0] | tests.go:151:8:151: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:147:12:147: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:111:9:111:9 | f | tests.go:109:5:109:78 | extract:0 ... := ... | tests.go:111:9:111: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:109:15:109:78 | call to OpenFile | call to OpenFile | +| tests.go:130:3:130:3 | f | tests.go:126:5:126:78 | extract:0 ... := ... | tests.go:130:3:130: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:126:15:126:78 | call to OpenFile | call to OpenFile | +| tests.go:151:8:151:8 | f | tests.go:147:2:147:74 | extract:0 ... := ... | tests.go:151:8:151: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:147:12:147:74 | call to OpenFile | call to OpenFile | edges | tests.go:9:24:9:24 | definition of f | tests.go:10:8:10:8 | f | provenance | | | tests.go:13:32:13:32 | definition of f | tests.go:14:13:16:2 | capture variable f | provenance | | | tests.go:14:13:16:2 | capture variable 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: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:24:9:24 | definition of f | provenance | | | tests.go:34:29:34:29 | f | tests.go:13:32:13:32 | definition of 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: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:24:9:24 | definition of f | provenance | | | tests.go:48:29:48:29 | f | tests.go:13:32:13:32 | definition of 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:109:5:109:78 | ... := ...[0] | tests.go:111:9:111:9 | f | provenance | Src:MaD:1 | -| tests.go:126:5:126:78 | ... := ...[0] | tests.go:130:3:130:3 | f | provenance | Src:MaD:1 | -| tests.go:147:2:147:74 | ... := ...[0] | tests.go:151:8:151:8 | f | provenance | Src:MaD:1 | +| 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:109:5:109:78 | extract:0 ... := ... | tests.go:111:9:111:9 | f | provenance | Src:MaD:1 | +| tests.go:126:5:126:78 | extract:0 ... := ... | tests.go:130:3:130:3 | f | provenance | Src:MaD:1 | +| tests.go:147:2:147:74 | extract:0 ... := ... | tests.go:151:8:151:8 | f | provenance | Src:MaD:1 | models | 1 | Source: os; ; false; OpenFile; ; ; ReturnValue[0]; file; manual | nodes 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 7cb981667da..b244c32771a 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 | definition of 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: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:24:52:32 | definition of candidate | provenance | | | UnsafeUnzipSymlinkGood.go:76:70:76:80 | selection of Name | UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of 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 | | +| 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 | 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..32f802351a0 100644 --- a/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected @@ -31,16 +31,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,19 +72,19 @@ 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 | | 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 5deab249337..206c63032d8 100644 --- a/go/ql/test/query-tests/Security/CWE-089/StringBreak.expected +++ b/go/ql/test/query-tests/Security/CWE-089/StringBreak.expected @@ -1,13 +1,13 @@ #select -| StringBreak.go:14:47:14:57 | versionJSON | StringBreak.go:10:2:10:40 | ... := ...[0] | StringBreak.go:14:47:14:57 | versionJSON | If this $@ contains a single quote, it could break out of the enclosing quotes. | StringBreak.go:10:2:10:40 | ... := ...[0] | JSON value | -| StringBreakMismatched.go:17:26:17:32 | escaped | StringBreakMismatched.go:12:2:12:40 | ... := ...[0] | StringBreakMismatched.go:17:26:17:32 | escaped | If this $@ contains a single quote, it could break out of the enclosing quotes. | StringBreakMismatched.go:12:2:12:40 | ... := ...[0] | JSON value | -| StringBreakMismatched.go:29:27:29:33 | escaped | StringBreakMismatched.go:24:2:24:40 | ... := ...[0] | StringBreakMismatched.go:29:27:29:33 | escaped | If this $@ contains a double quote, it could break out of the enclosing quotes. | StringBreakMismatched.go:24:2:24:40 | ... := ...[0] | JSON value | +| StringBreak.go:14:47:14:57 | versionJSON | StringBreak.go:10:2:10:40 | extract:0 ... := ... | StringBreak.go:14:47:14:57 | versionJSON | If this $@ contains a single quote, it could break out of the enclosing quotes. | StringBreak.go:10:2:10:40 | extract:0 ... := ... | JSON value | +| StringBreakMismatched.go:17:26:17:32 | escaped | StringBreakMismatched.go:12:2:12:40 | extract:0 ... := ... | StringBreakMismatched.go:17:26:17:32 | escaped | If this $@ contains a single quote, it could break out of the enclosing quotes. | StringBreakMismatched.go:12:2:12:40 | extract:0 ... := ... | JSON value | +| StringBreakMismatched.go:29:27:29:33 | escaped | StringBreakMismatched.go:24:2:24:40 | extract:0 ... := ... | StringBreakMismatched.go:29:27:29:33 | escaped | If this $@ contains a double quote, it could break out of the enclosing quotes. | StringBreakMismatched.go:24:2:24:40 | extract:0 ... := ... | JSON value | edges -| StringBreak.go:10:2:10:40 | ... := ...[0] | StringBreak.go:14:47:14:57 | versionJSON | provenance | | -| StringBreakMismatched.go:12:2:12:40 | ... := ...[0] | StringBreakMismatched.go:13:29:13:47 | type conversion | provenance | | +| StringBreak.go:10:2:10:40 | extract:0 ... := ... | StringBreak.go:14:47:14:57 | versionJSON | provenance | | +| StringBreakMismatched.go:12:2:12:40 | extract:0 ... := ... | StringBreakMismatched.go:13:29:13:47 | type conversion | provenance | | | StringBreakMismatched.go:13:13:13:62 | call to Replace | StringBreakMismatched.go:17:26:17:32 | escaped | provenance | | | StringBreakMismatched.go:13:29:13:47 | type conversion | StringBreakMismatched.go:13:13:13:62 | call to Replace | provenance | MaD:1 | -| StringBreakMismatched.go:24:2:24:40 | ... := ...[0] | StringBreakMismatched.go:25:29:25:47 | type conversion | provenance | | +| StringBreakMismatched.go:24:2:24:40 | extract:0 ... := ... | StringBreakMismatched.go:25:29:25:47 | type conversion | provenance | | | StringBreakMismatched.go:25:13:25:61 | call to Replace | StringBreakMismatched.go:29:27:29:33 | escaped | provenance | | | StringBreakMismatched.go:25:29:25:47 | type conversion | StringBreakMismatched.go:25:13:25:61 | call to Replace | provenance | MaD:1 | models 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 66392b22752..eaee90c44c9 100644 --- a/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected +++ b/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected @@ -55,10 +55,10 @@ | 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 | definition of password | protobuf.go:14:14:14:35 | call to GetDescription | $@ flows to a logging call. | protobuf.go:9:2:9:9 | definition of password | 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 | definition of password | main.go:19:12:19:19 | password | provenance | | | main.go:17:2:17:9 | definition of password | main.go:20:19:20:26 | password | provenance | | @@ -143,14 +143,14 @@ edges | 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 | definition of 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: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 | definition of x [pointer, Description] | provenance | | | protos/query/query.pb.go:117:7:117:7 | definition of 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 | | +| 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 | | models | 1 | Sink: group:logrus; ; false; WithField; ; ; Argument[0..1]; log-injection; manual | | 2 | Sink: group:logrus; ; false; WithFields; ; ; Argument[0]; log-injection; manual | 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 2bfca2aa643..bdb67f69c33 100644 --- a/go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.expected +++ b/go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.expected @@ -7,8 +7,8 @@ edges | 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 | definition of signedToken | provenance | | | go-jose.v3.go:29:19:29:29 | definition of 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: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 | | 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..b3d9f2f0af4 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 | 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..7487b8c2682 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 |