Skip to content

cmd/compile: crash in type loop detection #44266

@fhs

Description

@fhs

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

$ go version
go version devel +33d72fd412 Mon Feb 15 01:54:22 2021 +0000 linux/amd64

Does this issue reproduce with the latest release?

No (tested with go1.15.8)

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

go env Output
$ go env
GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/fhs/.cache/go-build"
GOENV="/home/fhs/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/fhs/go/pkg/mod"
GOOS="linux"
GOPATH="/home/fhs/go"
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/home/big/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/home/big/go/pkg/tool/linux_amd64"
GOVCS=""
GOVERSION="devel +33d72fd412 Mon Feb 15 01:54:22 2021 +0000"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/dev/null"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build2015226142=/tmp/go-build -gno-record-gcc-switches"
GOROOT/bin/go version: go version devel +33d72fd412 Mon Feb 15 01:54:22 2021 +0000 linux/amd64
GOROOT/bin/go tool compile -V: compile version devel +33d72fd412 Mon Feb 15 01:54:22 2021 +0000
uname -sr: Linux 5.10.11-arch1-1
LSB Version:	1.4
Distributor ID:	Arch
Description:	Arch Linux
Release:	rolling
Codename:	n/a
/usr/lib/libc.so.6: GNU C Library (GNU libc) release release version 2.33.
gdb --version: GNU gdb (GDB) 10.1

What did you do?

Run this program: https://play.golang.org/p/JghmS05HSAj

What did you expect to see?

The compiler shouldn't crash

What did you see instead?

$ go run crash.go 
# command-line-arguments
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x30 pc=0xa42da5]

goroutine 1 [running]:
cmd/compile/internal/gc.findTypeLoop(0xc0000d8e40, 0xc0001088d8, 0xc00009c160)
	/home/big/go/src/cmd/compile/internal/gc/align.go:202 +0x105
cmd/compile/internal/gc.findTypeLoop(0xc0000d8d80, 0xc0001088d8, 0x1)
	/home/big/go/src/cmd/compile/internal/gc/align.go:223 +0x225
cmd/compile/internal/gc.findTypeLoop(0xc0000d8d20, 0xc0001088d8, 0xc0000980d8)
	/home/big/go/src/cmd/compile/internal/gc/align.go:202 +0x117
cmd/compile/internal/gc.findTypeLoop(0xc0000d91a0, 0xc0001088d8, 0x0)
	/home/big/go/src/cmd/compile/internal/gc/align.go:216 +0x2c5
cmd/compile/internal/gc.findTypeLoop(0xc0000d9140, 0xc0001088d8, 0x11)
	/home/big/go/src/cmd/compile/internal/gc/align.go:202 +0x117
cmd/compile/internal/gc.reportTypeLoop(0xc0000d9140)
	/home/big/go/src/cmd/compile/internal/gc/align.go:240 +0x76
cmd/compile/internal/gc.dowidth(0xc0000d9140)
	/home/big/go/src/cmd/compile/internal/gc/align.go:282 +0x1105
cmd/compile/internal/gc.widstruct(0xc0000d9140, 0xc0000d9140, 0x0, 0x1, 0x203000)
	/home/big/go/src/cmd/compile/internal/gc/align.go:114 +0xd3
cmd/compile/internal/gc.dowidth(0xc0000d9140)
	/home/big/go/src/cmd/compile/internal/gc/align.go:435 +0x4cf
cmd/compile/internal/gc.widstruct(0xc0000d91a0, 0xc0000d91a0, 0x0, 0x1, 0x8)
	/home/big/go/src/cmd/compile/internal/gc/align.go:114 +0xd3
cmd/compile/internal/gc.dowidth(0xc0000d91a0)
	/home/big/go/src/cmd/compile/internal/gc/align.go:435 +0x4cf
cmd/compile/internal/gc.resumecheckwidth()
	/home/big/go/src/cmd/compile/internal/gc/align.go:526 +0x4c
cmd/compile/internal/gc.typecheckdef(0xc0000c9b30)
	/home/big/go/src/cmd/compile/internal/gc/typecheck.go:3695 +0x8e5
cmd/compile/internal/gc.typecheck1(0xc0000c9b30, 0x4, 0x0)
	/home/big/go/src/cmd/compile/internal/gc/typecheck.go:343 +0xbace
cmd/compile/internal/gc.typecheck(0xc0000c9b30, 0x4, 0x0)
	/home/big/go/src/cmd/compile/internal/gc/typecheck.go:299 +0x785
cmd/compile/internal/gc.typecheck1(0xc0000ce300, 0x1, 0x0)
	/home/big/go/src/cmd/compile/internal/gc/typecheck.go:2077 +0x4e65
cmd/compile/internal/gc.typecheck(0xc0000ce300, 0x1, 0x0)
	/home/big/go/src/cmd/compile/internal/gc/typecheck.go:299 +0x785
cmd/compile/internal/gc.Main(0xcc7d50)
	/home/big/go/src/cmd/compile/internal/gc/main.go:603 +0x2aa5
main.main()
	/home/big/go/src/cmd/compile/main.go:52 +0xb1

Metadata

Metadata

Assignees

No one assigned

    Labels

    FrozenDueToAgeNeedsFixThe path to resolution is known, but the work has not been done.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions