Skip to content

cmd/compile: typecheck panic, internal compiler error: panic: runtime error: index out of range [0] with length 0 #50598

Closed
@zhuah

Description

@zhuah

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

$ go version
go version devel go1.18-24239120bf Thu Jan 13 00:53:53 2022 +0000 darwin/amd64

Does this issue reproduce with the latest release?

yes

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

go env Output
$ go env

What did you do?

My another program panicked with the latest commit,
i have uploaded the reproduce demo to https://go.dev/play/p/-NG-TpesDJO?v=gotip,

-- go.mod --
module test
-- p0/p.go --
package p0

type Builder[T any] struct{}

func (r Builder[T]) New1() T {
	var v T
	return v
}

func (r Builder[T]) New2() T {
	var v T
	return v
}

type IntBuilder struct{}

func (b IntBuilder) New() int {
	return Builder[int]{}.New2()
}
-- p1/p.go --
package p1

import "test/p0"

func New() int {
	return p0.IntBuilder{}.New()
}
-- p2/p.go --
package p2

import "test/p0"

func New() int {
	return p0.Builder[int]{}.New1()
}
-- main.go --
package main

import (
	"test/p1"
	"test/p2"
)

func New() int {
	return p1.New() + p2.New()
}

func main() {
	println(New())
}

and the error logs is here:

# test
./main.go:9:26: internal compiler error: panic: runtime error: index out of range [0] with length 0

goroutine 1 [running]:
runtime/debug.Stack()
	/usr/local/Cellar/gotip/src/runtime/debug/stack.go:24 +0x65
cmd/compile/internal/base.FatalfAt({0x640798?, 0xc0?}, {0x191a094, 0x9}, {0xc0006407a0, 0x1, 0x1})
	/usr/local/Cellar/gotip/src/cmd/compile/internal/base/print.go:227 +0x1ca
