-
Notifications
You must be signed in to change notification settings - Fork 18k
cmd/compile: "offset too large" error #21655
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
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. |
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"
}
}
it is ok on the linux. |
It's not, on my machine.
|
@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: |
Reopening for cherry pick for 1.9.1. |
|
Change https://golang.org/cl/70981 mentions this issue: |
The assembler barfs on large offsets. Make sure that all the instructions that need to have their offsets in an int32 1) check on any rule that computes offsets for such instructions 2) change their aux fields so the check builder checks it. The assembler also silently misassembled offsets between 1<<31 and 1<<32. Add a check in the assembler to barf on those as well. Fixes #21655 Change-Id: Iebf24bf10f9f37b3ea819ceb7d588251c0f46d7d Reviewed-on: https://go-review.googlesource.com/59630 Run-TryBot: Keith Randall <[email protected]> TryBot-Result: Gobot Gobot <[email protected]> Reviewed-by: David Chase <[email protected]> Reviewed-on: https://go-review.googlesource.com/70981 Run-TryBot: Russ Cox <[email protected]> Reviewed-by: Keith Randall <[email protected]>
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
|
Still happens on tip too, with |
Change https://golang.org/cl/82675 mentions this issue: |
Reopening for go 1.9.3. |
CL 82675 OK for Go 1.9.3. |
Change https://golang.org/cl/88324 mentions this issue: |
Pointer arithemetic is done mod 2^32 on 386, so we can just drop the high bits of any large constant offsets. The bounds check will make sure wraparounds are never observed. Fixes #21655 Change-Id: I68ae5bbea9f02c73968ea2b21ca017e5ecb89223 Reviewed-on: https://go-review.googlesource.com/82675 Run-TryBot: Keith Randall <[email protected]> TryBot-Result: Gobot Gobot <[email protected]> Reviewed-by: David Chase <[email protected]> Reviewed-on: https://go-review.googlesource.com/88324 Run-TryBot: Andrew Bonventre <[email protected]> Reviewed-by: Keith Randall <[email protected]>
go1.9.3 has been packaged and includes:
The release is posted at golang.org/dl. — golang.org/x/build/cmd/releasebot, Jan 22 21:02:53 UTC |
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:
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\meijing\src\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\meijing\src\cn\com\hengwei\poller\alert_action.go:430) MOVQ -17179868768(DX)(CX8),DX
FAIL cn/com/hengwei/poller [build failed]
The text was updated successfully, but these errors were encountered: