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: fatal error: runtime: cannot map pages in arena address space #23222

Closed
karalabe opened this issue Dec 22, 2017 · 15 comments
Closed
Labels
FrozenDueToAge NeedsDecision Feedback is required from experts, contributors, and/or the community before a change can be made. release-blocker
Milestone

Comments

@karalabe
Copy link
Contributor

karalabe commented Dec 22, 2017

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

go version go1.9.2 windows/386

Does this issue reproduce with the latest release?

Yes

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

set GOARCH=386
set GOBIN=
set GOEXE=.exe
set GOHOSTARCH=386
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=C:\Users\karalabe\go
set GORACE=
set GOROOT=C:\Work\go
set GOTOOLDIR=C:\Work\go\pkg\tool\windows_386
set GCCGO=gccgo
set GO386=sse2
set CC=gcc
set GOGCCFLAGS=-m32 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\karalabe\AppData\Local\Temp\go-build701140035=/tmp/go-build -gno-record-gcc-switches
set CXX=g++
set CGO_ENABLED=1
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config

What did you do?

We've noticed on our CI that 32bit Windows builds started crashing during compilation https://ci.appveyor.com/project/ethereum/go-ethereum/build/master.4791/job/hcsxkgy0uh018j05#L136.

After playing around with it trying to repro locally, we've managed to triage it to the 32bit Windows build of Go. To reproduce the issue yourself:

  • Download and install the 32bit version of Go on Windows
  • Download and install the 32bit version of MinGW64 on Windows
  • Run go get -v github.com/ethereum/go-ethereum/dashboard

The repository is quite large, so downloading it will take a while.

What did you expect to see?

A successful build.

What did you see instead?

>go get -v github.com/ethereum/go-ethereum/dashboard
github.com/ethereum/go-ethereum/vendor/github.com/go-stack/stack
github.com/ethereum/go-ethereum/vendor/github.com/aristanetworks/goarista/monotime
github.com/ethereum/go-ethereum/crypto/sha3
github.com/ethereum/go-ethereum/common/hexutil
github.com/ethereum/go-ethereum/common/math
github.com/ethereum/go-ethereum/rlp
github.com/ethereum/go-ethereum/vendor/github.com/rcrowley/go-metrics
github.com/ethereum/go-ethereum/vendor/github.com/huin/goupnp/httpu
github.com/ethereum/go-ethereum/common/mclock
github.com/ethereum/go-ethereum/crypto/secp256k1
github.com/ethereum/go-ethereum/log
github.com/ethereum/go-ethereum/vendor/github.com/huin/goupnp/scpd
github.com/ethereum/go-ethereum/common
github.com/ethereum/go-ethereum/event
github.com/ethereum/go-ethereum/vendor/github.com/huin/goupnp/soap
github.com/ethereum/go-ethereum/vendor/github.com/huin/goupnp/ssdp
github.com/ethereum/go-ethereum/vendor/golang.org/x/net/html/atom
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/encoding/internal/identifier
github.com/ethereum/go-ethereum/vendor/golang.org/x/net/html
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/transform
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/internal/utf8internal
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/internal/tag
github.com/ethereum/go-ethereum/vendor/github.com/jackpal/go-nat-pmp
github.com/ethereum/go-ethereum/p2p/netutil
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/util
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/language
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/encoding
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/runes
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/comparer
github.com/ethereum/go-ethereum/vendor/github.com/rcrowley/go-metrics/exp
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/cache
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/encoding/internal
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/storage
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/filter
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/encoding/charmap
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/encoding/japanese
github.com/ethereum/go-ethereum/metrics
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/encoding/korean
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/encoding/simplifiedchinese
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/encoding/traditionalchinese
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/encoding/unicode
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/errors
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/iterator
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/journal
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/opt
github.com/ethereum/go-ethereum/vendor/github.com/golang/snappy
github.com/ethereum/go-ethereum/vendor/golang.org/x/net/context
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/memdb
github.com/ethereum/go-ethereum/vendor/golang.org/x/net/websocket
github.com/ethereum/go-ethereum/vendor/gopkg.in/fatih/set.v0
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/table
github.com/ethereum/go-ethereum/vendor/gopkg.in/natefinch/npipe.v2
github.com/ethereum/go-ethereum/vendor/github.com/rs/xhandler
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/encoding/htmlindex
github.com/ethereum/go-ethereum/vendor/golang.org/x/net/html/charset
github.com/ethereum/go-ethereum/vendor/github.com/rs/cors
github.com/ethereum/go-ethereum/vendor/github.com/huin/goupnp
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb
github.com/ethereum/go-ethereum/rpc
github.com/ethereum/go-ethereum/vendor/github.com/huin/goupnp/dcps/internetgateway1
github.com/ethereum/go-ethereum/vendor/github.com/huin/goupnp/dcps/internetgateway2
github.com/ethereum/go-ethereum/p2p/nat
github.com/ethereum/go-ethereum/crypto
github.com/ethereum/go-ethereum/crypto/ecies
github.com/ethereum/go-ethereum/p2p/discover
github.com/ethereum/go-ethereum/p2p/discv5
github.com/ethereum/go-ethereum/p2p
github.com/ethereum/go-ethereum/dashboard
# github.com/ethereum/go-ethereum/dashboard
runtime: VirtualAlloc of 1703936 bytes failed with errno=487
fatal error: runtime: cannot map pages in arena address space

runtime stack:
runtime.throw(0xa85b46, 0x30)
        c:/go/src/runtime/panic.go:605 +0x7c
runtime.sysMap(0x43f20000, 0x1a0000, 0x3377fe01, 0xdac358)
        c:/go/src/runtime/mem_windows.go:124 +0x113
runtime.(*mheap).sysAlloc(0xd97b20, 0x1a0000, 0x33648000)
        c:/go/src/runtime/malloc.go:470 +0x231
runtime.(*mheap).grow(0xd97b20, 0xcc, 0x0)
        c:/go/src/runtime/mheap.go:887 +0x4e
runtime.(*mheap).allocSpanLocked(0xd97b20, 0xcc, 0xdac368, 0x94c5b9c5)
        c:/go/src/runtime/mheap.go:800 +0x2e4
runtime.(*mheap).alloc_m(0xd97b20, 0xcc, 0x6a870101, 0x40e24826)
        c:/go/src/runtime/mheap.go:666 +0x115
runtime.(*mheap).alloc.func1()
        c:/go/src/runtime/mheap.go:733 +0x40
runtime.systemstack(0x3377ff14)
        c:/go/src/runtime/asm_386.s:409 +0x88
runtime.(*mheap).alloc(0xd97b20, 0xcc, 0x33000101, 0x41171b)
        c:/go/src/runtime/mheap.go:732 +0x6c
runtime.largeAlloc(0x196132, 0x33640100, 0x33eb980c)
        c:/go/src/runtime/malloc.go:827 +0x7f
runtime.mallocgc.func1()
        c:/go/src/runtime/malloc.go:722 +0x39
runtime.systemstack(0x13648000)
        c:/go/src/runtime/asm_386.s:393 +0x5e
runtime.mstart()
        c:/go/src/runtime/proc.go:1135

goroutine 1 [running]:
runtime.systemstack_switch()
        c:/go/src/runtime/asm_386.s:347 fp=0x14a93a0c sp=0x14a93a08 pc=0x44c3e0
runtime.mallocgc(0x196132, 0x0, 0x0, 0x0)
        c:/go/src/runtime/malloc.go:721 +0x67e fp=0x14a93a60 sp=0x14a93a0c pc=0x40e4ce
runtime.rawstring(0x196132, 0x0, 0x0, 0x0, 0x0, 0x0)
        c:/go/src/runtime/string.go:245 +0x56 fp=0x14a93a74 sp=0x14a93a60 pc=0x43c666
runtime.rawstringtmp(0x0, 0x196132, 0xc, 0x8, 0x0, 0x0, 0x0)
        c:/go/src/runtime/string.go:115 +0x51 fp=0x14a93a90 sp=0x14a93a74 pc=0x43c1b1
runtime.concatstrings(0x0, 0x14a93af8, 0x3, 0x3, 0x12272ccc, 0x40e1a8)
        c:/go/src/runtime/string.go:46 +0xc8 fp=0x14a93ad8 sp=0x14a93a90 pc=0x43be08
runtime.concatstring3(0x0, 0x43c88000, 0x19604b, 0x0, 0x0, 0x138945a1, 0xe7, 0x0, 0x13bd3310)
        c:/go/src/runtime/string.go:59 +0x39 fp=0x14a93af4 sp=0x14a93ad8 pc=0x43bfd9
strings.Join(0x142e1c30, 0x2, 0x2, 0x0, 0x0, 0x142e1c30, 0x1)
        c:/go/src/strings/strings.go:473 +0x2da fp=0x14a93b58 sp=0x14a93af4 pc=0x4a852a
cmd/compile/internal/gc.evconst(0x13834a50)
        c:/go/src/cmd/compile/internal/gc/const.go:676 +0x337 fp=0x14a93cdc sp=0x14a93b58 pc=0x8c9b87
cmd/compile/internal/gc.typecheck1(0x13834a50, 0x2, 0x69f64e)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:2215 +0x32a fp=0x14a94414 sp=0x14a93cdc pc=0x983d1a
cmd/compile/internal/gc.typecheck(0x13834a50, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a944dc sp=0x14a94414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13834af0, 0x2, 0x69f654)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a94c14 sp=0x14a944dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13834af0, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a94cdc sp=0x14a94c14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13834b90, 0x2, 0x69f66d)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a95414 sp=0x14a94cdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13834b90, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a954dc sp=0x14a95414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13834c30, 0x2, 0x69f673)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a95c14 sp=0x14a954dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13834c30, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a95cdc sp=0x14a95c14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13834cd0, 0x2, 0x69f681)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a96414 sp=0x14a95cdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13834cd0, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a964dc sp=0x14a96414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13834d70, 0x2, 0x69f687)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a96c14 sp=0x14a964dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13834d70, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a96cdc sp=0x14a96c14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13834e10, 0x2, 0x69f6aa)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a97414 sp=0x14a96cdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13834e10, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a974dc sp=0x14a97414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13834eb0, 0x2, 0x69f6b0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a97c14 sp=0x14a974dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13834eb0, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a97cdc sp=0x14a97c14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13834f50, 0x2, 0x69f6c2)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a98414 sp=0x14a97cdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13834f50, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a984dc sp=0x14a98414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13834ff0, 0x2, 0x69f6c8)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a98c14 sp=0x14a984dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13834ff0, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a98cdc sp=0x14a98c14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13835090, 0x2, 0x69f6e2)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a99414 sp=0x14a98cdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13835090, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a994dc sp=0x14a99414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13835130, 0x2, 0x69f6e8)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a99c14 sp=0x14a994dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13835130, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a99cdc sp=0x14a99c14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x138351d0, 0x2, 0x6a044e)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a9a414 sp=0x14a99cdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x138351d0, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a9a4dc sp=0x14a9a414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13835270, 0x2, 0x6a0454)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a9ac14 sp=0x14a9a4dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13835270, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a9acdc sp=0x14a9ac14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13835310, 0x2, 0x6a046d)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a9b414 sp=0x14a9acdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13835310, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a9b4dc sp=0x14a9b414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x138353b0, 0x2, 0x6a0473)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a9bc14 sp=0x14a9b4dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x138353b0, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a9bcdc sp=0x14a9bc14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13835450, 0x2, 0x6a0481)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a9c414 sp=0x14a9bcdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13835450, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a9c4dc sp=0x14a9c414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x138354f0, 0x2, 0x6a0487)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a9cc14 sp=0x14a9c4dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x138354f0, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a9ccdc sp=0x14a9cc14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13835590, 0x2, 0x6a04b1)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a9d414 sp=0x14a9ccdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13835590, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a9d4dc sp=0x14a9d414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13835630, 0x2, 0x6a04b7)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a9dc14 sp=0x14a9d4dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13835630, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a9dcdc sp=0x14a9dc14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x138356d0, 0x2, 0x6a04c9)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a9e414 sp=0x14a9dcdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x138356d0, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a9e4dc sp=0x14a9e414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13835770, 0x2, 0x6a04cf)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a9ec14 sp=0x14a9e4dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13835770, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a9ecdc sp=0x14a9ec14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13835810, 0x2, 0x6a04e9)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a9f414 sp=0x14a9ecdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13835810, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a9f4dc sp=0x14a9f414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x138358b0, 0x2, 0x6a04ef)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14a9fc14 sp=0x14a9f4dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x138358b0, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14a9fcdc sp=0x14a9fc14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13835950, 0x2, 0x6a04ff)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aa0414 sp=0x14a9fcdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13835950, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aa04dc sp=0x14aa0414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x138359f0, 0x2, 0x6a04ff)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aa0c14 sp=0x14aa04dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x138359f0, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aa0cdc sp=0x14aa0c14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13835a90, 0x2, 0x6a04ff)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aa1414 sp=0x14aa0cdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13835a90, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aa14dc sp=0x14aa1414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13835b30, 0x2, 0x6a04ff)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aa1c14 sp=0x14aa14dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13835b30, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aa1cdc sp=0x14aa1c14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13835bd0, 0x2, 0x6a0d4a)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aa2414 sp=0x14aa1cdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13835bd0, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aa24dc sp=0x14aa2414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13835c70, 0x2, 0x6a0d50)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aa2c14 sp=0x14aa24dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13835c70, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aa2cdc sp=0x14aa2c14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13835d10, 0x2, 0x6a0d69)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aa3414 sp=0x14aa2cdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13835d10, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aa34dc sp=0x14aa3414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13835db0, 0x2, 0x6a0d6f)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aa3c14 sp=0x14aa34dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13835db0, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aa3cdc sp=0x14aa3c14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13835e50, 0x2, 0x6a0d7e)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aa4414 sp=0x14aa3cdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13835e50, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aa44dc sp=0x14aa4414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13835ef0, 0x2, 0x6a0d84)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aa4c14 sp=0x14aa44dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13835ef0, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aa4cdc sp=0x14aa4c14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13835f90, 0x2, 0x6a0d9a)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aa5414 sp=0x14aa4cdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13835f90, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aa54dc sp=0x14aa5414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13664050, 0x2, 0x6a0da0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aa5c14 sp=0x14aa54dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13664050, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aa5cdc sp=0x14aa5c14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x136640f0, 0x2, 0x6a0db2)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aa6414 sp=0x14aa5cdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x136640f0, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aa64dc sp=0x14aa6414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13664190, 0x2, 0x6a0db8)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aa6c14 sp=0x14aa64dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13664190, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aa6cdc sp=0x14aa6c14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13664230, 0x2, 0x6a0dd2)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aa7414 sp=0x14aa6cdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13664230, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aa74dc sp=0x14aa7414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x136642d0, 0x2, 0x6a0dd8)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aa7c14 sp=0x14aa74dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x136642d0, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aa7cdc sp=0x14aa7c14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13664370, 0x2, 0x6a1460)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aa8414 sp=0x14aa7cdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13664370, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aa84dc sp=0x14aa8414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13664410, 0x2, 0x6a1466)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aa8c14 sp=0x14aa84dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13664410, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aa8cdc sp=0x14aa8c14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x136644b0, 0x2, 0x6a147f)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aa9414 sp=0x14aa8cdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x136644b0, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aa94dc sp=0x14aa9414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13664550, 0x2, 0x6a1485)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aa9c14 sp=0x14aa94dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13664550, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aa9cdc sp=0x14aa9c14 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x136645f0, 0x2, 0x6a1498)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aaa414 sp=0x14aa9cdc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x136645f0, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aaa4dc sp=0x14aaa414 pc=0x983592
cmd/compile/internal/gc.typecheck1(0x13664690, 0x2, 0x6a149e)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:569 +0x2d00 fp=0x14aaac14 sp=0x14aaa4dc pc=0x9866f0
cmd/compile/internal/gc.typecheck(0x13664690, 0x2, 0x0)
        c:/go/src/cmd/compile/internal/gc/typecheck.go:201 +0x622 fp=0x14aaacdc sp=0x14aaac14 pc=0x983592
...additional frames elided...

Issue being tracked on the go-ethereum repo too: ethereum/go-ethereum#15738.

@titanous
Copy link
Member

Does this also happen with git master, soon to be go1.10?

@titanous titanous added the WaitingForInfo Issue is not actionable because of missing required information, which needs to be provided. label Dec 23, 2017
@karalabe
Copy link
Contributor Author

We've received a similar crash from a user running Linux (ethereum/go-ethereum#15743), so it seems to be unrelated to Windows itself and may be a general fault on 386. I'll have to check latest master.

@alexbrainman
Copy link
Member

I'll have to check latest master.

This works fine for me for recent version of Go:

C:\Documents and Settings\aa\dev\src\github.com\ethereum\go-ethereum\dashboard>git rev-parse HEAD
9d187f02389ba12493112c7feb15a83f44e3a3ff

C:\Documents and Settings\aa\dev\src\github.com\ethereum\go-ethereum\dashboard>git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean

C:\Documents and Settings\aa\dev\src\github.com\ethereum\go-ethereum\dashboard>go version
go version devel +46c5856 Mon Dec 25 00:07:22 2017 +0000 windows/386

C:\Documents and Settings\aa\dev\src\github.com\ethereum\go-ethereum\dashboard>go build -o %TMP%\a.exe

C:\Documents and Settings\aa\dev\src\github.com\ethereum\go-ethereum\dashboard>

Alex

@karalabe
Copy link
Contributor Author

Go 1.10beta1 blows up on AppVeyor the same way https://ci.appveyor.com/project/ethereum/go-ethereum/build/master.4840/job/y99c2g1ywdho2d34#L264

I'll have to try somehow a master build on AppVeyor to see if it's still present on latest code.

@karalabe
Copy link
Contributor Author

Managed to reliably reproduce it locally with Go 1.10, both beta1 and latest master. The invocation is a bit different than my repro for Go1.9.2:

Go 1.10beta1, prebuilt from the website:

>go version
go version go1.10beta1 windows/386

>go env
set GOARCH=386
set GOBIN=
set GOCACHE=C:\Users\karalabe\AppData\Local\go-build
set GOEXE=.exe
set GOHOSTARCH=386
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=C:\Users\karalabe\go
set GORACE=
set GOROOT=c:\Work\go
set GOTMPDIR=
set GOTOOLDIR=c:\Work\go\pkg\tool\windows_386
set GCCGO=gccgo
set GO386=sse2
set CC=C:\Work\mingw32\bin\gcc.exe
set CXX=g++
set CGO_ENABLED=1
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m32 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\karalabe\AppData\Local\Temp\go-build737290554=/tmp/go-build -gno-record-gcc-switches

>go test -v github.com/ethereum/go-ethereum/dashboard
# github.com/ethereum/go-ethereum/dashboard
runtime: VirtualAlloc of 1703936 bytes failed with errno=487
fatal error: runtime: cannot map pages in arena address space

runtime stack:
runtime.throw(0x687ecf, 0x30)
        c:/go/src/runtime/panic.go:616 +0x6b
runtime.sysMap(0x437f0000, 0x1a0000, 0x2bcfe01, 0x7cb838)
        c:/go/src/runtime/mem_windows.go:124 +0x100
runtime.(*mheap).sysAlloc(0x7bb880, 0x1a0000, 0x9fe94)
        c:/go/src/runtime/malloc.go:470 +0x22f
runtime.(*mheap).grow(0x7bb880, 0xcc, 0x0)
        c:/go/src/runtime/mheap.go:907 +0x4e
runtime.(*mheap).allocSpanLocked(0x7bb880, 0xcc, 0x7cb848, 0x160000)
        c:/go/src/runtime/mheap.go:820 +0x2e4
runtime.(*mheap).alloc_m(0x7bb880, 0xcc, 0x40d90101, 0x41d272)
        c:/go/src/runtime/mheap.go:686 +0x115
runtime.(*mheap).alloc.func1()
        c:/go/src/runtime/mheap.go:753 +0x40
runtime.(*mheap).alloc(0x7bb880, 0xcc, 0x33000101, 0x421316)
        c:/go/src/runtime/mheap.go:752 +0x6c
runtime.largeAlloc(0x196151, 0x440100, 0x43570000)
        c:/go/src/runtime/malloc.go:826 +0x7b
runtime.mallocgc.func1()
        c:/go/src/runtime/malloc.go:721 +0x39
runtime.systemstack(0x0)
        c:/go/src/runtime/asm_386.s:464 +0x5e
runtime.mstart()
        c:/go/src/runtime/proc.go:1170

goroutine 1 [running]:
runtime.systemstack_switch()
        c:/go/src/runtime/asm_386.s:418 fp=0x1470a888 sp=0x1470a884 pc=0x44abc0
runtime.mallocgc(0x196151, 0x0, 0x0, 0x0)
        c:/go/src/runtime/malloc.go:720 +0x67b fp=0x1470a8dc sp=0x1470a888 pc=0x40e70b
runtime.rawstring(0x196151, 0x0, 0x0, 0x0, 0x0, 0x0)
        c:/go/src/runtime/string.go:245 +0x56 fp=0x1470a8f0 sp=0x1470a8dc pc=0x43c746
runtime.rawstringtmp(0x0, 0x196151, 0x0, 0x0, 0x0, 0x0, 0x0)
        c:/go/src/runtime/string.go:115 +0x51 fp=0x1470a90c sp=0x1470a8f0 pc=0x43c2b1
runtime.concatstrings(0x0, 0x1470a970, 0x2, 0x2, 0x0, 0x401a8f)
        c:/go/src/runtime/string.go:46 +0xc5 fp=0x1470a950 sp=0x1470a90c pc=0x43bf15
runtime.concatstring2(0x0, 0x43570000, 0x196148, 0x12f3b251, 0x9, 0x138461d0, 0x6b5960)
        c:/go/src/runtime/string.go:55 +0x39 fp=0x1470a96c sp=0x1470a950 pc=0x43c079
go/constant.BinaryOp(0x6b5960, 0x138461d0, 0xc, 0x6b5960, 0x138461d8, 0x0, 0x0)
        c:/go/src/go/constant/value.go:1113 +0xac0 fp=0x1470aa8c sp=0x1470a96c pc=0x53ec90
go/types.(*Checker).binary(0x12f35e30, 0x1453e9e0, 0x133b3f00, 0x6b5150, 0x133b3ee0, 0x6b5130, 0x12ee3090, 0xc)
        c:/go/src/go/types/expr.go:841 +0x3ea fp=0x1470aaf8 sp=0x1470aa8c pc=0x552f7a
go/types.(*Checker).exprInternal(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3f00, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:1477 +0x191b fp=0x1470ae14 sp=0x1470aaf8 pc=0x55589b
go/types.(*Checker).rawExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3f00, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:969 +0x4d fp=0x1470ae6c sp=0x1470ae14 pc=0x553d1d
go/types.(*Checker).multiExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3f00)
        c:/go/src/go/types/expr.go:1549 +0x4d fp=0x1470ae9c sp=0x1470ae6c pc=0x55781d
go/types.(*Checker).expr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3f00)
        c:/go/src/go/types/expr.go:1543 +0x39 fp=0x1470aeb0 sp=0x1470ae9c pc=0x5577a9
go/types.(*Checker).binary(0x12f35e30, 0x1453e9e0, 0x133b3f20, 0x6b5150, 0x133b3f00, 0x6b5130, 0x12ee30a0, 0xc)
        c:/go/src/go/types/expr.go:766 +0x53 fp=0x1470af1c sp=0x1470aeb0 pc=0x552be3
go/types.(*Checker).exprInternal(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3f20, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:1477 +0x191b fp=0x1470b238 sp=0x1470af1c pc=0x55589b
go/types.(*Checker).rawExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3f20, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:969 +0x4d fp=0x1470b290 sp=0x1470b238 pc=0x553d1d
go/types.(*Checker).multiExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3f20)
        c:/go/src/go/types/expr.go:1549 +0x4d fp=0x1470b2c0 sp=0x1470b290 pc=0x55781d
go/types.(*Checker).expr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3f20)
        c:/go/src/go/types/expr.go:1543 +0x39 fp=0x1470b2d4 sp=0x1470b2c0 pc=0x5577a9
go/types.(*Checker).binary(0x12f35e30, 0x1453e9e0, 0x133b3f40, 0x6b5150, 0x133b3f20, 0x6b5130, 0x12ee30b0, 0xc)
        c:/go/src/go/types/expr.go:766 +0x53 fp=0x1470b340 sp=0x1470b2d4 pc=0x552be3
go/types.(*Checker).exprInternal(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3f40, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:1477 +0x191b fp=0x1470b65c sp=0x1470b340 pc=0x55589b
go/types.(*Checker).rawExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3f40, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:969 +0x4d fp=0x1470b6b4 sp=0x1470b65c pc=0x553d1d
go/types.(*Checker).multiExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3f40)
        c:/go/src/go/types/expr.go:1549 +0x4d fp=0x1470b6e4 sp=0x1470b6b4 pc=0x55781d
go/types.(*Checker).expr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3f40)
        c:/go/src/go/types/expr.go:1543 +0x39 fp=0x1470b6f8 sp=0x1470b6e4 pc=0x5577a9
go/types.(*Checker).binary(0x12f35e30, 0x1453e9e0, 0x133b3f60, 0x6b5150, 0x133b3f40, 0x6b5130, 0x12ee30c0, 0xc)
        c:/go/src/go/types/expr.go:766 +0x53 fp=0x1470b764 sp=0x1470b6f8 pc=0x552be3
go/types.(*Checker).exprInternal(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3f60, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:1477 +0x191b fp=0x1470ba80 sp=0x1470b764 pc=0x55589b
go/types.(*Checker).rawExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3f60, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:969 +0x4d fp=0x1470bad8 sp=0x1470ba80 pc=0x553d1d
go/types.(*Checker).multiExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3f60)
        c:/go/src/go/types/expr.go:1549 +0x4d fp=0x1470bb08 sp=0x1470bad8 pc=0x55781d
go/types.(*Checker).expr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3f60)
        c:/go/src/go/types/expr.go:1543 +0x39 fp=0x1470bb1c sp=0x1470bb08 pc=0x5577a9
go/types.(*Checker).binary(0x12f35e30, 0x1453e9e0, 0x133b3f80, 0x6b5150, 0x133b3f60, 0x6b5130, 0x12ee30d0, 0xc)
        c:/go/src/go/types/expr.go:766 +0x53 fp=0x1470bb88 sp=0x1470bb1c pc=0x552be3
go/types.(*Checker).exprInternal(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3f80, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:1477 +0x191b fp=0x1470bea4 sp=0x1470bb88 pc=0x55589b
go/types.(*Checker).rawExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3f80, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:969 +0x4d fp=0x1470befc sp=0x1470bea4 pc=0x553d1d
go/types.(*Checker).multiExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3f80)
        c:/go/src/go/types/expr.go:1549 +0x4d fp=0x1470bf2c sp=0x1470befc pc=0x55781d
go/types.(*Checker).expr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3f80)
        c:/go/src/go/types/expr.go:1543 +0x39 fp=0x1470bf40 sp=0x1470bf2c pc=0x5577a9
go/types.(*Checker).binary(0x12f35e30, 0x1453e9e0, 0x133b3fa0, 0x6b5150, 0x133b3f80, 0x6b5130, 0x12ee30e0, 0xc)
        c:/go/src/go/types/expr.go:766 +0x53 fp=0x1470bfac sp=0x1470bf40 pc=0x552be3
go/types.(*Checker).exprInternal(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3fa0, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:1477 +0x191b fp=0x1470c2c8 sp=0x1470bfac pc=0x55589b
go/types.(*Checker).rawExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3fa0, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:969 +0x4d fp=0x1470c320 sp=0x1470c2c8 pc=0x553d1d
go/types.(*Checker).multiExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3fa0)
        c:/go/src/go/types/expr.go:1549 +0x4d fp=0x1470c350 sp=0x1470c320 pc=0x55781d
go/types.(*Checker).expr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3fa0)
        c:/go/src/go/types/expr.go:1543 +0x39 fp=0x1470c364 sp=0x1470c350 pc=0x5577a9
go/types.(*Checker).binary(0x12f35e30, 0x1453e9e0, 0x133b3fc0, 0x6b5150, 0x133b3fa0, 0x6b5130, 0x12ee30f0, 0xc)
        c:/go/src/go/types/expr.go:766 +0x53 fp=0x1470c3d0 sp=0x1470c364 pc=0x552be3
go/types.(*Checker).exprInternal(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3fc0, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:1477 +0x191b fp=0x1470c6ec sp=0x1470c3d0 pc=0x55589b
go/types.(*Checker).rawExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3fc0, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:969 +0x4d fp=0x1470c744 sp=0x1470c6ec pc=0x553d1d
go/types.(*Checker).multiExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3fc0)
        c:/go/src/go/types/expr.go:1549 +0x4d fp=0x1470c774 sp=0x1470c744 pc=0x55781d
go/types.(*Checker).expr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3fc0)
        c:/go/src/go/types/expr.go:1543 +0x39 fp=0x1470c788 sp=0x1470c774 pc=0x5577a9
go/types.(*Checker).binary(0x12f35e30, 0x1453e9e0, 0x133b3fe0, 0x6b5150, 0x133b3fc0, 0x6b5130, 0x12ee3100, 0xc)
        c:/go/src/go/types/expr.go:766 +0x53 fp=0x1470c7f4 sp=0x1470c788 pc=0x552be3
go/types.(*Checker).exprInternal(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3fe0, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:1477 +0x191b fp=0x1470cb10 sp=0x1470c7f4 pc=0x55589b
go/types.(*Checker).rawExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3fe0, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:969 +0x4d fp=0x1470cb68 sp=0x1470cb10 pc=0x553d1d
go/types.(*Checker).multiExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3fe0)
        c:/go/src/go/types/expr.go:1549 +0x4d fp=0x1470cb98 sp=0x1470cb68 pc=0x55781d
go/types.(*Checker).expr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x133b3fe0)
        c:/go/src/go/types/expr.go:1543 +0x39 fp=0x1470cbac sp=0x1470cb98 pc=0x5577a9
go/types.(*Checker).binary(0x12f35e30, 0x1453e9e0, 0x135b0000, 0x6b5150, 0x133b3fe0, 0x6b5130, 0x12ee3110, 0xc)
        c:/go/src/go/types/expr.go:766 +0x53 fp=0x1470cc18 sp=0x1470cbac pc=0x552be3
go/types.(*Checker).exprInternal(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0000, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:1477 +0x191b fp=0x1470cf34 sp=0x1470cc18 pc=0x55589b
go/types.(*Checker).rawExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0000, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:969 +0x4d fp=0x1470cf8c sp=0x1470cf34 pc=0x553d1d
go/types.(*Checker).multiExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0000)
        c:/go/src/go/types/expr.go:1549 +0x4d fp=0x1470cfbc sp=0x1470cf8c pc=0x55781d
go/types.(*Checker).expr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0000)
        c:/go/src/go/types/expr.go:1543 +0x39 fp=0x1470cfd0 sp=0x1470cfbc pc=0x5577a9
go/types.(*Checker).binary(0x12f35e30, 0x1453e9e0, 0x135b0020, 0x6b5150, 0x135b0000, 0x6b5130, 0x12ee3120, 0xc)
        c:/go/src/go/types/expr.go:766 +0x53 fp=0x1470d03c sp=0x1470cfd0 pc=0x552be3
go/types.(*Checker).exprInternal(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0020, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:1477 +0x191b fp=0x1470d358 sp=0x1470d03c pc=0x55589b
go/types.(*Checker).rawExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0020, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:969 +0x4d fp=0x1470d3b0 sp=0x1470d358 pc=0x553d1d
go/types.(*Checker).multiExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0020)
        c:/go/src/go/types/expr.go:1549 +0x4d fp=0x1470d3e0 sp=0x1470d3b0 pc=0x55781d
go/types.(*Checker).expr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0020)
        c:/go/src/go/types/expr.go:1543 +0x39 fp=0x1470d3f4 sp=0x1470d3e0 pc=0x5577a9
go/types.(*Checker).binary(0x12f35e30, 0x1453e9e0, 0x135b0040, 0x6b5150, 0x135b0020, 0x6b5130, 0x12ee3130, 0xc)
        c:/go/src/go/types/expr.go:766 +0x53 fp=0x1470d460 sp=0x1470d3f4 pc=0x552be3
go/types.(*Checker).exprInternal(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0040, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:1477 +0x191b fp=0x1470d77c sp=0x1470d460 pc=0x55589b
go/types.(*Checker).rawExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0040, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:969 +0x4d fp=0x1470d7d4 sp=0x1470d77c pc=0x553d1d
go/types.(*Checker).multiExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0040)
        c:/go/src/go/types/expr.go:1549 +0x4d fp=0x1470d804 sp=0x1470d7d4 pc=0x55781d
go/types.(*Checker).expr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0040)
        c:/go/src/go/types/expr.go:1543 +0x39 fp=0x1470d818 sp=0x1470d804 pc=0x5577a9
go/types.(*Checker).binary(0x12f35e30, 0x1453e9e0, 0x135b0060, 0x6b5150, 0x135b0040, 0x6b5130, 0x12ee3140, 0xc)
        c:/go/src/go/types/expr.go:766 +0x53 fp=0x1470d884 sp=0x1470d818 pc=0x552be3
go/types.(*Checker).exprInternal(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0060, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:1477 +0x191b fp=0x1470dba0 sp=0x1470d884 pc=0x55589b
go/types.(*Checker).rawExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0060, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:969 +0x4d fp=0x1470dbf8 sp=0x1470dba0 pc=0x553d1d
go/types.(*Checker).multiExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0060)
        c:/go/src/go/types/expr.go:1549 +0x4d fp=0x1470dc28 sp=0x1470dbf8 pc=0x55781d
go/types.(*Checker).expr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0060)
        c:/go/src/go/types/expr.go:1543 +0x39 fp=0x1470dc3c sp=0x1470dc28 pc=0x5577a9
go/types.(*Checker).binary(0x12f35e30, 0x1453e9e0, 0x135b0080, 0x6b5150, 0x135b0060, 0x6b5130, 0x12ee3150, 0xc)
        c:/go/src/go/types/expr.go:766 +0x53 fp=0x1470dca8 sp=0x1470dc3c pc=0x552be3
go/types.(*Checker).exprInternal(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0080, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:1477 +0x191b fp=0x1470dfc4 sp=0x1470dca8 pc=0x55589b
go/types.(*Checker).rawExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0080, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:969 +0x4d fp=0x1470e01c sp=0x1470dfc4 pc=0x553d1d
go/types.(*Checker).multiExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0080)
        c:/go/src/go/types/expr.go:1549 +0x4d fp=0x1470e04c sp=0x1470e01c pc=0x55781d
go/types.(*Checker).expr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0080)
        c:/go/src/go/types/expr.go:1543 +0x39 fp=0x1470e060 sp=0x1470e04c pc=0x5577a9
go/types.(*Checker).binary(0x12f35e30, 0x1453e9e0, 0x135b00a0, 0x6b5150, 0x135b0080, 0x6b5130, 0x12ee3160, 0xc)
        c:/go/src/go/types/expr.go:766 +0x53 fp=0x1470e0cc sp=0x1470e060 pc=0x552be3
go/types.(*Checker).exprInternal(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b00a0, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:1477 +0x191b fp=0x1470e3e8 sp=0x1470e0cc pc=0x55589b
go/types.(*Checker).rawExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b00a0, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:969 +0x4d fp=0x1470e440 sp=0x1470e3e8 pc=0x553d1d
go/types.(*Checker).multiExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b00a0)
        c:/go/src/go/types/expr.go:1549 +0x4d fp=0x1470e470 sp=0x1470e440 pc=0x55781d
go/types.(*Checker).expr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b00a0)
        c:/go/src/go/types/expr.go:1543 +0x39 fp=0x1470e484 sp=0x1470e470 pc=0x5577a9
go/types.(*Checker).binary(0x12f35e30, 0x1453e9e0, 0x135b00c0, 0x6b5150, 0x135b00a0, 0x6b5130, 0x12ee3170, 0xc)
        c:/go/src/go/types/expr.go:766 +0x53 fp=0x1470e4f0 sp=0x1470e484 pc=0x552be3
go/types.(*Checker).exprInternal(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b00c0, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:1477 +0x191b fp=0x1470e80c sp=0x1470e4f0 pc=0x55589b
go/types.(*Checker).rawExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b00c0, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:969 +0x4d fp=0x1470e864 sp=0x1470e80c pc=0x553d1d
go/types.(*Checker).multiExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b00c0)
        c:/go/src/go/types/expr.go:1549 +0x4d fp=0x1470e894 sp=0x1470e864 pc=0x55781d
go/types.(*Checker).expr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b00c0)
        c:/go/src/go/types/expr.go:1543 +0x39 fp=0x1470e8a8 sp=0x1470e894 pc=0x5577a9
go/types.(*Checker).binary(0x12f35e30, 0x1453e9e0, 0x135b00e0, 0x6b5150, 0x135b00c0, 0x6b5130, 0x12ee3180, 0xc)
        c:/go/src/go/types/expr.go:766 +0x53 fp=0x1470e914 sp=0x1470e8a8 pc=0x552be3
go/types.(*Checker).exprInternal(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b00e0, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:1477 +0x191b fp=0x1470ec30 sp=0x1470e914 pc=0x55589b
go/types.(*Checker).rawExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b00e0, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:969 +0x4d fp=0x1470ec88 sp=0x1470ec30 pc=0x553d1d
go/types.(*Checker).multiExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b00e0)
        c:/go/src/go/types/expr.go:1549 +0x4d fp=0x1470ecb8 sp=0x1470ec88 pc=0x55781d
go/types.(*Checker).expr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b00e0)
        c:/go/src/go/types/expr.go:1543 +0x39 fp=0x1470eccc sp=0x1470ecb8 pc=0x5577a9
go/types.(*Checker).binary(0x12f35e30, 0x1453e9e0, 0x135b0100, 0x6b5150, 0x135b00e0, 0x6b5130, 0x12ee3190, 0xc)
        c:/go/src/go/types/expr.go:766 +0x53 fp=0x1470ed38 sp=0x1470eccc pc=0x552be3
go/types.(*Checker).exprInternal(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0100, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:1477 +0x191b fp=0x1470f054 sp=0x1470ed38 pc=0x55589b
go/types.(*Checker).rawExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0100, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:969 +0x4d fp=0x1470f0ac sp=0x1470f054 pc=0x553d1d
go/types.(*Checker).multiExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0100)
        c:/go/src/go/types/expr.go:1549 +0x4d fp=0x1470f0dc sp=0x1470f0ac pc=0x55781d
go/types.(*Checker).expr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0100)
        c:/go/src/go/types/expr.go:1543 +0x39 fp=0x1470f0f0 sp=0x1470f0dc pc=0x5577a9
go/types.(*Checker).binary(0x12f35e30, 0x1453e9e0, 0x135b0120, 0x6b5150, 0x135b0100, 0x6b5130, 0x12ee31a0, 0xc)
        c:/go/src/go/types/expr.go:766 +0x53 fp=0x1470f15c sp=0x1470f0f0 pc=0x552be3
go/types.(*Checker).exprInternal(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0120, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:1477 +0x191b fp=0x1470f478 sp=0x1470f15c pc=0x55589b
go/types.(*Checker).rawExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0120, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:969 +0x4d fp=0x1470f4d0 sp=0x1470f478 pc=0x553d1d
go/types.(*Checker).multiExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0120)
        c:/go/src/go/types/expr.go:1549 +0x4d fp=0x1470f500 sp=0x1470f4d0 pc=0x55781d
go/types.(*Checker).expr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0120)
        c:/go/src/go/types/expr.go:1543 +0x39 fp=0x1470f514 sp=0x1470f500 pc=0x5577a9
go/types.(*Checker).binary(0x12f35e30, 0x1453e9e0, 0x135b0140, 0x6b5150, 0x135b0120, 0x6b5130, 0x12ee31b0, 0xc)
        c:/go/src/go/types/expr.go:766 +0x53 fp=0x1470f580 sp=0x1470f514 pc=0x552be3
go/types.(*Checker).exprInternal(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0140, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:1477 +0x191b fp=0x1470f89c sp=0x1470f580 pc=0x55589b
go/types.(*Checker).rawExpr(0x12f35e30, 0x1453e9e0, 0x6b5150, 0x135b0140, 0x0, 0x0, 0x0)
        c:/go/src/go/types/expr.go:969 +0x4d fp=0x1470f8f4 sp=0x1470f89c pc=0x553d1d
...additional frames elided...

Go master, built locally:

>go version
go version devel +0770aaca35 Sat Dec 30 21:59:34 2017 +0000 windows/386

>go env
set GOARCH=386
set GOBIN=
set GOCACHE=C:\Users\karalabe\AppData\Local\go-build
set GOEXE=.exe
set GOHOSTARCH=386
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=C:\Users\karalabe\go
set GORACE=
set GOROOT=c:\Work\go
set GOTMPDIR=
set GOTOOLDIR=c:\Work\go\pkg\tool\windows_386
set GCCGO=gccgo
set GO386=sse2
set CC=C:\Work\mingw32\bin\gcc.exe
set CXX=g++
set CGO_ENABLED=1
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m32 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\karalabe\AppData\Local\Temp\go-build726231898=/tmp/go-build -gno-record-gcc-switches

>go test -v github.com/ethereum/go-ethereum/dashboard
# github.com/ethereum/go-ethereum/dashboard
runtime: VirtualAlloc of 1703936 bytes failed with errno=487
fatal error: runtime: cannot map pages in arena address space

runtime stack:
runtime.throw(0x688a52, 0x30)
        c:/Work/go/src/runtime/panic.go:616 +0x6b
runtime.sysMap(0x43830000, 0x1a0000, 0x3366fe01, 0x7cd878)
        c:/Work/go/src/runtime/mem_windows.go:124 +0x100
runtime.(*mheap).sysAlloc(0x7bd8c0, 0x1a0000, 0x137a9)
        c:/Work/go/src/runtime/malloc.go:470 +0x22f
runtime.(*mheap).grow(0x7bd8c0, 0xcc, 0x0)
        c:/Work/go/src/runtime/mheap.go:907 +0x4e
runtime.(*mheap).allocSpanLocked(0x7bd8c0, 0xcc, 0x7cd888, 0x1f0000)
        c:/Work/go/src/runtime/mheap.go:820 +0x2e4
runtime.(*mheap).alloc_m(0x7bd8c0, 0xcc, 0x40d20101, 0x41d292)
        c:/Work/go/src/runtime/mheap.go:686 +0x115
runtime.(*mheap).alloc.func1()
        c:/Work/go/src/runtime/mheap.go:753 +0x40
runtime.(*mheap).alloc(0x7bd8c0, 0xcc, 0x33000101, 0x421336)
        c:/Work/go/src/runtime/mheap.go:752 +0x6c
runtime.largeAlloc(0x196151, 0x440100, 0x435b0000)
        c:/Work/go/src/runtime/malloc.go:826 +0x7b
runtime.mallocgc.func1()
        c:/Work/go/src/runtime/malloc.go:721 +0x39
runtime.systemstack(0x0)
        c:/Work/go/src/runtime/asm_386.s:464 +0x5e
runtime.mstart()
        c:/Work/go/src/runtime/proc.go:1170

goroutine 1 [running]:
runtime.systemstack_switch()
        c:/Work/go/src/runtime/asm_386.s:418 fp=0x1482a88c sp=0x1482a888 pc=0x44acc0
runtime.mallocgc(0x196151, 0x0, 0x0, 0x0)
        c:/Work/go/src/runtime/malloc.go:720 +0x67b fp=0x1482a8e0 sp=0x1482a88c pc=0x40e72b
runtime.rawstring(0x196151, 0x0, 0x0, 0x0, 0x0, 0x0)
        c:/Work/go/src/runtime/string.go:245 +0x56 fp=0x1482a8f4 sp=0x1482a8e0 pc=0x43c846
runtime.rawstringtmp(0x0, 0x196151, 0x0, 0x0, 0x0, 0x0, 0x0)
        c:/Work/go/src/runtime/string.go:115 +0x51 fp=0x1482a910 sp=0x1482a8f4 pc=0x43c3b1
runtime.concatstrings(0x0, 0x1482a974, 0x2, 0x2, 0x0, 0x401a8f)
        c:/Work/go/src/runtime/string.go:46 +0xc5 fp=0x1482a954 sp=0x1482a910 pc=0x43c015
runtime.concatstring2(0x0, 0x435b0000, 0x196148, 0x13458b51, 0x9, 0x131281d0, 0x6b6540)
        c:/Work/go/src/runtime/string.go:55 +0x39 fp=0x1482a970 sp=0x1482a954 pc=0x43c179
go/constant.BinaryOp(0x6b6540, 0x131281d0, 0xc, 0x6b6540, 0x131281d8, 0x0, 0x0)
        c:/Work/go/src/go/constant/value.go:1113 +0xac0 fp=0x1482aa90 sp=0x1482a970 pc=0x53f2a0
go/types.(*Checker).binary(0x13055dc0, 0x1465eac0, 0x134c9f40, 0x6b5d30, 0x134c9f20, 0x6b5d10, 0x130030b0, 0xc)
        c:/Work/go/src/go/types/expr.go:841 +0x3ea fp=0x1482aafc sp=0x1482aa90 pc=0x55358a
go/types.(*Checker).exprInternal(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9f40, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:1477 +0x191b fp=0x1482ae18 sp=0x1482aafc pc=0x555eab
go/types.(*Checker).rawExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9f40, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:969 +0x4d fp=0x1482ae70 sp=0x1482ae18 pc=0x55432d
go/types.(*Checker).multiExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9f40)
        c:/Work/go/src/go/types/expr.go:1549 +0x4d fp=0x1482aea0 sp=0x1482ae70 pc=0x557e2d
go/types.(*Checker).expr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9f40)
        c:/Work/go/src/go/types/expr.go:1543 +0x39 fp=0x1482aeb4 sp=0x1482aea0 pc=0x557db9
go/types.(*Checker).binary(0x13055dc0, 0x1465eac0, 0x134c9f60, 0x6b5d30, 0x134c9f40, 0x6b5d10, 0x130030c0, 0xc)
        c:/Work/go/src/go/types/expr.go:766 +0x53 fp=0x1482af20 sp=0x1482aeb4 pc=0x5531f3
go/types.(*Checker).exprInternal(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9f60, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:1477 +0x191b fp=0x1482b23c sp=0x1482af20 pc=0x555eab
go/types.(*Checker).rawExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9f60, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:969 +0x4d fp=0x1482b294 sp=0x1482b23c pc=0x55432d
go/types.(*Checker).multiExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9f60)
        c:/Work/go/src/go/types/expr.go:1549 +0x4d fp=0x1482b2c4 sp=0x1482b294 pc=0x557e2d
go/types.(*Checker).expr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9f60)
        c:/Work/go/src/go/types/expr.go:1543 +0x39 fp=0x1482b2d8 sp=0x1482b2c4 pc=0x557db9
go/types.(*Checker).binary(0x13055dc0, 0x1465eac0, 0x134c9f80, 0x6b5d30, 0x134c9f60, 0x6b5d10, 0x130030d0, 0xc)
        c:/Work/go/src/go/types/expr.go:766 +0x53 fp=0x1482b344 sp=0x1482b2d8 pc=0x5531f3
go/types.(*Checker).exprInternal(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9f80, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:1477 +0x191b fp=0x1482b660 sp=0x1482b344 pc=0x555eab
go/types.(*Checker).rawExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9f80, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:969 +0x4d fp=0x1482b6b8 sp=0x1482b660 pc=0x55432d
go/types.(*Checker).multiExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9f80)
        c:/Work/go/src/go/types/expr.go:1549 +0x4d fp=0x1482b6e8 sp=0x1482b6b8 pc=0x557e2d
go/types.(*Checker).expr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9f80)
        c:/Work/go/src/go/types/expr.go:1543 +0x39 fp=0x1482b6fc sp=0x1482b6e8 pc=0x557db9
go/types.(*Checker).binary(0x13055dc0, 0x1465eac0, 0x134c9fa0, 0x6b5d30, 0x134c9f80, 0x6b5d10, 0x130030e0, 0xc)
        c:/Work/go/src/go/types/expr.go:766 +0x53 fp=0x1482b768 sp=0x1482b6fc pc=0x5531f3
go/types.(*Checker).exprInternal(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9fa0, 0x0, 0x0, 0x40)
        c:/Work/go/src/go/types/expr.go:1477 +0x191b fp=0x1482ba84 sp=0x1482b768 pc=0x555eab
go/types.(*Checker).rawExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9fa0, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:969 +0x4d fp=0x1482badc sp=0x1482ba84 pc=0x55432d
go/types.(*Checker).multiExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9fa0)
        c:/Work/go/src/go/types/expr.go:1549 +0x4d fp=0x1482bb0c sp=0x1482badc pc=0x557e2d
go/types.(*Checker).expr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9fa0)
        c:/Work/go/src/go/types/expr.go:1543 +0x39 fp=0x1482bb20 sp=0x1482bb0c pc=0x557db9
go/types.(*Checker).binary(0x13055dc0, 0x1465eac0, 0x134c9fc0, 0x6b5d30, 0x134c9fa0, 0x6b5d10, 0x130030f0, 0xc)
        c:/Work/go/src/go/types/expr.go:766 +0x53 fp=0x1482bb8c sp=0x1482bb20 pc=0x5531f3
go/types.(*Checker).exprInternal(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9fc0, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:1477 +0x191b fp=0x1482bea8 sp=0x1482bb8c pc=0x555eab
go/types.(*Checker).rawExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9fc0, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:969 +0x4d fp=0x1482bf00 sp=0x1482bea8 pc=0x55432d
go/types.(*Checker).multiExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9fc0)
        c:/Work/go/src/go/types/expr.go:1549 +0x4d fp=0x1482bf30 sp=0x1482bf00 pc=0x557e2d
go/types.(*Checker).expr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9fc0)
        c:/Work/go/src/go/types/expr.go:1543 +0x39 fp=0x1482bf44 sp=0x1482bf30 pc=0x557db9
go/types.(*Checker).binary(0x13055dc0, 0x1465eac0, 0x134c9fe0, 0x6b5d30, 0x134c9fc0, 0x6b5d10, 0x13003100, 0xc)
        c:/Work/go/src/go/types/expr.go:766 +0x53 fp=0x1482bfb0 sp=0x1482bf44 pc=0x5531f3
go/types.(*Checker).exprInternal(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9fe0, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:1477 +0x191b fp=0x1482c2cc sp=0x1482bfb0 pc=0x555eab
go/types.(*Checker).rawExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9fe0, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:969 +0x4d fp=0x1482c324 sp=0x1482c2cc pc=0x55432d
go/types.(*Checker).multiExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9fe0)
        c:/Work/go/src/go/types/expr.go:1549 +0x4d fp=0x1482c354 sp=0x1482c324 pc=0x557e2d
go/types.(*Checker).expr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x134c9fe0)
        c:/Work/go/src/go/types/expr.go:1543 +0x39 fp=0x1482c368 sp=0x1482c354 pc=0x557db9
go/types.(*Checker).binary(0x13055dc0, 0x1465eac0, 0x1313e000, 0x6b5d30, 0x134c9fe0, 0x6b5d10, 0x13003110, 0xc)
        c:/Work/go/src/go/types/expr.go:766 +0x53 fp=0x1482c3d4 sp=0x1482c368 pc=0x5531f3
go/types.(*Checker).exprInternal(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e000, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:1477 +0x191b fp=0x1482c6f0 sp=0x1482c3d4 pc=0x555eab
go/types.(*Checker).rawExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e000, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:969 +0x4d fp=0x1482c748 sp=0x1482c6f0 pc=0x55432d
go/types.(*Checker).multiExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e000)
        c:/Work/go/src/go/types/expr.go:1549 +0x4d fp=0x1482c778 sp=0x1482c748 pc=0x557e2d
go/types.(*Checker).expr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e000)
        c:/Work/go/src/go/types/expr.go:1543 +0x39 fp=0x1482c78c sp=0x1482c778 pc=0x557db9
go/types.(*Checker).binary(0x13055dc0, 0x1465eac0, 0x1313e020, 0x6b5d30, 0x1313e000, 0x6b5d10, 0x13003120, 0xc)
        c:/Work/go/src/go/types/expr.go:766 +0x53 fp=0x1482c7f8 sp=0x1482c78c pc=0x5531f3
go/types.(*Checker).exprInternal(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e020, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:1477 +0x191b fp=0x1482cb14 sp=0x1482c7f8 pc=0x555eab
go/types.(*Checker).rawExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e020, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:969 +0x4d fp=0x1482cb6c sp=0x1482cb14 pc=0x55432d
go/types.(*Checker).multiExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e020)
        c:/Work/go/src/go/types/expr.go:1549 +0x4d fp=0x1482cb9c sp=0x1482cb6c pc=0x557e2d
go/types.(*Checker).expr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e020)
        c:/Work/go/src/go/types/expr.go:1543 +0x39 fp=0x1482cbb0 sp=0x1482cb9c pc=0x557db9
go/types.(*Checker).binary(0x13055dc0, 0x1465eac0, 0x1313e040, 0x6b5d30, 0x1313e020, 0x6b5d10, 0x13003130, 0xc)
        c:/Work/go/src/go/types/expr.go:766 +0x53 fp=0x1482cc1c sp=0x1482cbb0 pc=0x5531f3
go/types.(*Checker).exprInternal(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e040, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:1477 +0x191b fp=0x1482cf38 sp=0x1482cc1c pc=0x555eab
go/types.(*Checker).rawExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e040, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:969 +0x4d fp=0x1482cf90 sp=0x1482cf38 pc=0x55432d
go/types.(*Checker).multiExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e040)
        c:/Work/go/src/go/types/expr.go:1549 +0x4d fp=0x1482cfc0 sp=0x1482cf90 pc=0x557e2d
go/types.(*Checker).expr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e040)
        c:/Work/go/src/go/types/expr.go:1543 +0x39 fp=0x1482cfd4 sp=0x1482cfc0 pc=0x557db9
go/types.(*Checker).binary(0x13055dc0, 0x1465eac0, 0x1313e060, 0x6b5d30, 0x1313e040, 0x6b5d10, 0x13003140, 0xc)
        c:/Work/go/src/go/types/expr.go:766 +0x53 fp=0x1482d040 sp=0x1482cfd4 pc=0x5531f3
go/types.(*Checker).exprInternal(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e060, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:1477 +0x191b fp=0x1482d35c sp=0x1482d040 pc=0x555eab
go/types.(*Checker).rawExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e060, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:969 +0x4d fp=0x1482d3b4 sp=0x1482d35c pc=0x55432d
go/types.(*Checker).multiExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e060)
        c:/Work/go/src/go/types/expr.go:1549 +0x4d fp=0x1482d3e4 sp=0x1482d3b4 pc=0x557e2d
go/types.(*Checker).expr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e060)
        c:/Work/go/src/go/types/expr.go:1543 +0x39 fp=0x1482d3f8 sp=0x1482d3e4 pc=0x557db9
go/types.(*Checker).binary(0x13055dc0, 0x1465eac0, 0x1313e080, 0x6b5d30, 0x1313e060, 0x6b5d10, 0x13003150, 0xc)
        c:/Work/go/src/go/types/expr.go:766 +0x53 fp=0x1482d464 sp=0x1482d3f8 pc=0x5531f3
go/types.(*Checker).exprInternal(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e080, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:1477 +0x191b fp=0x1482d780 sp=0x1482d464 pc=0x555eab
go/types.(*Checker).rawExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e080, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:969 +0x4d fp=0x1482d7d8 sp=0x1482d780 pc=0x55432d
go/types.(*Checker).multiExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e080)
        c:/Work/go/src/go/types/expr.go:1549 +0x4d fp=0x1482d808 sp=0x1482d7d8 pc=0x557e2d
go/types.(*Checker).expr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e080)
        c:/Work/go/src/go/types/expr.go:1543 +0x39 fp=0x1482d81c sp=0x1482d808 pc=0x557db9
go/types.(*Checker).binary(0x13055dc0, 0x1465eac0, 0x1313e0a0, 0x6b5d30, 0x1313e080, 0x6b5d10, 0x13003160, 0xc)
        c:/Work/go/src/go/types/expr.go:766 +0x53 fp=0x1482d888 sp=0x1482d81c pc=0x5531f3
go/types.(*Checker).exprInternal(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e0a0, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:1477 +0x191b fp=0x1482dba4 sp=0x1482d888 pc=0x555eab
go/types.(*Checker).rawExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e0a0, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:969 +0x4d fp=0x1482dbfc sp=0x1482dba4 pc=0x55432d
go/types.(*Checker).multiExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e0a0)
        c:/Work/go/src/go/types/expr.go:1549 +0x4d fp=0x1482dc2c sp=0x1482dbfc pc=0x557e2d
go/types.(*Checker).expr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e0a0)
        c:/Work/go/src/go/types/expr.go:1543 +0x39 fp=0x1482dc40 sp=0x1482dc2c pc=0x557db9
go/types.(*Checker).binary(0x13055dc0, 0x1465eac0, 0x1313e0c0, 0x6b5d30, 0x1313e0a0, 0x6b5d10, 0x13003170, 0xc)
        c:/Work/go/src/go/types/expr.go:766 +0x53 fp=0x1482dcac sp=0x1482dc40 pc=0x5531f3
go/types.(*Checker).exprInternal(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e0c0, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:1477 +0x191b fp=0x1482dfc8 sp=0x1482dcac pc=0x555eab
go/types.(*Checker).rawExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e0c0, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:969 +0x4d fp=0x1482e020 sp=0x1482dfc8 pc=0x55432d
go/types.(*Checker).multiExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e0c0)
        c:/Work/go/src/go/types/expr.go:1549 +0x4d fp=0x1482e050 sp=0x1482e020 pc=0x557e2d
go/types.(*Checker).expr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e0c0)
        c:/Work/go/src/go/types/expr.go:1543 +0x39 fp=0x1482e064 sp=0x1482e050 pc=0x557db9
go/types.(*Checker).binary(0x13055dc0, 0x1465eac0, 0x1313e0e0, 0x6b5d30, 0x1313e0c0, 0x6b5d10, 0x13003180, 0xc)
        c:/Work/go/src/go/types/expr.go:766 +0x53 fp=0x1482e0d0 sp=0x1482e064 pc=0x5531f3
go/types.(*Checker).exprInternal(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e0e0, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:1477 +0x191b fp=0x1482e3ec sp=0x1482e0d0 pc=0x555eab
go/types.(*Checker).rawExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e0e0, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:969 +0x4d fp=0x1482e444 sp=0x1482e3ec pc=0x55432d
go/types.(*Checker).multiExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e0e0)
        c:/Work/go/src/go/types/expr.go:1549 +0x4d fp=0x1482e474 sp=0x1482e444 pc=0x557e2d
go/types.(*Checker).expr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e0e0)
        c:/Work/go/src/go/types/expr.go:1543 +0x39 fp=0x1482e488 sp=0x1482e474 pc=0x557db9
go/types.(*Checker).binary(0x13055dc0, 0x1465eac0, 0x1313e100, 0x6b5d30, 0x1313e0e0, 0x6b5d10, 0x13003190, 0xc)
        c:/Work/go/src/go/types/expr.go:766 +0x53 fp=0x1482e4f4 sp=0x1482e488 pc=0x5531f3
go/types.(*Checker).exprInternal(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e100, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:1477 +0x191b fp=0x1482e810 sp=0x1482e4f4 pc=0x555eab
go/types.(*Checker).rawExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e100, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:969 +0x4d fp=0x1482e868 sp=0x1482e810 pc=0x55432d
go/types.(*Checker).multiExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e100)
        c:/Work/go/src/go/types/expr.go:1549 +0x4d fp=0x1482e898 sp=0x1482e868 pc=0x557e2d
go/types.(*Checker).expr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e100)
        c:/Work/go/src/go/types/expr.go:1543 +0x39 fp=0x1482e8ac sp=0x1482e898 pc=0x557db9
go/types.(*Checker).binary(0x13055dc0, 0x1465eac0, 0x1313e120, 0x6b5d30, 0x1313e100, 0x6b5d10, 0x130031a0, 0xc)
        c:/Work/go/src/go/types/expr.go:766 +0x53 fp=0x1482e918 sp=0x1482e8ac pc=0x5531f3
go/types.(*Checker).exprInternal(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e120, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:1477 +0x191b fp=0x1482ec34 sp=0x1482e918 pc=0x555eab
go/types.(*Checker).rawExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e120, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:969 +0x4d fp=0x1482ec8c sp=0x1482ec34 pc=0x55432d
go/types.(*Checker).multiExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e120)
        c:/Work/go/src/go/types/expr.go:1549 +0x4d fp=0x1482ecbc sp=0x1482ec8c pc=0x557e2d
go/types.(*Checker).expr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e120)
        c:/Work/go/src/go/types/expr.go:1543 +0x39 fp=0x1482ecd0 sp=0x1482ecbc pc=0x557db9
go/types.(*Checker).binary(0x13055dc0, 0x1465eac0, 0x1313e140, 0x6b5d30, 0x1313e120, 0x6b5d10, 0x130031b0, 0xc)
        c:/Work/go/src/go/types/expr.go:766 +0x53 fp=0x1482ed3c sp=0x1482ecd0 pc=0x5531f3
go/types.(*Checker).exprInternal(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e140, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:1477 +0x191b fp=0x1482f058 sp=0x1482ed3c pc=0x555eab
go/types.(*Checker).rawExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e140, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:969 +0x4d fp=0x1482f0b0 sp=0x1482f058 pc=0x55432d
go/types.(*Checker).multiExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e140)
        c:/Work/go/src/go/types/expr.go:1549 +0x4d fp=0x1482f0e0 sp=0x1482f0b0 pc=0x557e2d
go/types.(*Checker).expr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e140)
        c:/Work/go/src/go/types/expr.go:1543 +0x39 fp=0x1482f0f4 sp=0x1482f0e0 pc=0x557db9
go/types.(*Checker).binary(0x13055dc0, 0x1465eac0, 0x1313e160, 0x6b5d30, 0x1313e140, 0x6b5d10, 0x130031c0, 0xc)
        c:/Work/go/src/go/types/expr.go:766 +0x53 fp=0x1482f160 sp=0x1482f0f4 pc=0x5531f3
go/types.(*Checker).exprInternal(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e160, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:1477 +0x191b fp=0x1482f47c sp=0x1482f160 pc=0x555eab
go/types.(*Checker).rawExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e160, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:969 +0x4d fp=0x1482f4d4 sp=0x1482f47c pc=0x55432d
go/types.(*Checker).multiExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e160)
        c:/Work/go/src/go/types/expr.go:1549 +0x4d fp=0x1482f504 sp=0x1482f4d4 pc=0x557e2d
go/types.(*Checker).expr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e160)
        c:/Work/go/src/go/types/expr.go:1543 +0x39 fp=0x1482f518 sp=0x1482f504 pc=0x557db9
go/types.(*Checker).binary(0x13055dc0, 0x1465eac0, 0x1313e180, 0x6b5d30, 0x1313e160, 0x6b5d10, 0x130031d0, 0xc)
        c:/Work/go/src/go/types/expr.go:766 +0x53 fp=0x1482f584 sp=0x1482f518 pc=0x5531f3
go/types.(*Checker).exprInternal(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e180, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:1477 +0x191b fp=0x1482f8a0 sp=0x1482f584 pc=0x555eab
go/types.(*Checker).rawExpr(0x13055dc0, 0x1465eac0, 0x6b5d30, 0x1313e180, 0x0, 0x0, 0x0)
        c:/Work/go/src/go/types/expr.go:969 +0x4d fp=0x1482f8f8 sp=0x1482f8a0 pc=0x55432d
...additional frames elided...

@bradfitz
Copy link
Contributor

@karalabe, can you confirm that adding go test -vet=off fixes it? I think it's the vet checker running in parallel with go test that's consuming a lot of memory.

@karalabe
Copy link
Contributor Author

Confirmed, -vet=off fixes my above repro.

@bradfitz bradfitz added NeedsDecision Feedback is required from experts, contributors, and/or the community before a change can be made. release-blocker and removed WaitingForInfo Issue is not actionable because of missing required information, which needs to be provided. labels Dec 31, 2017
@bradfitz bradfitz added this to the Go1.10 milestone Dec 31, 2017
@bradfitz
Copy link
Contributor

So, I guess go/types is just memory hungry and that hurts on 386's small address space. Presumably we'd have the same problem on arm and other 32-bit platforms.

Optimizing go/types at this point seems too much too late. @griesemer, @alandonovan ... ?

Or is the GC failing us here? @aclements.

Maybe just detect this runtime error from vet and ignore it, as if vet didn't run? @ianlancetaylor, @rsc.

@aclements
Copy link
Member

The particular error code is odd. 487 is ERROR_INVALID_ADDRESS, which is not what I'd expect if we just ran out of memory. @alexbrainman, any idea why VirtualAlloc(MEM_COMMIT) would return that, especially given that we must have just successfully called VirutalAlloc(MEM_RESERVE) for the same address, and the addresses all look totally reasonable (e.g., 0x43f20000)?

@karalabe, I wasn't able to make sense of the issue you linked to (ethereum/go-ethereum#15743), since the traceback appears incomplete. Why do think it's related?

@griesemer
Copy link
Contributor

@bradfitz Assuming it's not some other go/types unrelated issue, it would be interesting to see which exact code leads to the problem and if it's always the same. The following patch prints the location and operands before the code goes into go/constant.BinaryOp:

diff --git a/src/go/types/expr.go b/src/go/types/expr.go
index ea778fd188..c0237c73c8 100644
--- a/src/go/types/expr.go
+++ b/src/go/types/expr.go
@@ -838,6 +838,7 @@ func (check *Checker) binary(x *operand, e *ast.BinaryExpr, lhs, rhs ast.Expr, o
                if op == token.QUO && isInteger(typ) {
                        op = token.QUO_ASSIGN
                }
+               check.dump("%s: x = %s, y = %s, op = %d", x.pos(), x, &y, op)
                x.val = constant.BinaryOp(xval, op, yval)
                // Typed constants must be representable in
                // their type after each constant operation.

It probably needs to be refined otherwise it prints too much, but it may be a starting point.

(I'm out through 1/1/18 but can try to help after that.)

@alexbrainman
Copy link
Member

The particular error code is odd. 487 is ERROR_INVALID_ADDRESS, which is not what I'd expect if we just ran out of memory. @alexbrainman, any idea why VirtualAlloc(MEM_COMMIT) would return that, especially given that we must have just successfully called VirutalAlloc(MEM_RESERVE) for the same address, and the addresses all look totally reasonable (e.g., 0x43f20000)?

I don't have good explanation for the error we see. I would insert println near every VirtualAlloc call to understand allocation pattern here - that might give some clue about what is happening. I am not near computer to try that now.

But I wouldn't spend much time trying to understand the reason for ERROR_INVALID_ADDRESS. This crash is happening on Linux too. So, like Brad said, I reckon we use too much memory for these environments.

Alex

@gopherbot
Copy link

Change https://golang.org/cl/85887 mentions this issue: runtime: use sparse mappings for the heap

rsc added a commit to rsc/go-bindata that referenced this issue Jan 5, 2018
The current code prints long string concatenations like

	a + b + c + d + e + f

The new code prints

	((a + (b + c)) + (d + (e + f)))

This has the effect of minimizing the overall height of the
expression tree, which makes recursive traversals of the
tree a little happier and makes incremental computation
of string constants as in go/types and go/vet MUCH happier.

The compilers and go/types should be fixed so that this
isn't necessary, but we can't fix the old releases, and this
is very easy, so it seems worth doing.

For golang/go#23222.
rsc added a commit to rsc/go-ethereum that referenced this issue Jan 5, 2018
Use current rsc/go-bindata instead of jteeuwen/go-bindata, to get
balanced tree in very long string concatenations.
This works around problems in current Go distributions.

For golang/go#23222.
kevinburke pushed a commit to kevinburke/go-bindata that referenced this issue Jan 5, 2018
The current code prints long string concatenations like

	a + b + c + d + e + f

The new code prints

	((a + (b + c)) + (d + (e + f)))

This has the effect of minimizing the overall height of the
expression tree, which makes recursive traversals of the
tree a little happier and makes incremental computation
of string constants as in go/types and go/vet MUCH happier.

The compilers and go/types should be fixed so that this
isn't necessary, but we can't fix the old releases, and this
is very easy, so it seems worth doing.

For golang/go#23222.
karalabe pushed a commit to ethereum/go-ethereum that referenced this issue Jan 5, 2018
* go-ethereum/dashboard: update assets.go

Use current rsc/go-bindata instead of jteeuwen/go-bindata, to get
balanced tree in very long string concatenations.
This works around problems in current Go distributions.

For golang/go#23222.

* dashboard: run last two go:generate steps for linter
@rsc
Copy link
Contributor

rsc commented Jan 5, 2018

TL;DR: For cmd/compile, this is a dup of #16394, which @mdempsky fixed in November (thanks!). For cmd/vet (really go/types), there is a new problem, for which I will file an issue and fix for Go 1.10. There is also a minor cmd/gofmt issue for Go 1.11, which I will file.

For the older releases I also sent a PR for go-bindata to emit balanced trees and also a PR to ethereum to use that go-bindata. Those are linked above and will fix the problems with older toolchains and ethereum. (Thanks @kevinburke and @karalabe.)


go get -u rsc.io/tmp/bigprog is a simple test of how our tools handle long arithmetic expressions like 1 + 1 + 1 + 1 + ... + 1 or "1" + "1" + "1" + "1" + ... + "1", compared with balanced expressions like (("1" + "1") + ("1" + "1")), inspired by the problem in #23222, which involved a string concatenation of about 700 strings. To run it, also do go get -u golang.org/x/tools/cmd/gotype.

The results on my 2015 Mac laptop, in both 64-bit and 32-bit mode, are below.
This line:

      1000  int   0.019s  strbal   0.021s  strbigbal   0.037s  str   0.025s  strbig    0.032s

means that a tool was run on five different programs each with a single expression containing 1000 addition operations.

The int program is 1 + 1 + 1 + ... + 1.
The str program (later in the line) is "1" + "1" + "1" + ... + "1".
The strbig program is str but each literal is actually 1000 1 characters: "111...1".
The strbal and strbigbal programs are str and strbig but add parentheses to make a balanced parse tree.
Note that the tables report strbal and strbigbal before str and strbig, because strbig in particular is the worst case for many tools.

The compiler does very well, because Matthew fixed this in the parser to address #16394, in https://golang.org/cl/76450, during the Go 1.10 cycle. The reports of stack overflow in the Go 1.9.2 compiler are essentially dups of #16394, now fixed. Even before that change, the compiler needed stack to recurse over the whole expression but otherwise handled it efficiently, with a single allocation to construct the whole concatenation (I did that in 2014, mainly to speed program execution, but it had the effect of speeding compilation too (https://golang.org/cl/83090046)). With Matthew's fix, there's basically nothing left to do in the compiler.

The go/types package does not do as well, because it does not have the OADDSTR optimization in typecheck, nor in the parser. When go/constant builds up the actual value of the expression, it is accidentally quadratic on str: it allocates "1", then "11", then "111", then "1111", and so on. Similarly for strbig, with longer strings. On my Mac, a 32-bit gotype runs out of memory in a concatenation of 4000 1k strings (4MB total). On strbal and strbigbal it does better: the balanced tree makes it accidntally O(n log n). Luckily the go/constant API is well enough designed that the underlying representation can be changed to do the actual concatenation lazily, cutting it back to O(n) even on the unbalanced case. This is important to fix because the new automatic go vet uses go/types. I will file a new issue and send a CL for that, for Go 1.10.

Finally gofmt. I ran gofmt originally as a control, thinking that comparing to gotype would let us see how much time was spent in typechecking (gotype minus gofmt). Unfortunately, gofmt itself seems to have some accidentally quadratic behavior in making its layout decisions. (I won't be surprised if the problem is in the code to decide whether to add spaces around operators, which would make it my fault, and if so, my apologies). I will file a Go 1.11 issue for gofmt.

amd64

go tool compile

      1000  int   0.019s  strbal   0.021s  strbigbal   0.037s  str   0.025s  strbig    0.032s
      2000  int   0.020s  strbal   0.023s  strbigbal   0.062s  str   0.032s  strbig    0.047s
      4000  int   0.022s  strbal   0.025s  strbigbal   0.099s  str   0.044s  strbig    0.078s
      8000  int   0.024s  strbal   0.032s  strbigbal   0.187s  str   0.072s  strbig    0.132s
     16000  int   0.029s  strbal   0.048s  strbigbal   0.370s  str   0.127s  strbig    0.226s
     32000  int   0.048s  strbal   0.076s  strbigbal   0.760s  str   0.238s  strbig    0.459s
     64000  int   0.059s  strbal   0.141s  strbigbal   1.551s  str   0.426s  strbig    0.861s
    128000  int   0.109s  strbal   0.275s  strbigbal   3.207s  str   0.869s  strbig    1.785s
    256000  int   0.220s  strbal   0.523s  strbigbal   6.641s  str   stack!  strbig    3.422s

gotype

      1000  int   0.023s  strbal   0.007s  strbigbal   0.022s  str   0.011s  strbig    0.254s
      2000  int   0.016s  strbal   0.008s  strbigbal   0.038s  str   0.014s  strbig    1.130s
      4000  int   0.027s  strbal   0.013s  strbigbal   0.066s  str   0.022s  strbig    4.861s
      8000  int   0.072s  strbal   0.020s  strbigbal   0.122s  str   0.042s  strbig   23.908s
     16000  int   0.199s  strbal   0.031s  strbigbal   0.262s  str   0.093s  strbig  sigkill!
     32000  int   0.530s  strbal   0.061s  strbigbal   0.536s  str   0.183s
     64000  int   1.630s  strbal   0.123s  strbigbal   1.060s  str   0.368s
    128000  int   5.338s  strbal   0.286s  strbigbal   2.243s  str   0.706s
    256000  int  22.431s  strbal   0.580s  strbigbal   4.652s  str   1.500s

go vet

      1000  int   0.217s  strbal   0.091s  strbigbal   0.128s  str   0.086s  strbig    0.323s
      2000  int   0.099s  strbal   0.092s  strbigbal   0.183s  str   0.094s  strbig    1.181s
      4000  int   0.109s  strbal   0.100s  strbigbal   0.271s  str   0.103s  strbig    4.676s
      8000  int   0.158s  strbal   0.111s  strbigbal   0.475s  str   0.130s  strbig   23.340s
     16000  int   0.386s  strbal   0.162s  strbigbal   0.895s  str   0.180s  strbig  sigkill! 
     32000  int   0.775s  strbal   0.245s  strbigbal   1.791s  str   0.292s
     64000  int   1.912s  strbal   0.430s  strbigbal   3.653s  str   0.536s
    128000  int   5.899s  strbal   0.808s  strbigbal   7.649s  str   0.978s
    256000  int  23.739s  strbal   1.617s  strbigbal  14.617s  str   stack! 

gofmt

      1000  int   0.035s  strbal   0.008s  strbigbal   0.030s  str   0.026s  strbig    0.047s
      2000  int   0.071s  strbal   0.012s  strbigbal   0.051s  str   0.079s  strbig    0.115s
      4000  int   0.291s  strbal   0.022s  strbigbal   0.092s  str   0.271s  strbig    0.362s
      8000  int   1.049s  strbal   0.032s  strbigbal   0.173s  str   1.092s  strbig    1.249s
     16000  int   4.332s  strbal   0.070s  strbigbal   0.346s  str   4.338s  strbig    4.852s
     32000  int  18.897s  strbal   0.112s  strbigbal   0.662s  str  18.212s  strbig   18.889s
     64000  int  82.845s  strbal   0.224s  strbigbal   1.292s  str  84.138s  strbig   83.718s
    128000  int 382.780s  strbal   0.425s  strbigbal   2.588s  str 381.781s  strbig  392.788s

386

go tool compile

      1000  int   0.014s  strbal   0.014s  strbigbal   0.039s  str   0.024s  strbig    0.034s
      2000  int   0.013s  strbal   0.015s  strbigbal   0.067s  str   0.022s  strbig    0.050s
      4000  int   0.016s  strbal   0.018s  strbigbal   0.118s  str   0.035s  strbig    0.097s
      8000  int   0.018s  strbal   0.026s  strbigbal   0.219s  str   0.054s  strbig    0.162s
     16000  int   0.023s  strbal   0.039s  strbigbal   0.455s  str   0.092s  strbig    0.311s
     32000  int   0.039s  strbal   0.071s  strbigbal   0.971s  str   0.195s  strbig    0.641s
     64000  int   0.061s  strbal   0.131s  strbigbal   2.024s  str   0.352s  strbig    1.247s
    128000  int   0.106s  strbal   0.253s  strbigbal   3.994s  str   stack!  strbig    2.495s
    256000  int   0.231s  strbal   0.501s  strbigbal     mem!   str  stack!  strbig    4.944s

gotype

      1000  int   0.024s  strbal   0.005s  strbigbal   0.020s  str   0.008s  strbig    0.287s
      2000  int   0.014s  strbal   0.007s  strbigbal   0.039s  str   0.014s  strbig    1.115s
      4000  int   0.033s  strbal   0.010s  strbigbal   0.072s  str   0.022s  strbig      mem! 
      8000  int   0.074s  strbal   0.016s  strbigbal   0.142s  str   0.040s
     16000  int   0.208s  strbal   0.033s  strbigbal   0.290s  str   0.091s
     32000  int   0.608s  strbal   0.060s  strbigbal   0.616s  str   0.188s
     64000  int   1.843s  strbal   0.131s  strbigbal   1.222s  str   0.374s
    128000  int  stack!   strbal   0.272s  strbigbal   2.585s  str   stack! 
    256000  int  stack!   strbal   0.640s  strbigbal     mem!   str  stack! 

go vet

      1000  int   0.098s  strbal   0.073s  strbigbal   0.135s  str   0.078s  strbig    0.396s
      2000  int   0.081s  strbal   0.073s  strbigbal   0.203s  str   0.077s  strbig    1.268s
      4000  int   0.097s  strbal   0.081s  strbigbal   0.340s  str   0.093s  strbig      mem! 
      8000  int   0.147s  strbal   0.093s  strbigbal   0.623s  str   0.134s
     16000  int   0.278s  strbal   0.130s  strbigbal   1.224s  str   0.230s
     32000  int   0.712s  strbal   0.219s  strbigbal   2.398s  str   0.452s
     64000  int   2.027s  strbal   0.389s  strbigbal   4.815s  str   0.863s
    128000  int  stack!   strbal   0.724s  strbigbal   9.902s  str   stack! 
    256000  int  stack!   strbal   1.514s  strbigbal     mem!  str   stack! 

gofmt

      1000  int   0.033s  strbal   0.006s  strbigbal   0.034s  str   0.021s  strbig    0.048s
      2000  int   0.067s  strbal   0.010s  strbigbal   0.068s  str   0.070s  strbig    0.125s
      4000  int   0.244s  strbal   0.019s  strbigbal   0.119s  str   0.223s  strbig    0.327s
      8000  int   0.854s  strbal   0.031s  strbigbal   0.238s  str   0.863s  strbig    1.101s
     16000  int   3.519s  strbal   0.062s  strbigbal   0.490s  str   3.417s  strbig    3.892s
     32000  int  13.626s  strbal   0.117s  strbigbal   0.932s  str  13.617s  strbig   14.544s
     64000  int  55.858s  strbal   0.232s  strbigbal   1.844s  str  56.563s  strbig   57.930s
    128000  int 252.079s  strbal   0.493s  strbigbal   3.724s  str 250.775s  strbig  255.842s
    256000  int  stack!   strbal   0.940s  strbigbal   7.614s  str   stack! 

@gopherbot
Copy link

Change https://golang.org/cl/86395 mentions this issue: go/constant: make string addition compute actual string lazily

gopherbot pushed a commit that referenced this issue Jan 5, 2018
It is natural for tools to take a large string concatenation like

	"1" + "1" + "1" + ... + "1"

and translate that into a sequence of go/constant calls:

	x := constant.MakeString("1")
	x = constant.BinaryOp(x, token.ADD, constant.MakeString("1"))
	x = constant.BinaryOp(x, token.ADD, constant.MakeString("1"))
	x = constant.BinaryOp(x, token.ADD, constant.MakeString("1"))
	x = constant.BinaryOp(x, token.ADD, constant.MakeString("1"))
	...

If the underlying representation of a string constant is a Go string,
then this leads to O(N²) memory for the concatenation of N strings,
allocating memory for "1", "11", "111", "1111", and so on.
This makes go/types and in particular cmd/vet run out of memory
(or at least use far too much) on machine-generated string concatenations,
such as those generated by go-bindata.

This CL allows code like the above to operate efficiently, by delaying
the evaluation of the actual string constant value until it is needed.
Now the representation of a string constant is either a string or an
explicit addition expression. The addition expression is turned into
a string the first time it is requested and then cached for future use.
This slows down the use of single strings, but analyses are likely not
dominated by that use anyway. It speeds up string concatenations,
especially large ones, significantly.

On my Mac running 32-bit code:

name               old time/op    new time/op    delta
StringAdd/1-8         160ns ± 2%     183ns ± 1%  +13.98%  (p=0.000 n=10+10)
StringAdd/4-8         650ns ± 1%     927ns ± 4%  +42.73%  (p=0.000 n=10+10)
StringAdd/16-8       3.93µs ± 1%    2.78µs ± 2%  -29.12%  (p=0.000 n=8+9)
StringAdd/64-8       37.3µs ± 9%    10.1µs ± 5%  -73.06%  (p=0.000 n=10+10)
StringAdd/256-8       513µs ± 5%      38µs ± 1%  -92.63%  (p=0.000 n=10+10)
StringAdd/1024-8     5.67ms ± 4%    0.14ms ± 2%  -97.45%  (p=0.000 n=8+10)
StringAdd/4096-8     77.1ms ± 9%     0.7ms ± 2%  -99.10%  (p=0.000 n=10+9)
StringAdd/16384-8     1.33s ± 7%     0.00s ±10%  -99.64%  (p=0.000 n=10+10)
StringAdd/65536-8     21.5s ± 4%      0.0s ± 8%  -99.89%  (p=0.000 n=10+10)

name               old alloc/op   new alloc/op   delta
StringAdd/1-8          232B ± 0%      256B ± 0%  +10.34%  (p=0.000 n=10+10)
StringAdd/4-8        1.20kB ± 0%    1.24kB ± 0%   +3.33%  (p=0.000 n=10+10)
StringAdd/16-8       14.7kB ± 0%     4.6kB ± 0%  -68.87%  (p=0.000 n=10+10)
StringAdd/64-8        223kB ± 0%      16kB ± 0%  -92.66%  (p=0.000 n=10+10)
StringAdd/256-8      3.48MB ± 0%    0.07MB ± 0%  -98.07%  (p=0.000 n=10+10)
StringAdd/1024-8     55.7MB ± 0%     0.3MB ± 0%  -99.53%  (p=0.000 n=10+10)
StringAdd/4096-8      855MB ± 0%       1MB ± 0%  -99.88%  (p=0.000 n=10+10)
StringAdd/16384-8    13.5GB ± 0%     0.0GB ± 0%  -99.97%  (p=0.000 n=9+10)
StringAdd/65536-8     215GB ± 0%       0GB ± 0%  -99.99%  (p=0.000 n=10+10)

name               old allocs/op  new allocs/op  delta
StringAdd/1-8          3.00 ± 0%      3.00 ± 0%     ~     (all equal)
StringAdd/4-8          9.00 ± 0%     11.00 ± 0%  +22.22%  (p=0.000 n=10+10)
StringAdd/16-8         33.0 ± 0%      25.0 ± 0%  -24.24%  (p=0.000 n=10+10)
StringAdd/64-8          129 ± 0%        75 ± 0%  -41.86%  (p=0.000 n=10+10)
StringAdd/256-8         513 ± 0%       269 ± 0%  -47.56%  (p=0.000 n=10+10)
StringAdd/1024-8      2.05k ± 0%     1.04k ± 0%  -49.29%  (p=0.000 n=10+10)
StringAdd/4096-8      8.19k ± 0%     4.12k ± 0%  -49.77%  (p=0.000 n=10+10)
StringAdd/16384-8     32.8k ± 0%     16.4k ± 0%  -49.97%  (p=0.000 n=9+10)
StringAdd/65536-8      131k ± 0%       66k ± 0%  -50.11%  (p=0.000 n=10+10)

https://perf.golang.org/search?q=upload:20180105.2

Fixes #23348 (originally reported as cmd/vet failures in comments on #23222).

This makes constant.Values of Kind String no longer meaningful for ==, which
required fixes in go/types. While there, also fix go/types handling of constant.Values
of Kind Int (for uint64), Float, and Complex.

Change-Id: I80867bc9c4232c5c9b213443ff16645434a68b36
Reviewed-on: https://go-review.googlesource.com/86395
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
cooganb pushed a commit to cooganb/go-ethereum that referenced this issue Jan 23, 2018
* go-ethereum/dashboard: update assets.go

Use current rsc/go-bindata instead of jteeuwen/go-bindata, to get
balanced tree in very long string concatenations.
This works around problems in current Go distributions.

For golang/go#23222.

* dashboard: run last two go:generate steps for linter
@alexbrainman
Copy link
Member

The particular error code is odd. 487 is ERROR_INVALID_ADDRESS, which is not what I'd expect if we just ran out of memory. @alexbrainman, any idea why VirtualAlloc(MEM_COMMIT) would return that, especially given that we must have just successfully called VirutalAlloc(MEM_RESERVE) for the same address, and the addresses all look totally reasonable (e.g., 0x43f20000)?

@aclements the failure is at c:/go/src/runtime/mem_windows.go:124 so it is this call

stdcall4(_VirtualAlloc, uintptr(v), n, _MEM_COMMIT, _PAGE_READWRITE)

that failed. But according to VirtualAlloc documentation https://msdn.microsoft.com/en-us/library/windows/desktop/aa366887(v=vs.85).aspx:
"Attempting to commit a specific address range by specifying MEM_COMMIT without MEM_RESERVE and a non-NULL lpAddress fails unless the entire range has already been reserved. The resulting error code is ERROR_INVALID_ADDRESS."
Perhaps 0x43f20000 has never been reserved?

Alex

gopherbot pushed a commit that referenced this issue Feb 15, 2018
This replaces the contiguous heap arena mapping with a potentially
sparse mapping that can support heap mappings anywhere in the address
space.

This has several advantages over the current approach:

* There is no longer any limit on the size of the Go heap. (Currently
  it's limited to 512GB.) Hence, this fixes #10460.

* It eliminates many failures modes of heap initialization and
  growing. In particular it eliminates any possibility of panicking
  with an address space conflict. This can happen for many reasons and
  even causes a low but steady rate of TSAN test failures because of
  conflicts with the TSAN runtime. See #16936 and #11993.

* It eliminates the notion of "non-reserved" heap, which was added
  because creating huge address space reservations (particularly on
  64-bit) led to huge process VSIZE. This was at best confusing and at
  worst conflicted badly with ulimit -v. However, the non-reserved
  heap logic is complicated, can race with other mappings in non-pure
  Go binaries (e.g., #18976), and requires that the entire heap be
  either reserved or non-reserved. We currently maintain the latter
  property, but it's quite difficult to convince yourself of that, and
  hence difficult to keep correct. This logic is still present, but
  will be removed in the next CL.

* It fixes problems on 32-bit where skipping over parts of the address
  space leads to mapping huge (and never-to-be-used) metadata
  structures. See #19831.

This also completely rewrites and significantly simplifies
mheap.sysAlloc, which has been a source of many bugs. E.g., #21044,
 #20259, #18651, and #13143 (and maybe #23222).

This change also makes it possible to allocate individual objects
larger than 512GB. As a result, a few tests that expected huge
allocations to fail needed to be changed to make even larger
allocations. However, at the moment attempting to allocate a humongous
object may cause the program to freeze for several minutes on Linux as
we fall back to probing every page with addrspace_free. That logic
(and this failure mode) will be removed in the next CL.

Fixes #10460.
Fixes #22204 (since it rewrites the code involved).

This slightly slows down compilebench and the x/benchmarks garbage
benchmark.

name       old time/op     new time/op     delta
Template       184ms ± 1%      185ms ± 1%    ~     (p=0.065 n=10+9)
Unicode       86.9ms ± 3%     86.3ms ± 1%    ~     (p=0.631 n=10+10)
GoTypes        599ms ± 0%      602ms ± 0%  +0.56%  (p=0.000 n=10+9)
Compiler       2.87s ± 1%      2.89s ± 1%  +0.51%  (p=0.002 n=9+10)
SSA            7.29s ± 1%      7.25s ± 1%    ~     (p=0.182 n=10+9)
Flate          118ms ± 2%      118ms ± 1%    ~     (p=0.113 n=9+9)
GoParser       147ms ± 1%      148ms ± 1%  +1.07%  (p=0.003 n=9+10)
Reflect        401ms ± 1%      404ms ± 1%  +0.71%  (p=0.003 n=10+9)
Tar            175ms ± 1%      175ms ± 1%    ~     (p=0.604 n=9+10)
XML            209ms ± 1%      210ms ± 1%    ~     (p=0.052 n=10+10)

(https://perf.golang.org/search?q=upload:20171231.4)

name                       old time/op  new time/op  delta
Garbage/benchmem-MB=64-12  2.23ms ± 1%  2.25ms ± 1%  +0.84%  (p=0.000 n=19+19)

(https://perf.golang.org/search?q=upload:20171231.3)

Relative to the start of the sparse heap changes (starting at and
including "runtime: fix various contiguous bitmap assumptions"),
overall slowdown is roughly 1% on GC-intensive benchmarks:

name        old time/op     new time/op     delta
Template        183ms ± 1%      185ms ± 1%  +1.32%  (p=0.000 n=9+9)
Unicode        84.9ms ± 2%     86.3ms ± 1%  +1.65%  (p=0.000 n=9+10)
GoTypes         595ms ± 1%      602ms ± 0%  +1.19%  (p=0.000 n=9+9)
Compiler        2.86s ± 0%      2.89s ± 1%  +0.91%  (p=0.000 n=9+10)
SSA             7.19s ± 0%      7.25s ± 1%  +0.75%  (p=0.000 n=8+9)
Flate           117ms ± 1%      118ms ± 1%  +1.10%  (p=0.000 n=10+9)
GoParser        146ms ± 2%      148ms ± 1%  +1.48%  (p=0.002 n=10+10)
Reflect         398ms ± 1%      404ms ± 1%  +1.51%  (p=0.000 n=10+9)
Tar             173ms ± 1%      175ms ± 1%  +1.17%  (p=0.000 n=10+10)
XML             208ms ± 1%      210ms ± 1%  +0.62%  (p=0.011 n=10+10)
[Geo mean]      369ms           373ms       +1.17%

(https://perf.golang.org/search?q=upload:20180101.2)

name                       old time/op  new time/op  delta
Garbage/benchmem-MB=64-12  2.22ms ± 1%  2.25ms ± 1%  +1.51%  (p=0.000 n=20+19)

(https://perf.golang.org/search?q=upload:20180101.3)

Change-Id: I5daf4cfec24b252e5a57001f0a6c03f22479d0f0
Reviewed-on: https://go-review.googlesource.com/85887
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
guilhermebr pushed a commit to gochain/gochain that referenced this issue Feb 18, 2018
* go-ethereum/dashboard: update assets.go

Use current rsc/go-bindata instead of jteeuwen/go-bindata, to get
balanced tree in very long string concatenations.
This works around problems in current Go distributions.

For golang/go#23222.

* dashboard: run last two go:generate steps for linter
cooganb pushed a commit to cooganb/go-ethereum that referenced this issue Feb 23, 2018
* go-ethereum/dashboard: update assets.go

Use current rsc/go-bindata instead of jteeuwen/go-bindata, to get
balanced tree in very long string concatenations.
This works around problems in current Go distributions.

For golang/go#23222.

* dashboard: run last two go:generate steps for linter
shuLhan pushed a commit to shuLhan/go-bindata that referenced this issue Feb 27, 2018
The current code prints long string concatenations like

	a + b + c + d + e + f

The new code prints

	((a + (b + c)) + (d + (e + f)))

This has the effect of minimizing the overall height of the
expression tree, which makes recursive traversals of the
tree a little happier and makes incremental computation
of string constants as in go/types and go/vet MUCH happier.

The compilers and go/types should be fixed so that this
isn't necessary, but we can't fix the old releases, and this
is very easy, so it seems worth doing.

For golang/go#23222.
shuLhan pushed a commit to shuLhan/go-bindata that referenced this issue Mar 2, 2018
The current code prints long string concatenations like

	a + b + c + d + e + f

The new code prints

	((a + (b + c)) + (d + (e + f)))

This has the effect of minimizing the overall height of the
expression tree, which makes recursive traversals of the
tree a little happier and makes incremental computation
of string constants as in go/types and go/vet MUCH happier.

The compilers and go/types should be fixed so that this
isn't necessary, but we can't fix the old releases, and this
is very easy, so it seems worth doing.

For golang/go#23222.
shuLhan pushed a commit to shuLhan/go-bindata that referenced this issue May 19, 2018
The current code prints long string concatenations like

	a + b + c + d + e + f

The new code prints

	((a + (b + c)) + (d + (e + f)))

This has the effect of minimizing the overall height of the
expression tree, which makes recursive traversals of the
tree a little happier and makes incremental computation
of string constants as in go/types and go/vet MUCH happier.

The compilers and go/types should be fixed so that this
isn't necessary, but we can't fix the old releases, and this
is very easy, so it seems worth doing.

For golang/go#23222.
mariameda pushed a commit to NiluPlatform/go-nilu that referenced this issue Aug 23, 2018
* go-ethereum/dashboard: update assets.go

Use current rsc/go-bindata instead of jteeuwen/go-bindata, to get
balanced tree in very long string concatenations.
This works around problems in current Go distributions.

For golang/go#23222.

* dashboard: run last two go:generate steps for linter
hatricker pushed a commit to thundercore/thundercore-localchain that referenced this issue Oct 8, 2018
* go-ethereum/dashboard: update assets.go

Use current rsc/go-bindata instead of jteeuwen/go-bindata, to get
balanced tree in very long string concatenations.
This works around problems in current Go distributions.

For golang/go#23222.

* dashboard: run last two go:generate steps for linter
@golang golang locked and limited conversation to collaborators Jan 28, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
FrozenDueToAge NeedsDecision Feedback is required from experts, contributors, and/or the community before a change can be made. release-blocker
Projects
None yet
Development

No branches or pull requests

8 participants