cmd/compile/internal/base.Fatalf(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/base/print.go:196
cmd/compile/internal/gc.handlePanic()
	/usr/local/Cellar/gotip/src/cmd/compile/internal/gc/main.go:49 +0x85
panic({0x18e1a60, 0xc000632108})
	/usr/local/Cellar/gotip/src/runtime/panic.go:838 +0x207
cmd/compile/internal/typecheck.(*importReader).readFuncDcls.func1(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/typecheck/iimport.go:1174
cmd/compile/internal/typecheck.(*importReader).readFuncDcls(0x4?, 0xc000630580)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/typecheck/iimport.go:1185 +0x23c
cmd/compile/internal/typecheck.(*importReader).funcBody(0xc000615c20, 0xc000630580)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/typecheck/iimport.go:1125 +0x65
cmd/compile/internal/typecheck.(*importReader).doInline(0x1?, 0xc000630580)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/typecheck/iimport.go:1092 +0x99
cmd/compile/internal/typecheck.ImportBody(0xc000630580)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/typecheck/iimport.go:80 +0x206
cmd/compile/internal/typecheck.ImportedBody(0xc000630580)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/typecheck/func.go:174 +0xad
cmd/compile/internal/inline.oldInline(0xc000615b00, 0xc000630580, 0x4)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/inline/inl.go:801 +0x53
cmd/compile/internal/inline.mkinlcall(0xc000615b00, 0xc000630580, 0x420190?, 0xc00061c000, 0x203000?)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/inline/inl.go:753 +0xcc5
cmd/compile/internal/inline.inlnode({0x1a90ab8, 0xc000615b00}, 0x641160?, 0x58?, 0xc000641228?)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/inline/inl.go:589 +0x535
cmd/compile/internal/inline.InlineCalls.func1({0x1a90ab8?, 0xc000615b00?})
	/usr/local/Cellar/gotip/src/cmd/compile/internal/inline/inl.go:508 +0x31
cmd/compile/internal/ir.editNodes(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/node_gen.go:1521
cmd/compile/internal/ir.(*AssignListStmt).editChildren(0xc0006126c0, 0xc00061e000)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/node_gen.go:108 +0xc2
cmd/compile/internal/ir.EditChildren(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/visit.go:185
cmd/compile/internal/inline.inlnode({0x1a90540, 0xc0006126c0}, 0x64c0d0?, 0x203000?, 0xc000646fc0?)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/inline/inl.go:568 +0x39a
cmd/compile/internal/inline.InlineCalls.func1({0x1a90540?, 0xc0006126c0?})
	/usr/local/Cellar/gotip/src/cmd/compile/internal/inline/inl.go:508 +0x31
cmd/compile/internal/ir.editNodes(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/node_gen.go:1521
cmd/compile/internal/ir.(*BlockStmt).editChildren(0x1a90928?, 0xc00061e000)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/node_gen.go:229 +0xa2
cmd/compile/internal/ir.EditChildren(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/visit.go:185
cmd/compile/internal/inline.inlnode({0x1a90928, 0xc00061a740}, 0x6413f8?, 0x58?, 0xc0006414c0?)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/inline/inl.go:568 +0x39a
cmd/compile/internal/inline.InlineCalls.func1({0x1a90928?, 0xc00061a740?})
	/usr/local/Cellar/gotip/src/cmd/compile/internal/inline/inl.go:508 +0x31
cmd/compile/internal/ir.editNodes(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/node_gen.go:1521
cmd/compile/internal/ir.(*InlinedCallExpr).editChildren(0xc000646fc0, 0xc00061e000)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/node_gen.go:724 +0x182
cmd/compile/internal/ir.EditChildren(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/visit.go:185
cmd/compile/internal/inline.mkinlcall(0xc000178bd0, 0xc0004111e0, 0x4205a0?, 0xc00061c000, 0x0?)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/inline/inl.go:762 +0xcda
cmd/compile/internal/inline.inlnode({0x1a90ab8, 0xc000178bd0}, 0x6413f8?, 0x58?, 0xc000641808?)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/inline/inl.go:589 +0x535
cmd/compile/internal/inline.InlineCalls.func1({0x1a90ab8?, 0xc000178bd0?})
	/usr/local/Cellar/gotip/src/cmd/compile/internal/inline/inl.go:508 +0x31
cmd/compile/internal/ir.(*BinaryExpr).editChildren(0xc000424240, 0xc00061e000)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/node_gen.go:207 +0xc8
cmd/compile/internal/ir.EditChildren(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/visit.go:185
cmd/compile/internal/inline.inlnode({0x1a90860, 0xc000424240}, 0x30?, 0x255ffff?, 0xc000413930?)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/inline/inl.go:568 +0x39a
cmd/compile/internal/inline.InlineCalls.func1({0x1a90860?, 0xc000424240?})
	/usr/local/Cellar/gotip/src/cmd/compile/internal/inline/inl.go:508 +0x31
cmd/compile/internal/ir.editNodes(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/node_gen.go:1521
cmd/compile/internal/ir.(*ReturnStmt).editChildren(0x1a92610?, 0xc00061e000)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/node_gen.go:1056 +0xa2
cmd/compile/internal/ir.EditChildren(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/visit.go:185
cmd/compile/internal/inline.inlnode({0x1a92610, 0xc000420910}, 0x9882e40?, 0x20?, 0x2200f18?)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/inline/inl.go:568 +0x39a
cmd/compile/internal/inline.InlineCalls.func1({0x1a92610?, 0xc000420910?})
	/usr/local/Cellar/gotip/src/cmd/compile/internal/inline/inl.go:508 +0x31
cmd/compile/internal/ir.editNodes(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/node_gen.go:1521
cmd/compile/internal/ir.(*Func).editChildren(0xc000413aa8?, 0xc00061e000?)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/func.go:153 +0x74
cmd/compile/internal/ir.EditChildren(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/visit.go:185
cmd/compile/internal/inline.InlineCalls(0xc000410dc0)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/inline/inl.go:510 +0xf2
cmd/compile/internal/inline.InlinePackage.func1({0xc00000e550, 0x1, 0xc000410dc0?}, 0x0)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/inline/inl.go:71 +0x6e
cmd/compile/internal/ir.(*bottomUpVisitor).visit(0xc0003dbe00, 0xc000410dc0)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/scc.go:127 +0x2f0
cmd/compile/internal/ir.VisitFuncsBottomUp({0xc0004262e0, 0x2, 0xb?}, 0x1949c78)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/scc.go:60 +0x105
cmd/compile/internal/inline.InlinePackage()
	/usr/local/Cellar/gotip/src/cmd/compile/internal/inline/inl.go:58 +0x33
cmd/compile/internal/gc.Main(0x1949b30)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/gc/main.go:247 +0xd34
main.main()
	/usr/local/Cellar/gotip/src/cmd/compile/main.go:55 +0xdd

What did you expect to see?

What did you see instead?

Metadata

Metadata

Assignees

No one assigned

    Labels

    FrozenDueToAgeNeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions