Go: cmd/compile: "offset too large" error

Created on 28 Aug 2017  Â·  19Comments  Â·  Source: golang/go

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

go version go1.9 windows/amd64

Does this issue reproduce with the latest release?

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

go env
set GOARCH=amd64
set GOBIN=
set GOEXE=.exe
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=d:\dev\go\meijing\;d:\dev\tpt_vendor;d:\dev\Godeps_workspace
set GORACE=
set GOROOT=d:\tools\go_amd64
set GOTOOLDIR=d:\tools\go_amd64\pkg\tool\windows_amd64
set GCCGO=gccgo
set CC=gcc
set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\xxxx\AppData\Local\Temp\go-build851261075=/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?

I compile my app, it is ok on go1.8 or go1.7
code is:

default

What did you expect to see?

it is compile ok.

What did you see instead?

cn/com/hengwei/poller

.\alert_action.go:448:2: offset too large in 02217 (d:\dev\meijingsrc\cn\com\hengwei\poller\alert_action.go:428) MOVQ -17179868768(BX)(AX8),BX
.\alert_action.go:448:2: offset too large in 03783 (d:\dev\meijingsrc\cn\com\hengwei\poller\alert_action.go:430) MOVQ -17179868768(DX)(CX
8),DX
FAIL cn/com/hengwei/poller [build failed]

CherryPickApproved FrozenDueToAge

Most helpful comment

Please don't send me anything. I have reported on compiler bugs before. You should be able to use process of elimination to eventually trim the problem down to a snippet that is safe to share. For example, #20333.

All 19 comments

Hi. We're going to need something more than a screenshot to help debug this. At least paste a minimal reproduction of the problem.

\cc @randall77 @josharian

@dsnet this code is private, if you can promise not to spread it, nor use it elsewhere, and delete it after finding out the problem, I can send this code to your mail.

Please don't send me anything. I have reported on compiler bugs before. You should be able to use process of elimination to eventually trim the problem down to a snippet that is safe to share. For example, #20333.

````go
package abc

import (
"math"
)

const current_status_internal_start = math.MaxInt32 - 50

func gen_message(ss []*string, current int) string {
s := ss[current-current_status_internal_start]
if nil != s {
return ""
}

switch current {
case 0:
    return "a"
default:
    return "b"
}

}

````
main.zip

````
D:\developing\go\meijingsrc\abc>go build

abc

.\main.go:15:2: offset too large in 00039 (d:\developing\go\meijingsrc\abc\main.go:10) MOVQ -17179868776(CX)(AX*8), CX
````
it is ok on the linux.

it is ok on the linux.

It's not, on my machine.

$ go build 
# github.com/opennota/a
./main.go:15:2: offset too large in 00039 (/home/opennota/gocode/src/github.com/opennota/a/main.go:10)       MOVQ    -17179868776(CX)(AX*8), CX

$ go version
go version go1.9 linux/amd64

$ go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/opennota/gocode"
GORACE=""
GOROOT="/home/opennota/go"
GOTOOLDIR="/home/opennota/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build906297495=/tmp/go-build -gno-record-gcc-switches"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"

@opennota yes, I made a mistake, it is fail also on the linux.

@runner-mei, thank you for producing a minimal repro.

Change https://golang.org/cl/59630 mentions this issue: cmd/compile: avoid generating large offsets

Reopening for cherry pick for 1.9.1.

CL 59630 OK for Go 1.9.2.
CL 70981 OK for Go 1.9.2. (resolved merge conflicts in cherry-pick)

Change https://golang.org/cl/70981 mentions this issue: [release-branch.go1.9] cmd/compile: avoid generating large offsets

go1.9.2 has been packaged and includes:

The release is posted at golang.org/dl.

— golang.org/x/build/cmd/releasebot, Oct 26 21:09:10 UTC

This bug is still exists in the go 1.9.2 on windows/386
````
C:\tpt_programssrc> go version
go1.9.2 windows/386

C:\tpt_programssrc>go build

_/C_/tpt_programs/src

.\main.go:15:2: offset too large in 00040 (C:\tpt_programssrc\main.go:10) MOVL -8589934388(CX)(AX*4), CX
````

Still happens on tip too, with GOARCH=386. Reopening.

Change https://golang.org/cl/82675 mentions this issue: cmd/compile: fix large load/store offsets on 386

Reopening for go 1.9.3.

CL 82675 OK for Go 1.9.3.

Change https://golang.org/cl/88324 mentions this issue: [release-branch.go1.9] cmd/compile: fix large load/store offsets on 386

go1.9.3 has been packaged and includes:

  • CL 82675 cmd/compile: fix large load/store offsets on 386

The release is posted at golang.org/dl.

— golang.org/x/build/cmd/releasebot, Jan 22 21:02:53 UTC

Was this page helpful?
0 / 5 - 0 ratings