go: cmd/compile: panic: offset too large

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

$ go version
go version go1.19 darwin/amd64

Does this issue reproduce with the latest release?

Unsure.

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

go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN="/Users/x/gopath/bin"
GOCACHE="/Users/x/Library/Caches/go-build"
GOENV="/Users/x/Library/Application Support/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/x/gopath/pkg/mod"
GONOPROXY="*.s.com,*.s-s.com"
GONOSUMDB="*.s.com,*.s-s.com"
GOOS="darwin"
GOPATH="/Users/x/gopath"
GOPRIVATE="*.s.com,*.s-s.com"
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GOVCS=""
GOVERSION="go1.19"
GCCGO="gccgo"
GOAMD64="v1"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/dev/null"
GOWORK=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/2b/74fz3jhd4wz4vnbf4z7ywzww0000gp/T/go-build668550611=/tmp/go-build -gno-record-gcc-switches -fno-common"

What did you do?

$ PROJ_TEST_LOG_STDERR=1 go test -v -vet all -failfast -run TestStashOutgoing 2>&1 | tee /tmp/logs.txt
# spideroak.com/proj/policy [spideroak.com/proj/policy.test]
panic: offset too large

goroutine 560 [running]:
cmd/compile/internal/liveness.(*argLiveness).emit(0xc001039800)
	/usr/local/go/src/cmd/compile/internal/liveness/arg.go:310 +0x3aa
cmd/compile/internal/liveness.ArgLiveness(0xc001ec92c0, 0xc000c32540, 0x123e35c?)
	/usr/local/go/src/cmd/compile/internal/liveness/arg.go:218 +0xab5
cmd/compile/internal/ssagen.genssa(0xc000c32540, 0xc00098dce0)
	/usr/local/go/src/cmd/compile/internal/ssagen/ssa.go:6834 +0x117
cmd/compile/internal/ssagen.Compile(0xc001ec92c0, 0xc002712f90?)
	/usr/local/go/src/cmd/compile/internal/ssagen/pgen.go:193 +0x26f
cmd/compile/internal/gc.compileFunctions.func4.1(0x0?)
	/usr/local/go/src/cmd/compile/internal/gc/compile.go:153 +0x3a
cmd/compile/internal/gc.compileFunctions.func3.1()
	/usr/local/go/src/cmd/compile/internal/gc/compile.go:140 +0x4d
created by cmd/compile/internal/gc.compileFunctions.func3
	/usr/local/go/src/cmd/compile/internal/gc/compile.go:138 +0x78
FAIL	spideroak.com/proj/policy [build failed]

I don’t have any sort of repro yet. I’ve built this project easily hundreds of times with Go 1.19 and this is the first time it’s happened. Of course, it hasn’t happened in the dozens of test runs since. I know it’s not much to work with, but it’s probably better to report ICEs than not, right?

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 20 (9 by maintainers)

Commits related to this issue

Most upvoted comments

CL https://golang.org/cl/443158 seems to fix the race. I’m not really familiar with that code so not sure how correct it is, though.

Apparently it has something to do with _ parameters in generic(?) closures. In this code (from query.go)

// Count returns the number of selected records.
func (q *Query[T]) Count() (n int, rerr error) {
        defer q.finish(&rerr)
        q.checkNotNext()

        err := q.foreachKey(false, false, func(kb []byte, _ T) error {
                n++
                return nil
        })
        return n, err
}

// List returns all selected records.
func (q *Query[T]) List() (list []T, rerr error) {
        defer q.finish(&rerr)
        q.checkNotNext()

        var l []T
        err := q.foreachKey(false, true, func(_ []byte, v T) error {
                l = append(l, v)
                return nil
        })
        if err != nil {
                return nil, err
        }
        return l, nil
}

if I make the _ parameters in both closures named, it doesn’t seem to fail. Either one of them being _ seems to trigger the race.

Code is at https://www.ueber.net/who/mjl/tmp/bstore.gorace.tgz It is about 7k lines, so hardly a minimal reproducer… The test_*.go files were the tests. Seems like compiling them stresses the compiler more. With the compiler-with-race-detector a race is detected in just few runs for me.

# github.com/mjl-/bstore
==================
WARNING: DATA RACE
Read at 0x00c001eaa100 by goroutine 679:
  cmd/compile/internal/ir.(*Name).FrameOffset()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/ir/name.go:203 +0x1ff7
  cmd/compile/internal/liveness.ArgLiveness()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/liveness/arg.go:106 +0x2004
  cmd/compile/internal/ssagen.genssa()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/ssagen/ssa.go:6909 +0x2da
  cmd/compile/internal/ssagen.Compile()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/ssagen/pgen.go:197 +0x4c6
  cmd/compile/internal/gc.compileFunctions.func4.1()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:153 +0x53
  cmd/compile/internal/gc.compileFunctions.func3.1()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:140 +0x5b

Previous write at 0x00c001eaa100 by goroutine 683:
  cmd/compile/internal/ir.(*Name).SetFrameOffset()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/ir/name.go:204 +0x21b
  cmd/compile/internal/abi.(*ABIConfig).updateOffset()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/abi/abiutils.go:458 +0x1d2
  cmd/compile/internal/abi.(*ABIConfig).ABIAnalyze()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/abi/abiutils.go:441 +0x364
  cmd/compile/internal/ssagen.buildssa()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/ssagen/ssa.go:458 +0x29fc
  cmd/compile/internal/ssagen.Compile()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/ssagen/pgen.go:187 +0x5a
  cmd/compile/internal/gc.compileFunctions.func4.1()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:153 +0x53
  cmd/compile/internal/gc.compileFunctions.func3.1()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:140 +0x5b

Goroutine 679 (running) created at:
  cmd/compile/internal/gc.compileFunctions.func3()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:138 +0xd6
  cmd/compile/internal/gc.compileFunctions.func4()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:152 +0x63
  cmd/compile/internal/gc.compileFunctions.func4.1()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:154 +0xbb
  cmd/compile/internal/gc.compileFunctions.func3.1()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:140 +0x5b

Goroutine 683 (running) created at:
  cmd/compile/internal/gc.compileFunctions.func3()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:138 +0xd6
  cmd/compile/internal/gc.compileFunctions.func4()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:152 +0x63
  cmd/compile/internal/gc.compileFunctions.func4.1()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:154 +0xbb
  cmd/compile/internal/gc.compileFunctions.func3.1()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:140 +0x5b
==================
==================
WARNING: DATA RACE
Read at 0x00c001eaa0ec by goroutine 679:
  cmd/compile/internal/ir.(*Name).Addrtaken()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/ir/name.go:249 +0x44
  cmd/compile/internal/liveness.ArgLiveness.func1()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/liveness/arg.go:119 +0x18
  cmd/compile/internal/liveness.ArgLiveness()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/liveness/arg.go:123 +0x3c5
  cmd/compile/internal/ssagen.genssa()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/ssagen/ssa.go:6909 +0x2da
  cmd/compile/internal/ssagen.Compile()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/ssagen/pgen.go:197 +0x4c6
  cmd/compile/internal/gc.compileFunctions.func4.1()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:153 +0x53
  cmd/compile/internal/gc.compileFunctions.func3.1()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:140 +0x5b

Previous write at 0x00c001eaa0ec by goroutine 683:
  cmd/compile/internal/ir.(*bitset16).set()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/ir/bitset.go:35 +0x284
  cmd/compile/internal/ir.(*Name).SetIsOutputParamInRegisters()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/ir/name.go:261 +0x259
  cmd/compile/internal/abi.(*ABIConfig).updateOffset()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/abi/abiutils.go:459 +0x22a
  cmd/compile/internal/abi.(*ABIConfig).ABIAnalyze()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/abi/abiutils.go:441 +0x364
  cmd/compile/internal/ssagen.buildssa()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/ssagen/ssa.go:458 +0x29fc
  cmd/compile/internal/ssagen.Compile()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/ssagen/pgen.go:187 +0x5a
  cmd/compile/internal/gc.compileFunctions.func4.1()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:153 +0x53
  cmd/compile/internal/gc.compileFunctions.func3.1()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:140 +0x5b

Goroutine 679 (running) created at:
  cmd/compile/internal/gc.compileFunctions.func3()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:138 +0xd6
  cmd/compile/internal/gc.compileFunctions.func4()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:152 +0x63
  cmd/compile/internal/gc.compileFunctions.func4.1()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:154 +0xbb
  cmd/compile/internal/gc.compileFunctions.func3.1()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:140 +0x5b

Goroutine 683 (running) created at:
  cmd/compile/internal/gc.compileFunctions.func3()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:138 +0xd6
  cmd/compile/internal/gc.compileFunctions.func4()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:152 +0x63
  cmd/compile/internal/gc.compileFunctions.func4.1()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:154 +0xbb
  cmd/compile/internal/gc.compileFunctions.func3.1()
      /home/mjl/sdk/go1.19.2/src/cmd/compile/internal/gc/compile.go:140 +0x5b
==================
Found 2 data race(s)

I’ll upload the code in a moment.

Yeah, if I can reproduce this again I’ll certainly post more information.