Skip to content

cmd/compile: ice for out of range for uint #79252

@lmaltsis

Description

@lmaltsis

Go version

go version go1.27-devel_8594bf4621

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='/research/compilers/gccgo'
GO111MODULE=''
GOAMD64='v1'
GOARCH='amd64'
GOAUTH='netrc'
GOBIN=''
GOCACHE='/home/user/.cache/go-build'
GOCACHEPROG=''
GODEBUG=''
GOENV='/home/user/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFIPS140='off'
GOFLAGS=''
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build691699402=/tmp/go-build -gno-record-gcc-switches'
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMOD='/dev/null'
GOMODCACHE='/home/user/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/home/user/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/home/user/software/go/slot-a/src'
GOSUMDB='sum.golang.org'
GOTELEMETRY='local'
GOTELEMETRYDIR='/home/user/.config/go/telemetry'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/home/user/software/go/slot-a/src/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.27-devel_8594bf4621 Fri May 1 17:19:05 2026 -0700'
GOWORK=''
PKG_CONFIG='pkg-config'

What did you do?

https://go.dev/play/p/kb2Kb0El9PP

$ cat /tmp/bug.go
package main

import "fmt"

func main() {
        v1 := 0
        fmt.Println(0 >> ((2 ^ 0xffffffffffffffff<<2) >> v1))
}

$ go build /tmp/bug.go

What did you see happen?

# command-line-arguments
/tmp/bug.go:7:13: internal compiler error: 73786976294838206462 out of range for uint

goroutine 407 [running]:
runtime/debug.Stack()
        /home/user/software/go/slot-a/src/src/runtime/debug/stack.go:26 +0x5e
cmd/compile/internal/base.FatalfAt({0x19640a0?, 0x0?}, {0xfbb277, 0x16}, {0x289201a288f8, 0x2, 0x2})
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/base/print.go:232 +0x18b
cmd/compile/internal/base.Fatalf(...)
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/base/print.go:197
cmd/compile/internal/ir.IntVal(...)
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ir/val.go:33
cmd/compile/internal/ssagen.(*state).exprCheckPtr(0x289201a02000, {0x19678f0, 0x2892017ef900}, 0x1)
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:3101 +0x6a3d
cmd/compile/internal/ssagen.(*state).expr(...)
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:3031
cmd/compile/internal/ssagen.(*state).exprCheckPtr(0x289201a02000, {0x1966888, 0x28920188a360}, 0x1)
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:3399 +0x404b
cmd/compile/internal/ssagen.(*state).expr(...)
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:3031
cmd/compile/internal/ssagen.(*state).exprCheckPtr(0x289201a02000, {0x1966888, 0x28920188a3c0}, 0x1)
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:3400 +0x4075
cmd/compile/internal/ssagen.(*state).expr(...)
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:3031
cmd/compile/internal/ssagen.(*state).exprCheckPtr(0x289201a02000, {0x1965c08, 0x289201962600}, 0x1)
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:3230 +0x1870
cmd/compile/internal/ssagen.(*state).expr(...)
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:3031
cmd/compile/internal/ssagen.(*state).putArg(0x289201a02000, {0x1965c08, 0x289201962600}, 0x2892014b6720)
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:5750 +0x4b
cmd/compile/internal/ssagen.(*state).call(0x289201a02000, 0x289201964140, 0x0, 0x0, {0x0, 0x0})
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:5112 +0x153e
cmd/compile/internal/ssagen.(*state).callResult(...)
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:4957
cmd/compile/internal/ssagen.(*state).exprCheckPtr(0x289201a02000, {0x1965e60, 0x289201964140}, 0x1)
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:3709 +0x174d
cmd/compile/internal/ssagen.(*state).expr(...)
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:3031
cmd/compile/internal/ssagen.(*state).stmt(0x289201a02000, {0x19672b0, 0x28920195e4b0})
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:1919 +0x69ab
cmd/compile/internal/ssagen.(*state).stmtList(...)
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:1654
cmd/compile/internal/ssagen.(*state).stmt(0x289201a02000, {0x19672b0, 0x28920195e460})
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:1679 +0x2a5
cmd/compile/internal/ssagen.(*state).stmtList(...)
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:1654
cmd/compile/internal/ssagen.(*state).stmt(0x289201a02000, {0x1966e00, 0x289201950e80})
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:1684 +0x6465
cmd/compile/internal/ssagen.(*state).stmtList(...)
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:1654
cmd/compile/internal/ssagen.(*state).stmt(0x289201a02000, {0x1966e00, 0x289201951000})
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:1684 +0x6465
cmd/compile/internal/ssagen.(*state).stmtList(...)
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:1654
cmd/compile/internal/ssagen.buildssa(0x28920177b040, 0xbb, 0x0)
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/ssa.go:576 +0x2bb4
cmd/compile/internal/ssagen.Compile(0x28920177b040, 0xbb, 0x0?)
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/ssagen/pgen.go:304 +0x88
cmd/compile/internal/gc.compileFunctions.func2()
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/gc/compile.go:177 +0x85
created by cmd/compile/internal/gc.compileFunctions in goroutine 1
        /home/user/software/go/slot-a/src/src/cmd/compile/internal/gc/compile.go:163 +0xd9

What did you expect to see?

Either frontend error like this triggers

package main

import "fmt"

func main() {
	fmt.Println(0 >> ((2 ^ 0xffffffffffffffff<<2) >> 0))
}
./prog.go:6:19: ((2 ^ 0xffffffffffffffff << 2) >> 0) (untyped int constant 73786976294838206462) overflows uint

or successful compilation with overflow at runtime

Metadata

Metadata

Assignees

Labels

BugReportIssues describing a possible bug in the Go implementation.compiler/runtimeIssues related to the Go compiler and/or runtime.

Type

No type
No fields configured for issues without a type.

Projects

Status
Todo

Relationships

None yet

Development

No branches or pull requests

Issue actions