Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmd/compile, runtime: runtime.slicebytetostringtmp is NOT emitted for map[string][]byte m[string(byteslice)] in a certain case #47698

Closed
odeke-em opened this issue Aug 14, 2021 · 1 comment

Comments

@odeke-em
Copy link
Member

@odeke-em odeke-em commented Aug 14, 2021

What version of Go are you using (go version)?

$ go version
Go1.14 to Go1.17/1.18

Does this issue reproduce with the latest release?

Yes!

What operating system and processor architecture are you using (go env)?

go env Output
$ go env

GO111MODULE=""
GOARCH="amd64"
GOBIN="/Users/emmanuelodeke/go/bin"
GOCACHE="/Users/emmanuelodeke/Library/Caches/go-build"
GOENV="/Users/emmanuelodeke/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/emmanuelodeke/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/Users/emmanuelodeke/go/src/go.googlesource.com/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/Users/emmanuelodeke/go/src/go.googlesource.com/go/pkg/tool/darwin_amd64"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/emmanuelodeke/go/src/go.googlesource.com/go/src/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/v3/7z434qpx5v3bw0wh8h2myfpw0000gn/T/go-build131913713=/tmp/go-build -gno-record-gcc-switches -fno-common"

What did you do?

I continuously profiled a customer's code that my team is auditing and needs to give the OK signal for use this library

If we look at this code https://github.com/celestiaorg/smt/blob/f0f62d60a45dc98ea95933d99505576f1018ae93/mapstore.go#L36-L41

Screen Shot 2021-08-14 at 1 44 59 AM

What did you expect to see?

I'd expect the compiler to detect that hey, there will be a READ-ONLY use of the key thus convert from []byte->slice with zero allocations
but unfortunately this code was showing up hot in our continuous profiler so I took a sample and alas when I experimented with a manual []byte->string zero allocation with

diff --git a/mapstore.go b/mapstore.go
index 5fe381b..ed063fc 100644
--- a/mapstore.go
+++ b/mapstore.go
@@ -2,6 +2,8 @@ package smt
 
 import (
 	"fmt"
+	"reflect"
+	"unsafe"
 )
 
 // MapStore is a key-value store.
@@ -32,9 +34,14 @@ func NewSimpleMap() *SimpleMap {
 	}
 }
 
+func bytesToStr(b []byte) (str string) {
+	hdr := (*reflect.StringHeader)(unsafe.Pointer(&str))
+	return *(*string)(unsafe.Pointer(hdr))
+}
+
 // Get gets the value for a key.
 func (sm *SimpleMap) Get(key []byte) ([]byte, error) {
-	if value, ok := sm.m[string(key)]; ok {
+	if value, ok := sm.m[bytesToStr(key)]; ok {
 		return value, nil
 	}
 	return nil, &InvalidKeyError{Key: key}

the results were shocking

$ benchstat before.txt after.txt 
name                       old time/op    new time/op    delta
SparseMerkleTree_Update-8    22.9µs ± 8%     2.4µs ±12%  -89.65%  (p=0.000 n=20+20)

name                       old alloc/op   new alloc/op   delta
SparseMerkleTree_Update-8    15.8kB ± 0%    12.8kB ± 0%  -19.49%  (p=0.000 n=19+20)

name                       old allocs/op  new allocs/op  delta
SparseMerkleTree_Update-8      59.0 ± 0%       7.0 ± 0%  -88.14%  (p=0.000 n=16+20)
ROUTINE ======================== github.com/celestiaorg/smt.(*SimpleMap).Get in /Users/emmanuelodeke/go/src/github.com/celestiaorg/smt/mapstore.go
      20ms      1.10s (flat, cum)  5.08% of Total
         .          .     31:		m: make(map[string][]byte),
         .          .     32:	}
         .          .     33:}
         .          .     34:
         .          .     35:// Get gets the value for a key.
         .       10ms     36:func (sm *SimpleMap) Get(key []byte) ([]byte, error) {
      10ms      1.08s     37:	if value, ok := sm.m[string(key)]; ok {
      10ms       10ms     38:		return value, nil
         .          .     39:	}
         .          .     40:	return nil, &InvalidKeyError{Key: key}
         .          .     41:}
         .          .     42:
         .          .     43:// Set updates the value for a key.

and on looking further I noticed

ROUTINE ======================== runtime.slicebytetostring in /Users/emmanuelodeke/go/src/go.googlesource.com/go/src/runtime/string.go
      40ms      370ms (flat, cum)  1.71% of Total
         .          .     75:// It is inserted by the compiler into generated code.
         .          .     76:// ptr is a pointer to the first element of the slice;
         .          .     77:// n is the length of the slice.
         .          .     78:// Buf is a fixed-size buffer for the result,
         .          .     79:// it is not nil if the result does not escape.
      20ms       20ms     80:func slicebytetostring(buf *tmpBuf, ptr *byte, n int) (str string) {
         .          .     81:	if n == 0 {
         .          .     82:		// Turns out to be a relatively common case.
         .          .     83:		// Consider that you want to parse out data between parens in "foo()bar",
         .          .     84:		// you find the indices and convert the subslice to string.
         .          .     85:		return ""
         .          .     86:	}
         .          .     87:	if raceenabled {
         .          .     88:		racereadrangepc(unsafe.Pointer(ptr),
         .          .     89:			uintptr(n),
         .          .     90:			getcallerpc(),
         .          .     91:			funcPC(slicebytetostring))
         .          .     92:	}
         .          .     93:	if msanenabled {
         .          .     94:		msanread(unsafe.Pointer(ptr), uintptr(n))
         .          .     95:	}
         .          .     96:	if n == 1 {
         .          .     97:		p := unsafe.Pointer(&staticuint64s[*ptr])
         .          .     98:		if sys.BigEndian {
         .          .     99:			p = add(p, 7)
         .          .    100:		}
         .          .    101:		stringStructOf(&str).str = p
         .          .    102:		stringStructOf(&str).len = 1
         .          .    103:		return
         .          .    104:	}
         .          .    105:
         .          .    106:	var p unsafe.Pointer
      10ms       10ms    107:	if buf != nil && n <= len(buf) {
         .          .    108:		p = unsafe.Pointer(buf)
         .          .    109:	} else {
         .      290ms    110:		p = mallocgc(uintptr(n), nil, false)
         .          .    111:	}
         .          .    112:	stringStructOf(&str).str = p
         .          .    113:	stringStructOf(&str).len = n
         .       40ms    114:	memmove(p, unsafe.Pointer(ptr), uintptr(n))
      10ms       10ms    115:	return
         .          .    116:}
         .          .    117:
         .          .    118:// stringDataOnStack reports whether the string's data is
         .          .    119:// stored on the current goroutine's stack.
         .          .    120:func stringDataOnStack(s string) bool {

However if we walk through code

package main

import (
	"os"
	"runtime/pprof"
)

func main() {
	f, err := os.Create("prof.cpu")
	if err != nil {
		panic(err)
	}
	defer f.Close()

	if err := pprof.StartCPUProfile(f); err != nil {
		panic(err)
	}
	defer pprof.StopCPUProfile()

	m := make(map[string][]byte)
	m["a"] = []byte("d1")
	for i := 0; i < 10; i++ {
		m[string('a'+i)] = []byte{byte(0xFF & i), byte(i)}
	}
	for i := 0; i < 1e9; i++ {
		value, _ := retrieve(m, []byte("b"))
		if len(value) == 100 {
			panic(string(value))
		}
	}
}

func retrieve(m map[string][]byte, key []byte) ([]byte, int) {
	if value, ok := m[string(key)]; ok {
		return value, 0
	}
	return nil, 1
}

we successfully see runtime.slicebytetostringtmp successfully generated by

$ go tool compile -W main.go | grep TMP
.   .   .   .   BYTES2STRTMP l(34) esc(no) tc(1) string
.   .   .   .   BYTES2STRTMP l(34) esc(no) tc(1) string
.   .   .   BYTES2STRTMP l(34) esc(no) tc(1) string
.   .   .   BYTES2STRTMP l(34) esc(no) tc(1) string

which correctly points to line 34
Screen Shot 2021-08-14 at 1 43 44 AM

before walk os.(*File).close
.   AS l(1) tc(1)
.   .   NAME-main..this g(2) l(1) x(0) class(PPARAM) esc(no) tc(1) assigned used PTR-@0
.   .   CONVNOP l(1) tc(1) PTR-@0
.   .   .   DOTPTR l(1) x(0) tc(1) implicit(true) os.file PTR-@0
.   .   .   .   NAME-main..this g(2) l(1) x(0) class(PPARAM) esc(no) tc(1) assigned used PTR-@0

.   RETJMP l(1) tc(1) os.(*file).close
after walk os.(*File).close
.   AS l(1) tc(1) hascall
.   .   NAME-main..this g(2) l(1) x(0) class(PPARAM) esc(no) tc(1) assigned used PTR-@0
.   .   CONVNOP l(1) tc(1) hascall PTR-@0
.   .   .   DOTPTR l(1) x(0) tc(1) implicit(true) hascall os.file PTR-@0
.   .   .   .   NAME-main..this g(2) l(1) x(0) class(PPARAM) esc(no) tc(1) assigned used PTR-@0

.   RETJMP l(1) tc(1) os.(*file).close
enter os.(*File).close
.   AS l(1)
.   .   NAME-main.~r0 g(1) l(240) x(8) class(PPARAMOUT) esc(no) error

before walk main
.   DCL l(9)
.   .   NAME-main.f g(1) l(9) x(0) class(PAUTO) esc(no) tc(1) used PTR-@0

.   DCL l(9)
.   .   NAME-main.err g(2) l(9) x(0) class(PAUTO) esc(no) tc(1) used error

.   DCL l(9)
.   .   NAME-os.name l(295) x(0) class(PAUTO) esc(no) tc(1) assigned used string

.   DCL l(9)
.   .   NAME-main.~R0 l(9) x(0) class(PAUTO) esc(no) tc(1) assigned used PTR-@0

.   DCL l(9)
.   .   NAME-main.~R1 l(9) x(0) class(PAUTO) esc(no) tc(1) assigned used error

.   AS2 l(9) tc(1)
.   AS2-list
.   .   NAME-os.name l(295) x(0) class(PAUTO) esc(no) tc(1) assigned used string
.   AS2-rlist
.   .   LITERAL-"prof.cpu" l(9) tc(1) string

.   AS l(9) tc(1)
.   .   NAME-main.~R0 l(9) x(0) class(PAUTO) esc(no) tc(1) assigned used PTR-@0

.   AS l(9) tc(1)
.   .   NAME-main.~R1 l(9) x(0) class(PAUTO) esc(no) tc(1) assigned used error

.   INLMARK l(+9) x(0)

.   DCL l(9) tc(1)
.   .   NAME-os..autotmp_3 l(296) x(0) class(PAUTO) esc(no) tc(1) assigned used PTR-@0

.   AS l(9) tc(1)
.   .   NAME-os..autotmp_3 l(296) x(0) class(PAUTO) esc(no) tc(1) assigned used PTR-@0

.   DCL l(9) tc(1)
.   .   NAME-os..autotmp_4 l(296) x(0) class(PAUTO) esc(no) tc(1) assigned used error

.   AS l(9) tc(1)
.   .   NAME-os..autotmp_4 l(296) x(0) class(PAUTO) esc(no) tc(1) assigned used error

.   AS l(296) tc(1)
.   .   NAME-main..autotmp_18 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0

.   AS l(296) tc(1)
.   .   NAME-main..autotmp_19 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used error

.   AS2FUNC l(296) tc(1)
.   .   CALLFUNC l(296) tc(1) STRUCT-@0
.   .   .   NAME-os.OpenFile l(305) x(0) class(PFUNC) tc(1) used FUNC-@0
.   .   CALLFUNC-list
.   .   .   NAME-os.name l(295) x(0) class(PAUTO) esc(no) tc(1) assigned used string

.   .   .   LITERAL-1538 l(296) tc(1) int

.   .   .   LITERAL-438 l(296) tc(1) os.FileMode
.   AS2FUNC-list
.   .   NAME-main..autotmp_18 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0

.   .   NAME-main..autotmp_19 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used error

.   AS2 l(296) tc(1)
.   AS2-list
.   .   NAME-os..autotmp_3 l(296) x(0) class(PAUTO) esc(no) tc(1) assigned used PTR-@0

.   .   NAME-os..autotmp_4 l(296) x(0) class(PAUTO) esc(no) tc(1) assigned used error
.   AS2-rlist
.   .   NAME-main..autotmp_18 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0

.   .   NAME-main..autotmp_19 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used error

.   VARKILL l(296) tc(1)
.   .   NAME-main..autotmp_19 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used error

.   VARKILL l(296) tc(1)
.   .   NAME-main..autotmp_18 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0

.   AS2 l(9) tc(1)
.   AS2-list
.   .   NAME-main.~R0 l(9) x(0) class(PAUTO) esc(no) tc(1) assigned used PTR-@0

.   .   NAME-main.~R1 l(9) x(0) class(PAUTO) esc(no) tc(1) assigned used error
.   AS2-rlist
.   .   NAME-os..autotmp_3 l(296) x(0) class(PAUTO) esc(no) tc(1) assigned used PTR-@0

.   .   NAME-os..autotmp_4 l(296) x(0) class(PAUTO) esc(no) tc(1) assigned used error

.   GOTO l(9) tc(1) main..i0

.   LABEL l(9) tc(1) main..i0

.   AS2 l(9) colas(true) tc(1)
.   AS2-list
.   .   NAME-main.f g(1) l(9) x(0) class(PAUTO) esc(no) tc(1) used PTR-@0

.   .   NAME-main.err g(2) l(9) x(0) class(PAUTO) esc(no) tc(1) used error
.   AS2-rlist
.   .   CONVNOP l(9) tc(1) hascall PTR-@0
.   .   .   NAME-main.~R0 l(9) x(0) class(PAUTO) esc(no) tc(1) assigned used PTR-@0

.   .   NAME-main.~R1 l(9) x(0) class(PAUTO) esc(no) tc(1) assigned used error

.   IF l(10) tc(1)
.   .   NE l(10) tc(1) bool
.   .   .   NAME-main.err g(2) l(9) x(0) class(PAUTO) esc(no) tc(1) used error
.   .   .   LITERAL-nil tc(1) .nil error
.   IF-body
.   .   PANIC l(11) tc(1)
.   .   .   NAME-main.err g(2) l(9) x(0) class(PAUTO) esc(no) tc(1) used error

.   DEFER l(13) esc(N) tc(1)
.   .   CALLMETH l(13) tc(1) error
.   .   .   DOTMETH l(13) tc(1) os.(*File).Close FUNC-@0
.   .   .   .   NAME-main.f g(1) l(9) x(0) class(PAUTO) esc(no) tc(1) used PTR-@0

.   DCL l(15)
.   .   NAME-main.err g(3) l(15) x(0) class(PAUTO) esc(no) tc(1) used error

.   AS l(15) tc(1)
.   .   NAME-main..autotmp_18 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0
.   .   NAME-main.f g(1) l(9) x(0) class(PAUTO) esc(no) tc(1) used PTR-@0

.   AS l(15) colas(true) tc(1)
.   .   NAME-main.err g(3) l(15) x(0) class(PAUTO) esc(no) tc(1) used error
.   .   CALLFUNC l(15) tc(1) error
.   .   .   NAME-pprof.StartCPUProfile l(727) x(0) class(PFUNC) tc(1) used FUNC-@0
.   .   CALLFUNC-list
.   .   .   CONVIFACE l(15) tc(1) implicit(true) io.Writer
.   .   .   .   NAME-main..autotmp_18 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0

.   VARKILL l(15) tc(1)
.   .   NAME-main..autotmp_18 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0

.   IF l(15) tc(1)
.   .   NE l(15) tc(1) bool
.   .   .   NAME-main.err g(3) l(15) x(0) class(PAUTO) esc(no) tc(1) used error
.   .   .   LITERAL-nil tc(1) .nil error
.   IF-body
.   .   PANIC l(16) tc(1)
.   .   .   NAME-main.err g(3) l(15) x(0) class(PAUTO) esc(no) tc(1) used error

.   DEFER l(18) esc(N) tc(1)
.   .   CALLFUNC l(18) tc(1)
.   .   .   NAME-pprof.StopCPUProfile l(786) x(0) class(PFUNC) tc(1) used FUNC-@0

.   DCL l(20)
.   .   NAME-main.m g(4) l(20) x(0) class(PAUTO) esc(no) tc(1) used MAP-@0

.   AS l(20) colas(true) tc(1)
.   .   NAME-main.m g(4) l(20) x(0) class(PAUTO) esc(no) tc(1) used MAP-@0
.   .   MAKEMAP l(20) esc(no) tc(1) MAP-@0
.   .   .   LITERAL-0 l(20) untyped int

.   AS l(21) tc(1)
.   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0
.   .   STR2BYTES l(21) esc(h) tc(1) SLICE-@0
.   .   .   LITERAL-"d1" l(21) tc(1) string

.   AS l(21) tc(1)
.   .   INDEXMAP l(21) tc(1) SLICE-@0
.   .   .   NAME-main.m g(4) l(20) x(0) class(PAUTO) esc(no) tc(1) used MAP-@0
.   .   .   LITERAL-"a" l(21) tc(1) string
.   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   VARKILL l(21) tc(1)
.   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   DCL l(22)
.   .   NAME-main.i g(5) l(22) x(0) class(PAUTO) esc(no) tc(1) assigned used int

.   AS l(22) colas(true) tc(1)
.   .   NAME-main.i g(5) l(22) x(0) class(PAUTO) esc(no) tc(1) assigned used int
.   .   LITERAL-0 l(22) tc(1) int

.   FOR l(22) tc(1)
.   .   LT l(22) tc(1) bool
.   .   .   NAME-main.i g(5) l(22) x(0) class(PAUTO) esc(no) tc(1) assigned used int
.   .   .   LITERAL-10 l(22) tc(1) int
.   .   BLOCK l(22)
.   .   BLOCK-list
.   .   .   ASOP-ADD l(22) tc(1) implicit(true) int
.   .   .   .   NAME-main.i g(5) l(22) x(0) class(PAUTO) esc(no) tc(1) assigned used int
.   .   .   .   LITERAL-1 l(22) tc(1) int
.   FOR-body
.   .   AS l(23) tc(1)
.   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0
.   .   .   SLICELIT l(23) esc(h) tc(1) SLICE-@0
.   .   .   .   LITERAL-2 l(23) untyped int
.   .   .   SLICELIT-list
.   .   .   .   CONV l(23) tc(1) byte
.   .   .   .   .   AND l(23) tc(1) int
.   .   .   .   .   .   LITERAL-255 l(23) tc(1) int
.   .   .   .   .   .   NAME-main.i g(5) l(22) x(0) class(PAUTO) esc(no) tc(1) assigned used int

.   .   .   .   CONV l(23) tc(1) byte
.   .   .   .   .   NAME-main.i g(5) l(22) x(0) class(PAUTO) esc(no) tc(1) assigned used int

.   .   AS l(23) tc(1)
.   .   .   INDEXMAP l(23) tc(1) SLICE-@0
.   .   .   .   NAME-main.m g(4) l(20) x(0) class(PAUTO) esc(no) tc(1) used MAP-@0
.   .   .   .   RUNESTR l(23) esc(h) tc(1) string
.   .   .   .   .   ADD l(23) tc(1) int
.   .   .   .   .   .   LITERAL-97 l(23) tc(1) int
.   .   .   .   .   .   NAME-main.i g(5) l(22) x(0) class(PAUTO) esc(no) tc(1) assigned used int
.   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   .   VARKILL l(23) tc(1)
.   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   DCL l(25)
.   .   NAME-main.i g(6) l(25) x(0) class(PAUTO) esc(no) tc(1) assigned used int

.   AS l(25) colas(true) tc(1)
.   .   NAME-main.i g(6) l(25) x(0) class(PAUTO) esc(no) tc(1) assigned used int
.   .   LITERAL-0 l(25) tc(1) int

.   FOR l(25) tc(1)
.   .   LT l(25) tc(1) bool
.   .   .   NAME-main.i g(6) l(25) x(0) class(PAUTO) esc(no) tc(1) assigned used int
.   .   .   LITERAL-1000000000 l(25) tc(1) int
.   .   BLOCK l(25)
.   .   BLOCK-list
.   .   .   ASOP-ADD l(25) tc(1) implicit(true) int
.   .   .   .   NAME-main.i g(6) l(25) x(0) class(PAUTO) esc(no) tc(1) assigned used int
.   .   .   .   LITERAL-1 l(25) tc(1) int
.   FOR-body
.   .   DCL l(26)
.   .   .   NAME-main.value g(7) l(26) x(0) class(PAUTO) esc(no) tc(1) used SLICE-@0

.   .   DCL l(26)
.   .   .   NAME-main.m l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used MAP-@0

.   .   DCL l(26)
.   .   .   NAME-main.key l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0

.   .   DCL l(26)
.   .   .   NAME-main.~r2 l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0

.   .   DCL l(26)
.   .   .   NAME-main.~r3 l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used int

.   .   AS l(26) tc(1)
.   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0
.   .   .   STR2BYTES l(26) esc(no) tc(1) SLICE-@0
.   .   .   .   LITERAL-"b" l(26) tc(1) string

.   .   AS2 l(26) tc(1)
.   .   AS2-list
.   .   .   NAME-main.m l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used MAP-@0

.   .   .   NAME-main.key l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0
.   .   AS2-rlist
.   .   .   NAME-main.m g(4) l(20) x(0) class(PAUTO) esc(no) tc(1) used MAP-@0

.   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   .   VARKILL l(26) tc(1)
.   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   .   AS l(26) tc(1)
.   .   .   NAME-main.~r2 l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0

.   .   AS l(26) tc(1)
.   .   .   NAME-main.~r3 l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used int

.   .   INLMARK l(+26) x(1)

.   .   DCL l(34)
.   .   .   NAME-main.value l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0

.   .   DCL l(34)
.   .   .   NAME-main.ok l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used bool

.   .   AS l(34) tc(1)
.   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   .   AS2MAPR l(34) colas(true) tc(1)
.   .   .   INDEXMAP l(34) tc(1) SLICE-@0
.   .   .   .   NAME-main.m l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used MAP-@0
.   .   .   .   BYTES2STRTMP l(34) esc(no) tc(1) string
.   .   .   .   .   NAME-main.key l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0
.   .   AS2MAPR-list
.   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   .   .   NAME-main..autotmp_21 l(34) x(0) class(PAUTO) esc(N) tc(1) used bool

.   .   AS l(34) tc(1)
.   .   .   NAME-main.value l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0
.   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   .   AS l(34) tc(1)
.   .   .   NAME-main.ok l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used bool
.   .   .   NAME-main..autotmp_21 l(34) x(0) class(PAUTO) esc(N) tc(1) used bool

.   .   VARKILL l(34) tc(1)
.   .   .   NAME-main..autotmp_21 l(34) x(0) class(PAUTO) esc(N) tc(1) used bool

.   .   VARKILL l(34) tc(1)
.   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   .   IF l(34) tc(1)
.   .   .   NAME-main.ok l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used bool
.   .   IF-body
.   .   .   AS2 l(26) tc(1)
.   .   .   AS2-list
.   .   .   .   NAME-main.~r2 l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0

.   .   .   .   NAME-main.~r3 l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used int
.   .   .   AS2-rlist
.   .   .   .   NAME-main.value l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0

.   .   .   .   LITERAL-0 l(35) tc(1) int

.   .   .   GOTO l(26) tc(1) main..i1

.   .   AS2 l(26) tc(1)
.   .   AS2-list
.   .   .   NAME-main.~r2 l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0

.   .   .   NAME-main.~r3 l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used int
.   .   AS2-rlist
.   .   .   LITERAL-nil tc(1) .nil SLICE-@0

.   .   .   LITERAL-1 l(37) tc(1) int

.   .   GOTO l(26) tc(1) main..i1

.   .   LABEL l(26) tc(1) main..i1

.   .   AS2 l(26) colas(true) tc(1)
.   .   AS2-list
.   .   .   NAME-main.value g(7) l(26) x(0) class(PAUTO) esc(no) tc(1) used SLICE-@0

.   .   .   NAME-_ x(0) tc(1) assigned blank
.   .   AS2-rlist
.   .   .   CONVNOP l(26) tc(1) hascall SLICE-@0
.   .   .   .   NAME-main.~r2 l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0

.   .   .   NAME-main.~r3 l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used int

.   .   IF l(27) tc(1)
.   .   .   EQ-init
.   .   .   .   AS l(27) tc(1)
.   .   .   .   .   NAME-main..autotmp_22 l(27) x(0) class(PAUTO) esc(N) tc(1) assigned used int
.   .   .   .   .   LEN l(27) tc(1) int
.   .   .   .   .   .   NAME-main.value g(7) l(26) x(0) class(PAUTO) esc(no) tc(1) used SLICE-@0
.   .   .   EQ l(27) tc(1) hascall bool
.   .   .   .   NAME-main..autotmp_22 l(27) x(0) class(PAUTO) esc(N) tc(1) assigned used int
.   .   .   .   LITERAL-100 l(27) tc(1) int
.   .   IF-rlist
.   .   .   VARKILL l(27) tc(1)
.   .   .   .   NAME-main..autotmp_22 l(27) x(0) class(PAUTO) esc(N) tc(1) assigned used int
.   .   IF-body
.   .   .   VARKILL l(27) tc(1)
.   .   .   .   NAME-main..autotmp_22 l(27) x(0) class(PAUTO) esc(N) tc(1) assigned used int

.   .   .   AS l(28) tc(1)
.   .   .   .   NAME-main..autotmp_23 l(28) x(0) class(PAUTO) esc(N) tc(1) assigned used string
.   .   .   .   BYTES2STR l(28) esc(h) tc(1) string
.   .   .   .   .   NAME-main.value g(7) l(26) x(0) class(PAUTO) esc(no) tc(1) used SLICE-@0

.   .   .   PANIC l(28) tc(1)
.   .   .   .   NAME-main..autotmp_23 l(28) x(0) class(PAUTO) esc(N) tc(1) assigned used string

.   .   .   VARKILL l(28) tc(1)
.   .   .   .   NAME-main..autotmp_23 l(28) x(0) class(PAUTO) esc(N) tc(1) assigned used string
after walk main
.   DCL l(9)
.   .   NAME-main.f g(1) l(9) x(0) class(PAUTO) esc(no) tc(1) used PTR-@0

.   DCL l(9)
.   .   NAME-main.err g(2) l(9) x(0) class(PAUTO) esc(no) tc(1) used error

.   DCL l(9)
.   .   NAME-os.name l(295) x(0) class(PAUTO) esc(no) tc(1) assigned used string

.   DCL l(9)
.   .   NAME-main.~R0 l(9) x(0) class(PAUTO) esc(no) tc(1) assigned used PTR-@0

.   DCL l(9)
.   .   NAME-main.~R1 l(9) x(0) class(PAUTO) esc(no) tc(1) assigned used error

.   BLOCK l(9)
.   BLOCK-list
.   .   AS l(9) tc(1)
.   .   .   NAME-os.name l(295) x(0) class(PAUTO) esc(no) tc(1) assigned used string
.   .   .   LITERAL-"prof.cpu" l(9) tc(1) string

.   AS l(9) tc(1)
.   .   NAME-main.~R0 l(9) x(0) class(PAUTO) esc(no) tc(1) assigned used PTR-@0

.   AS l(9) tc(1)
.   .   NAME-main.~R1 l(9) x(0) class(PAUTO) esc(no) tc(1) assigned used error

.   INLMARK l(+9) x(0)

.   DCL l(9) tc(1)
.   .   NAME-os..autotmp_3 l(296) x(0) class(PAUTO) esc(no) tc(1) assigned used PTR-@0

.   AS l(9) tc(1)
.   .   NAME-os..autotmp_3 l(296) x(0) class(PAUTO) esc(no) tc(1) assigned used PTR-@0

.   DCL l(9) tc(1)
.   .   NAME-os..autotmp_4 l(296) x(0) class(PAUTO) esc(no) tc(1) assigned used error

.   AS l(9) tc(1)
.   .   NAME-os..autotmp_4 l(296) x(0) class(PAUTO) esc(no) tc(1) assigned used error

.   AS l(296) tc(1)
.   .   NAME-main..autotmp_18 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0

.   AS l(296) tc(1)
.   .   NAME-main..autotmp_19 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used error

.   BLOCK-init
.   .   CALLFUNC l(296) tc(1) hascall STRUCT-@0
.   .   .   NAME-os.OpenFile l(305) x(0) class(PFUNC) tc(1) used FUNC-@0
.   .   CALLFUNC-rlist
.   .   .   NAME-os.name l(295) x(0) class(PAUTO) esc(no) tc(1) assigned used string

.   .   .   LITERAL-1538 l(296) tc(1) int

.   .   .   LITERAL-438 l(296) tc(1) os.FileMode
.   BLOCK l(296) hascall
.   BLOCK-list
.   .   AS l(296) tc(1)
.   .   .   NAME-main..autotmp_18 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0
.   .   .   RESULT l(296) x(32) tc(1) PTR-@0

.   .   AS l(296) tc(1)
.   .   .   NAME-main..autotmp_19 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used error
.   .   .   RESULT l(296) x(40) tc(1) error

.   BLOCK l(296)
.   BLOCK-list
.   .   AS l(296) tc(1)
.   .   .   NAME-os..autotmp_3 l(296) x(0) class(PAUTO) esc(no) tc(1) assigned used PTR-@0
.   .   .   NAME-main..autotmp_18 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0

.   .   AS l(296) tc(1)
.   .   .   NAME-os..autotmp_4 l(296) x(0) class(PAUTO) esc(no) tc(1) assigned used error
.   .   .   NAME-main..autotmp_19 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used error

.   VARKILL l(296) tc(1)
.   .   NAME-main..autotmp_19 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used error

.   VARKILL l(296) tc(1)
.   .   NAME-main..autotmp_18 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0

.   BLOCK l(9)
.   BLOCK-list
.   .   AS l(9) tc(1)
.   .   .   NAME-main.~R0 l(9) x(0) class(PAUTO) esc(no) tc(1) assigned used PTR-@0
.   .   .   NAME-os..autotmp_3 l(296) x(0) class(PAUTO) esc(no) tc(1) assigned used PTR-@0

.   .   AS l(9) tc(1)
.   .   .   NAME-main.~R1 l(9) x(0) class(PAUTO) esc(no) tc(1) assigned used error
.   .   .   NAME-os..autotmp_4 l(296) x(0) class(PAUTO) esc(no) tc(1) assigned used error

.   GOTO l(9) tc(1) main..i0

.   LABEL l(9) tc(1) main..i0

.   BLOCK-init
.   .   AS l(9) tc(1)
.   .   .   NAME-main..autotmp_24 l(9) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0
.   .   .   CONVNOP l(9) tc(1) PTR-@0
.   .   .   .   NAME-main.~R0 l(9) x(0) class(PAUTO) esc(no) tc(1) assigned used PTR-@0
.   BLOCK l(9) hascall
.   BLOCK-list
.   .   AS l(9) tc(1)
.   .   .   NAME-main.f g(1) l(9) x(0) class(PAUTO) esc(no) tc(1) used PTR-@0
.   .   .   NAME-main..autotmp_24 l(9) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0

.   .   AS l(9) tc(1)
.   .   .   NAME-main.err g(2) l(9) x(0) class(PAUTO) esc(no) tc(1) used error
.   .   .   NAME-main.~R1 l(9) x(0) class(PAUTO) esc(no) tc(1) assigned used error

.   IF l(10) tc(1)
.   .   NE l(10) tc(1) bool
.   .   .   NAME-main.err g(2) l(9) x(0) class(PAUTO) esc(no) tc(1) used error
.   .   .   LITERAL-nil tc(1) .nil error
.   IF-body
.   .   CALLFUNC-init
.   .   .   AS l(11)
.   .   .   .   NAME-main..autotmp_25 l(11) x(0) class(PAUTO) esc(N) tc(1) used error
.   .   .   .   NAME-main.err g(2) l(9) x(0) class(PAUTO) esc(no) tc(1) used error

.   .   .   AS l(11)
.   .   .   .   NAME-main..autotmp_26 l(11) x(0) class(PAUTO) esc(N) tc(1) used PTR-@0
.   .   .   .   ITAB l(11) tc(1) PTR-@0
.   .   .   .   .   NAME-main..autotmp_25 l(11) x(0) class(PAUTO) esc(N) tc(1) used error

.   .   .   IF l(11)
.   .   .   .   NE l(11) tc(1) untyped bool
.   .   .   .   .   NAME-main..autotmp_26 l(11) x(0) class(PAUTO) esc(N) tc(1) used PTR-@0
.   .   .   .   .   LITERAL-nil l(11) tc(1) PTR-@0
.   .   .   IF-body
.   .   .   .   AS l(11)
.   .   .   .   .   NAME-main..autotmp_26 l(11) x(0) class(PAUTO) esc(N) tc(1) used PTR-@0
.   .   .   .   .   DOTPTR l(11) x(8) tc(1) bounded PTR-@0
.   .   .   .   .   .   NAME-main..autotmp_26 l(11) x(0) class(PAUTO) esc(N) tc(1) used PTR-@0
.   .   CALLFUNC l(11) tc(1) hascall
.   .   .   NAME-runtime.gopanic x(0) class(PFUNC) tc(1) used FUNC-@0
.   .   CALLFUNC-rlist
.   .   .   EFACE l(11) tc(1) INTER-@0
.   .   .   .   NAME-main..autotmp_26 l(11) x(0) class(PAUTO) esc(N) tc(1) used PTR-@0
.   .   .   .   IDATA l(11) tc(1) PTR-@0
.   .   .   .   .   NAME-main..autotmp_25 l(11) x(0) class(PAUTO) esc(N) tc(1) used error

.   DEFER l(13) esc(N) tc(1)
.   .   CALLMETH l(13) tc(1) hascall error
.   .   .   DOTMETH l(13) tc(1) os.(*File).Close FUNC-@0
.   .   CALLMETH-rlist
.   .   .   NAME-main.f g(1) l(9) x(0) class(PAUTO) esc(no) tc(1) used PTR-@0

.   DCL l(15)
.   .   NAME-main.err g(3) l(15) x(0) class(PAUTO) esc(no) tc(1) used error

.   AS l(15) tc(1)
.   .   NAME-main..autotmp_18 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0
.   .   NAME-main.f g(1) l(9) x(0) class(PAUTO) esc(no) tc(1) used PTR-@0

.   AS l(15) colas(true) tc(1) hascall
.   .   NAME-main.err g(3) l(15) x(0) class(PAUTO) esc(no) tc(1) used error
.   .   CALLFUNC l(15) tc(1) hascall error
.   .   .   NAME-pprof.StartCPUProfile l(727) x(0) class(PFUNC) tc(1) used FUNC-@0
.   .   CALLFUNC-rlist
.   .   .   EFACE l(15) tc(1) io.Writer
.   .   .   .   ADDR l(15) tc(1) PTR-@0
.   .   .   .   .   NAME-go.itab.*os.File,io.Writer l(15) x(0) class(PEXTERN) tc(1) uint8
.   .   .   .   NAME-main..autotmp_18 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0

.   VARKILL l(15) tc(1)
.   .   NAME-main..autotmp_18 l(296) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0

.   IF l(15) tc(1)
.   .   NE l(15) tc(1) bool
.   .   .   NAME-main.err g(3) l(15) x(0) class(PAUTO) esc(no) tc(1) used error
.   .   .   LITERAL-nil tc(1) .nil error
.   IF-body
.   .   CALLFUNC-init
.   .   .   AS l(16)
.   .   .   .   NAME-main..autotmp_27 l(16) x(0) class(PAUTO) esc(N) tc(1) used error
.   .   .   .   NAME-main.err g(3) l(15) x(0) class(PAUTO) esc(no) tc(1) used error

.   .   .   AS l(16)
.   .   .   .   NAME-main..autotmp_28 l(16) x(0) class(PAUTO) esc(N) tc(1) used PTR-@0
.   .   .   .   ITAB l(16) tc(1) PTR-@0
.   .   .   .   .   NAME-main..autotmp_27 l(16) x(0) class(PAUTO) esc(N) tc(1) used error

.   .   .   IF l(16)
.   .   .   .   NE l(16) tc(1) untyped bool
.   .   .   .   .   NAME-main..autotmp_28 l(16) x(0) class(PAUTO) esc(N) tc(1) used PTR-@0
.   .   .   .   .   LITERAL-nil l(16) tc(1) PTR-@0
.   .   .   IF-body
.   .   .   .   AS l(16)
.   .   .   .   .   NAME-main..autotmp_28 l(16) x(0) class(PAUTO) esc(N) tc(1) used PTR-@0
.   .   .   .   .   DOTPTR l(16) x(8) tc(1) bounded PTR-@0
.   .   .   .   .   .   NAME-main..autotmp_28 l(16) x(0) class(PAUTO) esc(N) tc(1) used PTR-@0
.   .   CALLFUNC l(16) tc(1) hascall
.   .   .   NAME-runtime.gopanic x(0) class(PFUNC) tc(1) used FUNC-@0
.   .   CALLFUNC-rlist
.   .   .   EFACE l(16) tc(1) INTER-@0
.   .   .   .   NAME-main..autotmp_28 l(16) x(0) class(PAUTO) esc(N) tc(1) used PTR-@0
.   .   .   .   IDATA l(16) tc(1) PTR-@0
.   .   .   .   .   NAME-main..autotmp_27 l(16) x(0) class(PAUTO) esc(N) tc(1) used error

.   DEFER l(18) esc(N) tc(1)
.   .   CALLFUNC l(18) tc(1) hascall
.   .   .   NAME-pprof.StopCPUProfile l(786) x(0) class(PFUNC) tc(1) used FUNC-@0

.   DCL l(20)
.   .   NAME-main.m g(4) l(20) x(0) class(PAUTO) esc(no) tc(1) used MAP-@0

.   AS-init
.   .   AS l(20) tc(1)
.   .   .   NAME-main..autotmp_29 l(20) x(0) class(PAUTO) esc(N) tc(1) addrtaken assigned used STRUCT-@0

.   .   AS l(20) tc(1)
.   .   .   NAME-main..autotmp_30 l(20) x(0) class(PAUTO) esc(N) tc(1) addrtaken assigned used STRUCT-@0

.   .   AS l(20) tc(1)
.   .   .   DOTPTR l(20) x(16) tc(1) .buckets PTR-@0
.   .   .   .   ADDR l(20) tc(1) PTR-@0
.   .   .   .   .   NAME-main..autotmp_29 l(20) x(0) class(PAUTO) esc(N) tc(1) addrtaken assigned used STRUCT-@0
.   .   .   ADDR l(20) tc(1) PTR-@0
.   .   .   .   NAME-main..autotmp_30 l(20) x(0) class(PAUTO) esc(N) tc(1) addrtaken assigned used STRUCT-@0

.   .   AS l(20) tc(1)
.   .   .   NAME-main..autotmp_31 l(20) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0
.   .   .   ADDR l(20) tc(1) PTR-@0
.   .   .   .   NAME-main..autotmp_29 l(20) x(0) class(PAUTO) esc(N) tc(1) addrtaken assigned used STRUCT-@0

.   .   AS l(20) tc(1) hascall
.   .   .   DOTPTR l(20) x(12) tc(1) hascall .hash0 uint32
.   .   .   .   NAME-main..autotmp_31 l(20) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0
.   .   .   CALLFUNC l(20) tc(1) hascall uint32
.   .   .   .   NAME-runtime.fastrand x(0) class(PFUNC) tc(1) used FUNC-@0
.   AS l(20) colas(true) tc(1) hascall
.   .   NAME-main.m g(4) l(20) x(0) class(PAUTO) esc(no) tc(1) used MAP-@0
.   .   CONVNOP l(20) tc(1) MAP-@0
.   .   .   ADDR l(20) tc(1) PTR-@0
.   .   .   .   NAME-main..autotmp_29 l(20) x(0) class(PAUTO) esc(N) tc(1) addrtaken assigned used STRUCT-@0

.   AS-init
.   .   AS l(21) tc(1)
.   .   .   NAME-main..autotmp_32 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0
.   .   .   NEWOBJ l(21) tc(1) nonnil PTR-@0
.   .   .   .   ADDR l(21) tc(1) PTR-@0
.   .   .   .   .   NAME-type.[2]uint8 x(0) class(PEXTERN) tc(1) uint8

.   .   AS l(21) tc(1) hascall
.   .   .   DEREF l(21) tc(1) hascall ARRAY-@0
.   .   .   .   NAME-main..autotmp_32 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0
.   .   .   DEREF l(21) tc(1) hascall ARRAY-@0
.   .   .   .   CONVNOP l(21) tc(1) PTR-@0
.   .   .   .   .   SPTR l(21) tc(1) PTR-@0
.   .   .   .   .   .   LITERAL-"d1" l(21) tc(1) string
.   AS l(21) tc(1) hascall
.   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0
.   .   SLICEARR l(21) esc(h) tc(1) hascall SLICE-@0
.   .   .   NAME-main..autotmp_32 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0

.   AS-init
.   .   AS l(21) tc(1) hascall
.   .   .   NAME-main..autotmp_33 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0
.   .   .   CALLFUNC l(21) tc(1) nonnil hascall PTR-@0
.   .   .   .   NAME-runtime.mapassign_faststr x(0) class(PFUNC) tc(1) used FUNC-@0
.   .   .   CALLFUNC-rlist
.   .   .   .   ADDR l(21) tc(1) PTR-@0
.   .   .   .   .   NAME-type.map[string][]uint8 x(0) class(PEXTERN) tc(1) uint8

.   .   .   .   NAME-main.m g(4) l(20) x(0) class(PAUTO) esc(no) tc(1) used MAP-@0

.   .   .   .   LITERAL-"a" l(21) tc(1) string
.   AS l(21) tc(1) hascall
.   .   DEREF l(21) tc(1) hascall SLICE-@0
.   .   .   NAME-main..autotmp_33 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0
.   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   VARKILL l(21) tc(1)
.   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   DCL l(22)
.   .   NAME-main.i g(5) l(22) x(0) class(PAUTO) esc(no) tc(1) assigned used int

.   AS l(22) colas(true) tc(1)
.   .   NAME-main.i g(5) l(22) x(0) class(PAUTO) esc(no) tc(1) assigned used int
.   .   LITERAL-0 l(22) tc(1) int

.   FOR l(22) tc(1)
.   .   LT l(22) tc(1) bool
.   .   .   NAME-main.i g(5) l(22) x(0) class(PAUTO) esc(no) tc(1) assigned used int
.   .   .   LITERAL-10 l(22) tc(1) int
.   .   BLOCK l(22)
.   .   BLOCK-list
.   .   .   AS l(22) tc(1) implicit(true) int
.   .   .   .   NAME-main.i g(5) l(22) x(0) class(PAUTO) esc(no) tc(1) assigned used int
.   .   .   .   ADD l(22) tc(1) int
.   .   .   .   .   NAME-main.i g(5) l(22) x(0) class(PAUTO) esc(no) tc(1) assigned used int
.   .   .   .   .   LITERAL-1 l(22) tc(1) int
.   FOR-body
.   .   EMPTY-init
.   .   .   AS l(23) tc(1)
.   .   .   .   NAME-main..autotmp_34 l(23) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0
.   .   .   .   NEWOBJ l(23) tc(1) nonnil PTR-@0
.   .   .   .   .   ADDR l(23) tc(1) PTR-@0
.   .   .   .   .   .   NAME-type.[2]uint8 x(0) class(PEXTERN) tc(1) uint8

.   .   .   BLOCK l(23)
.   .   .   BLOCK-list
.   .   .   .   AS l(23) tc(1) hascall
.   .   .   .   .   INDEX l(23) tc(1) bounded hascall byte
.   .   .   .   .   .   DEREF l(23) tc(1) implicit(true) hascall ARRAY-@0
.   .   .   .   .   .   .   NAME-main..autotmp_34 l(23) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0
.   .   .   .   .   .   LITERAL-0 l(23) tc(1) int
.   .   .   .   .   CONV l(23) tc(1) byte
.   .   .   .   .   .   AND l(23) tc(1) int
.   .   .   .   .   .   .   LITERAL-255 l(23) tc(1) int
.   .   .   .   .   .   .   NAME-main.i g(5) l(22) x(0) class(PAUTO) esc(no) tc(1) assigned used int

.   .   .   BLOCK l(23)
.   .   .   BLOCK-list
.   .   .   .   AS l(23) tc(1) hascall
.   .   .   .   .   INDEX l(23) tc(1) bounded hascall byte
.   .   .   .   .   .   DEREF l(23) tc(1) implicit(true) hascall ARRAY-@0
.   .   .   .   .   .   .   NAME-main..autotmp_34 l(23) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0
.   .   .   .   .   .   LITERAL-1 l(23) tc(1) int
.   .   .   .   .   CONV l(23) tc(1) byte
.   .   .   .   .   .   NAME-main.i g(5) l(22) x(0) class(PAUTO) esc(no) tc(1) assigned used int

.   .   .   BLOCK l(23)
.   .   .   BLOCK-list
.   .   .   .   AS l(23) tc(1) hascall
.   .   .   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0
.   .   .   .   .   SLICEARR l(23) tc(1) hascall SLICE-@0
.   .   .   .   .   .   NAME-main..autotmp_34 l(23) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0
.   .   EMPTY l(23) tc(1) hascall
.   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   .   AS-init
.   .   .   AS l(23) tc(1) hascall
.   .   .   .   NAME-main..autotmp_36 l(23) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0
.   .   .   .   CALLFUNC l(23) tc(1) nonnil hascall PTR-@0
.   .   .   .   .   NAME-runtime.mapassign_faststr x(0) class(PFUNC) tc(1) used FUNC-@0
.   .   .   .   CALLFUNC-list
.   .   .   .   .   AS l(23) tc(1) hascall
.   .   .   .   .   .   NAME-main..autotmp_35 l(23) x(0) class(PAUTO) esc(N) used string
.   .   .   .   .   .   CALLFUNC l(23) tc(1) hascall string
.   .   .   .   .   .   .   NAME-runtime.intstring x(0) class(PFUNC) tc(1) used FUNC-@0
.   .   .   .   .   .   CALLFUNC-rlist
.   .   .   .   .   .   .   LITERAL-nil l(23) tc(1) PTR-@0

.   .   .   .   .   .   .   CONVNOP l(23) tc(1) int64
.   .   .   .   .   .   .   .   ADD l(23) tc(1) int
.   .   .   .   .   .   .   .   .   LITERAL-97 l(23) tc(1) int
.   .   .   .   .   .   .   .   .   NAME-main.i g(5) l(22) x(0) class(PAUTO) esc(no) tc(1) assigned used int
.   .   .   .   CALLFUNC-rlist
.   .   .   .   .   ADDR l(23) tc(1) PTR-@0
.   .   .   .   .   .   NAME-type.map[string][]uint8 x(0) class(PEXTERN) tc(1) uint8

.   .   .   .   .   NAME-main.m g(4) l(20) x(0) class(PAUTO) esc(no) tc(1) used MAP-@0

.   .   .   .   .   NAME-main..autotmp_35 l(23) x(0) class(PAUTO) esc(N) used string
.   .   AS l(23) tc(1) hascall
.   .   .   DEREF l(23) tc(1) hascall SLICE-@0
.   .   .   .   NAME-main..autotmp_36 l(23) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0
.   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   .   VARKILL l(23) tc(1)
.   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   DCL l(25)
.   .   NAME-main.i g(6) l(25) x(0) class(PAUTO) esc(no) tc(1) assigned used int

.   AS l(25) colas(true) tc(1)
.   .   NAME-main.i g(6) l(25) x(0) class(PAUTO) esc(no) tc(1) assigned used int
.   .   LITERAL-0 l(25) tc(1) int

.   FOR l(25) tc(1)
.   .   LT l(25) tc(1) bool
.   .   .   NAME-main.i g(6) l(25) x(0) class(PAUTO) esc(no) tc(1) assigned used int
.   .   .   LITERAL-1000000000 l(25) tc(1) int
.   .   BLOCK l(25)
.   .   BLOCK-list
.   .   .   AS l(25) tc(1) implicit(true) int
.   .   .   .   NAME-main.i g(6) l(25) x(0) class(PAUTO) esc(no) tc(1) assigned used int
.   .   .   .   ADD l(25) tc(1) int
.   .   .   .   .   NAME-main.i g(6) l(25) x(0) class(PAUTO) esc(no) tc(1) assigned used int
.   .   .   .   .   LITERAL-1 l(25) tc(1) int
.   FOR-body
.   .   DCL l(26)
.   .   .   NAME-main.value g(7) l(26) x(0) class(PAUTO) esc(no) tc(1) used SLICE-@0

.   .   DCL l(26)
.   .   .   NAME-main.m l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used MAP-@0

.   .   DCL l(26)
.   .   .   NAME-main.key l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0

.   .   DCL l(26)
.   .   .   NAME-main.~r2 l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0

.   .   DCL l(26)
.   .   .   NAME-main.~r3 l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used int

.   .   AS-init
.   .   .   AS l(26) tc(1)
.   .   .   .   NAME-main..autotmp_38 l(26) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0
.   .   .   .   ADDR l(26) tc(1) PTR-@0
.   .   .   .   .   NAME-main..autotmp_37 l(26) x(0) class(PAUTO) esc(N) tc(1) addrtaken used ARRAY-@0

.   .   .   AS l(26) tc(1) hascall
.   .   .   .   DEREF l(26) tc(1) hascall ARRAY-@0
.   .   .   .   .   NAME-main..autotmp_38 l(26) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0
.   .   .   .   DEREF l(26) tc(1) hascall ARRAY-@0
.   .   .   .   .   CONVNOP l(26) tc(1) PTR-@0
.   .   .   .   .   .   SPTR l(26) tc(1) PTR-@0
.   .   .   .   .   .   .   LITERAL-"b" l(26) tc(1) string
.   .   AS l(26) tc(1) hascall
.   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0
.   .   .   SLICEARR l(26) esc(no) tc(1) hascall SLICE-@0
.   .   .   .   NAME-main..autotmp_38 l(26) x(0) class(PAUTO) esc(N) tc(1) assigned used PTR-@0

.   .   BLOCK l(26)
.   .   BLOCK-list
.   .   .   AS l(26) tc(1)
.   .   .   .   NAME-main.m l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used MAP-@0
.   .   .   .   NAME-main.m g(4) l(20) x(0) class(PAUTO) esc(no) tc(1) used MAP-@0

.   .   .   AS l(26) tc(1)
.   .   .   .   NAME-main.key l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0
.   .   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   .   VARKILL l(26) tc(1)
.   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   .   AS l(26) tc(1)
.   .   .   NAME-main.~r2 l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0

.   .   AS l(26) tc(1)
.   .   .   NAME-main.~r3 l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used int

.   .   INLMARK l(+26) x(1)

.   .   DCL l(34)
.   .   .   NAME-main.value l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0

.   .   DCL l(34)
.   .   .   NAME-main.ok l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used bool

.   .   AS l(34) tc(1)
.   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   .   AS-init
.   .   .   CALLFUNC l(34) tc(1) hascall STRUCT-@0
.   .   .   .   NAME-runtime.mapaccess2_faststr x(0) class(PFUNC) tc(1) used FUNC-@0
.   .   .   CALLFUNC-rlist
.   .   .   .   ADDR l(34) tc(1) PTR-@0
.   .   .   .   .   NAME-type.map[string][]uint8 x(0) class(PEXTERN) tc(1) uint8

.   .   .   .   NAME-main.m l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used MAP-@0

.   .   .   .   BYTES2STRTMP l(34) esc(no) tc(1) string
.   .   .   .   .   NAME-main.key l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0

.   .   .   BLOCK l(34)
.   .   .   BLOCK-list
.   .   .   .   AS l(34) tc(1)
.   .   .   .   .   NAME-main..autotmp_39 l(34) x(0) class(PAUTO) esc(N) tc(1) nonnil used PTR-@0
.   .   .   .   .   RESULT l(34) x(32) tc(1) PTR-@0

.   .   .   .   AS l(34) tc(1)
.   .   .   .   .   NAME-main..autotmp_21 l(34) x(0) class(PAUTO) esc(N) tc(1) used bool
.   .   .   .   .   RESULT l(34) x(40) tc(1) bool
.   .   AS l(34) tc(1) hascall
.   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0
.   .   .   DEREF l(34) tc(1) hascall SLICE-@0
.   .   .   .   NAME-main..autotmp_39 l(34) x(0) class(PAUTO) esc(N) tc(1) nonnil used PTR-@0

.   .   AS l(34) tc(1)
.   .   .   NAME-main.value l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0
.   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   .   AS l(34) tc(1)
.   .   .   NAME-main.ok l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used bool
.   .   .   NAME-main..autotmp_21 l(34) x(0) class(PAUTO) esc(N) tc(1) used bool

.   .   VARKILL l(34) tc(1)
.   .   .   NAME-main..autotmp_21 l(34) x(0) class(PAUTO) esc(N) tc(1) used bool

.   .   VARKILL l(34) tc(1)
.   .   .   NAME-main..autotmp_20 l(21) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   .   IF l(34) tc(1)
.   .   .   NAME-main.ok l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used bool
.   .   IF-body
.   .   .   BLOCK l(26)
.   .   .   BLOCK-list
.   .   .   .   AS l(26) tc(1)
.   .   .   .   .   NAME-main.~r2 l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0
.   .   .   .   .   NAME-main.value l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0

.   .   .   .   AS l(26) tc(1)
.   .   .   .   .   NAME-main.~r3 l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used int
.   .   .   .   .   LITERAL-0 l(35) tc(1) int

.   .   .   GOTO l(26) tc(1) main..i1

.   .   BLOCK l(26)
.   .   BLOCK-list
.   .   .   AS l(26) tc(1)
.   .   .   .   NAME-main.~r2 l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0
.   .   .   .   LITERAL-nil tc(1) .nil SLICE-@0

.   .   .   AS l(26) tc(1)
.   .   .   .   NAME-main.~r3 l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used int
.   .   .   .   LITERAL-1 l(37) tc(1) int

.   .   GOTO l(26) tc(1) main..i1

.   .   LABEL l(26) tc(1) main..i1

.   .   BLOCK-init
.   .   .   AS l(26) tc(1)
.   .   .   .   NAME-main..autotmp_40 l(26) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0
.   .   .   .   CONVNOP l(26) tc(1) SLICE-@0
.   .   .   .   .   NAME-main.~r2 l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0
.   .   BLOCK l(26) hascall
.   .   BLOCK-list
.   .   .   AS l(26) tc(1)
.   .   .   .   NAME-main.value g(7) l(26) x(0) class(PAUTO) esc(no) tc(1) used SLICE-@0
.   .   .   .   NAME-main..autotmp_40 l(26) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   .   .   AS l(26) tc(1)
.   .   .   .   NAME-_ x(0) tc(1) assigned blank
.   .   .   .   NAME-main.~r3 l(33) x(0) class(PAUTO) esc(no) tc(1) assigned used int

.   .   IF-init
.   .   .   AS l(27) tc(1)
.   .   .   .   NAME-main..autotmp_22 l(27) x(0) class(PAUTO) esc(N) tc(1) assigned used int
.   .   .   .   LEN l(27) tc(1) int
.   .   .   .   .   NAME-main.value g(7) l(26) x(0) class(PAUTO) esc(no) tc(1) used SLICE-@0
.   .   IF l(27) tc(1)
.   .   .   EQ l(27) tc(1) bool
.   .   .   .   NAME-main..autotmp_22 l(27) x(0) class(PAUTO) esc(N) tc(1) assigned used int
.   .   .   .   LITERAL-100 l(27) tc(1) int
.   .   IF-rlist
.   .   .   VARKILL l(27) tc(1)
.   .   .   .   NAME-main..autotmp_22 l(27) x(0) class(PAUTO) esc(N) tc(1) assigned used int
.   .   IF-body
.   .   .   VARKILL l(27) tc(1)
.   .   .   .   NAME-main..autotmp_22 l(27) x(0) class(PAUTO) esc(N) tc(1) assigned used int

.   .   .   AS l(28) tc(1) hascall
.   .   .   .   NAME-main..autotmp_23 l(28) x(0) class(PAUTO) esc(N) tc(1) assigned used string
.   .   .   .   CALLFUNC l(28) tc(1) hascall string
.   .   .   .   .   NAME-runtime.slicebytetostring x(0) class(PFUNC) tc(1) used FUNC-@0
.   .   .   .   CALLFUNC-rlist
.   .   .   .   .   LITERAL-nil l(28) tc(1) PTR-@0

.   .   .   .   .   NAME-main.value g(7) l(26) x(0) class(PAUTO) esc(no) tc(1) used SLICE-@0

.   .   .   CALLFUNC-init
.   .   .   .   AS l(28) tc(1) hascall
.   .   .   .   .   NAME-main..autotmp_41 l(28) x(0) class(PAUTO) esc(N) tc(1) assigned used UNSAFEPTR-@0
.   .   .   .   .   CALLFUNC l(28) tc(1) hascall UNSAFEPTR-@0
.   .   .   .   .   .   NAME-runtime.convTstring x(0) class(PFUNC) tc(1) used FUNC-@0
.   .   .   .   .   CALLFUNC-rlist
.   .   .   .   .   .   NAME-main..autotmp_23 l(28) x(0) class(PAUTO) esc(N) tc(1) assigned used string
.   .   .   CALLFUNC l(28) tc(1) hascall
.   .   .   .   NAME-runtime.gopanic x(0) class(PFUNC) tc(1) used FUNC-@0
.   .   .   CALLFUNC-rlist
.   .   .   .   EFACE l(28) tc(1) INTER-@0
.   .   .   .   .   ADDR l(28) tc(1) PTR-@0
.   .   .   .   .   .   NAME-type.string x(0) class(PEXTERN) tc(1) uint8
.   .   .   .   .   NAME-main..autotmp_41 l(28) x(0) class(PAUTO) esc(N) tc(1) assigned used UNSAFEPTR-@0

.   .   .   VARKILL l(28) tc(1)
.   .   .   .   NAME-main..autotmp_23 l(28) x(0) class(PAUTO) esc(N) tc(1) assigned used string

before walk retrieve
.   DCL l(34)
.   .   NAME-main.value g(5) l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0

.   DCL l(34)
.   .   NAME-main.ok g(6) l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used bool

.   AS l(34) tc(1)
.   .   NAME-main..autotmp_6 l(34) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   AS2MAPR l(34) colas(true) tc(1)
.   .   INDEXMAP l(34) tc(1) SLICE-@0
.   .   .   NAME-main.m g(3) l(33) x(0) class(PPARAM) esc(no) tc(1) used MAP-@0
.   .   .   BYTES2STRTMP l(34) esc(no) tc(1) string
.   .   .   .   NAME-main.key g(4) l(33) x(8) class(PPARAM) esc(no) tc(1) used SLICE-@0
.   AS2MAPR-list
.   .   NAME-main..autotmp_6 l(34) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   .   NAME-main..autotmp_7 l(34) x(0) class(PAUTO) esc(N) tc(1) used bool

.   AS l(34) tc(1)
.   .   NAME-main.value g(5) l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0
.   .   NAME-main..autotmp_6 l(34) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   AS l(34) tc(1)
.   .   NAME-main.ok g(6) l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used bool
.   .   NAME-main..autotmp_7 l(34) x(0) class(PAUTO) esc(N) tc(1) used bool

.   VARKILL l(34) tc(1)
.   .   NAME-main..autotmp_7 l(34) x(0) class(PAUTO) esc(N) tc(1) used bool

.   VARKILL l(34) tc(1)
.   .   NAME-main..autotmp_6 l(34) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   IF l(34) tc(1)
.   .   NAME-main.ok g(6) l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used bool
.   IF-body
.   .   RETURN l(35) tc(1)
.   .   RETURN-list
.   .   .   NAME-main.value g(5) l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0

.   .   .   LITERAL-0 l(35) tc(1) int

.   RETURN l(37) tc(1)
.   RETURN-list
.   .   LITERAL-nil tc(1) .nil SLICE-@0

.   .   LITERAL-1 l(37) tc(1) int
after walk retrieve
.   DCL l(34)
.   .   NAME-main.value g(5) l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0

.   DCL l(34)
.   .   NAME-main.ok g(6) l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used bool

.   AS l(34) tc(1)
.   .   NAME-main..autotmp_6 l(34) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   AS-init
.   .   CALLFUNC l(34) tc(1) hascall STRUCT-@0
.   .   .   NAME-runtime.mapaccess2_faststr x(0) class(PFUNC) tc(1) used FUNC-@0
.   .   CALLFUNC-rlist
.   .   .   ADDR l(34) tc(1) PTR-@0
.   .   .   .   NAME-type.map[string][]uint8 x(0) class(PEXTERN) tc(1) uint8

.   .   .   NAME-main.m g(3) l(33) x(0) class(PPARAM) esc(no) tc(1) used MAP-@0

.   .   .   BYTES2STRTMP l(34) esc(no) tc(1) string
.   .   .   .   NAME-main.key g(4) l(33) x(8) class(PPARAM) esc(no) tc(1) used SLICE-@0

.   .   BLOCK l(34)
.   .   BLOCK-list
.   .   .   AS l(34) tc(1)
.   .   .   .   NAME-main..autotmp_8 l(34) x(0) class(PAUTO) esc(N) tc(1) nonnil used PTR-@0
.   .   .   .   RESULT l(34) x(32) tc(1) PTR-@0

.   .   .   AS l(34) tc(1)
.   .   .   .   NAME-main..autotmp_7 l(34) x(0) class(PAUTO) esc(N) tc(1) used bool
.   .   .   .   RESULT l(34) x(40) tc(1) bool
.   AS l(34) tc(1) hascall
.   .   NAME-main..autotmp_6 l(34) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0
.   .   DEREF l(34) tc(1) hascall SLICE-@0
.   .   .   NAME-main..autotmp_8 l(34) x(0) class(PAUTO) esc(N) tc(1) nonnil used PTR-@0

.   AS l(34) tc(1)
.   .   NAME-main.value g(5) l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0
.   .   NAME-main..autotmp_6 l(34) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   AS l(34) tc(1)
.   .   NAME-main.ok g(6) l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used bool
.   .   NAME-main..autotmp_7 l(34) x(0) class(PAUTO) esc(N) tc(1) used bool

.   VARKILL l(34) tc(1)
.   .   NAME-main..autotmp_7 l(34) x(0) class(PAUTO) esc(N) tc(1) used bool

.   VARKILL l(34) tc(1)
.   .   NAME-main..autotmp_6 l(34) x(0) class(PAUTO) esc(N) tc(1) assigned used SLICE-@0

.   IF l(34) tc(1)
.   .   NAME-main.ok g(6) l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used bool
.   IF-body
.   .   RETURN l(35) tc(1)
.   .   RETURN-list
.   .   .   AS l(35) tc(1)
.   .   .   .   NAME-main.~r2 g(1) l(33) x(32) class(PPARAMOUT) esc(no) SLICE-@0
.   .   .   .   NAME-main.value g(5) l(34) x(0) class(PAUTO) esc(no) tc(1) assigned used SLICE-@0

.   .   .   AS l(35) tc(1)
.   .   .   .   NAME-main.~r3 g(2) l(33) x(56) class(PPARAMOUT) esc(no) int
.   .   .   .   LITERAL-0 l(35) tc(1) int

.   RETURN l(37) tc(1)
.   RETURN-list
.   .   AS l(37) tc(1)
.   .   .   NAME-main.~r2 g(1) l(33) x(32) class(PPARAMOUT) esc(no) SLICE-@0
.   .   .   LITERAL-nil tc(1) .nil SLICE-@0

.   .   AS l(37) tc(1)
.   .   .   NAME-main.~r3 g(2) l(33) x(56) class(PPARAMOUT) esc(no) int
.   .   .   LITERAL-1 l(37) tc(1) int
enter retrieve
.   AS l(33)
.   .   NAME-main.~r2 g(1) l(33) x(32) class(PPARAMOUT) esc(no) SLICE-@0

.   AS l(33)
.   .   NAME-main.~r3 g(2) l(33) x(56) class(PPARAMOUT) esc(no) int

Kindly cc-ing @randall77 @cuonglm @mdempsky @dr2chase @josharian. I raise this issue because if the explanation is a complex one, perhaps we should examine what we can do, backport or it, or if not tell users upfront instead of them getting surprised. Thank you!

@odeke-em
Copy link
Member Author

@odeke-em odeke-em commented Aug 14, 2021

False alarm, at 1:45AM I was using a typo'd conversion for bytesToStr and used &str instead of &b, my apologies.

Loading

@odeke-em odeke-em closed this Aug 14, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
1 participant