-
Notifications
You must be signed in to change notification settings - Fork 18.3k
Closed
Labels
BugReportIssues describing a possible bug in the Go implementation.Issues describing a possible bug in the Go implementation.compiler/runtimeIssues related to the Go compiler and/or runtime.Issues related to the Go compiler and/or runtime.
Description
Go version
go version go1.26-devel_77f911e31c Fri Aug 15 18:10:28 2025 -0700 linux/amd64
Output of go env
in your module/workspace:
AR='ar'
CC='gcc'
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_ENABLED='1'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
CXX='g++'
GCCGO='gccgo'
GO111MODULE=''
GOAMD64='v1'
GOARCH='amd64'
GOAUTH='netrc'
GOBIN=''
GOCACHE='/usr/local/google/home/stapelberg/.cache/go-build'
GOCACHEPROG=''
GODEBUG=''
GOENV='/usr/local/google/home/stapelberg/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFIPS140='off'
GOFLAGS=''
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build3818096045=/tmp/go-build -gno-record-gcc-switches'
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMOD='/usr/local/google/home/stapelberg/src/arm-unpredictable/go.mod'
GOMODCACHE='/usr/local/google/home/stapelberg/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/usr/local/google/home/stapelberg/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/usr/local/google/home/stapelberg/upstream-go'
GOSUMDB='sum.golang.org'
GOTELEMETRY='local'
GOTELEMETRYDIR='/usr/local/google/home/stapelberg/.config/go/telemetry'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/usr/local/google/home/stapelberg/upstream-go/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.26-devel_77f911e31c Fri Aug 15 18:10:28 2025 -0700'
GOWORK=''
PKG_CONFIG='pkg-config'
What did you do?
go mod init repro
- Write the following repro.go file:
package reorder
type Element struct {
A string
B string
C string
D string
E string
Text []string
List []string
Child Elements
F string
G bool
H bool
I string
}
type Elements []Element
func DoesNotCompile(ve Elements) Elements {
aa := Elements{}
bb := Elements{}
cc := Elements{}
dd := Elements{}
ee := Elements{}
ff := Elements{}
gg := Elements{}
hh := Elements{}
ii := Elements{}
if len(ve) != 1 {
return ve
}
for _, e := range ve[0].Child {
if len(e.Text) == 1 && (e.Text[0] == "xx") {
ee = append(ee, e)
} else if len(e.Text) == 1 && e.Text[0] == "yy" {
for _, c := range e.Child {
if len(c.Text) == 1 && c.Text[0] == "zz" {
ii = append(ii, c)
} else {
hh = append(hh, c)
}
}
ii = append(ii, hh...)
e.Child = ii
gg = append(gg, e)
} else if len(e.Text) == 1 && e.Text[0] == "tt" {
for _, entry := range e.Child {
for _, c := range entry.Child {
if len(c.Text) == 1 && c.Text[0] == "ee" {
cc = append(cc, c)
} else {
dd = append(dd, c)
}
}
cc = append(cc, dd...)
entry.Child = cc
bb = append(bb, entry)
cc, dd = Elements{}, Elements{}
}
e.Child = bb
aa = append(aa, e)
} else {
ff = append(ff, e)
}
}
return ve
}
- Compile this package using:
GOARCH=arm64 go build
What did you see happen?
# repro
./repro.go:68:2: constrained unpredictable behavior: 01460 (/usr/local/google/home/stapelberg/src/arm-unpredictable/repro.go:49) LDP.P 16(R24), (R24, R25)
./repro.go:68:2: constrained unpredictable behavior: 01468 (/usr/local/google/home/stapelberg/src/arm-unpredictable/repro.go:49) LDP.P 16(R24), (R24, R25)
./repro.go:68:2: constrained unpredictable behavior: 01476 (/usr/local/google/home/stapelberg/src/arm-unpredictable/repro.go:49) LDP.P 16(R24), (R24, R25)
./repro.go:68:2: constrained unpredictable behavior: 01484 (/usr/local/google/home/stapelberg/src/arm-unpredictable/repro.go:49) LDP.P 16(R24), (R24, R25)
./repro.go:68:2: constrained unpredictable behavior: 03220 (/usr/local/google/home/stapelberg/src/arm-unpredictable/repro.go:38) LDP.P 16(R24), (R24, R25)
./repro.go:68:2: constrained unpredictable behavior: 03228 (/usr/local/google/home/stapelberg/src/arm-unpredictable/repro.go:38) LDP.P 16(R24), (R24, R25)
./repro.go:68:2: constrained unpredictable behavior: 03236 (/usr/local/google/home/stapelberg/src/arm-unpredictable/repro.go:38) LDP.P 16(R24), (R24, R25)
./repro.go:68:2: constrained unpredictable behavior: 03244 (/usr/local/google/home/stapelberg/src/arm-unpredictable/repro.go:38) LDP.P 16(R24), (R24, R25)
What did you expect to see?
Commit bca3e98 is the last working commit.
Commit 15d6dbc (“cmd/compile: use generated loops instead of DUFFCOPY on arm64”) is the first broken commit.
Metadata
Metadata
Assignees
Labels
BugReportIssues describing a possible bug in the Go implementation.Issues describing a possible bug in the Go implementation.compiler/runtimeIssues related to the Go compiler and/or runtime.Issues related to the Go compiler and/or runtime.