Skip to content

cmd/compile: typecheck panic, interface conversion: types.Object is nil, not *ir.Name  #50552

@zhuah

Description

@zhuah

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

$ go version
go version devel go1.18-6df0957060 Mon Jan 10 04:23:42 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?

After updated to latest tip commit, my package failed to compile:
It seems due to this commit 931e84a

I have made a reproduce demo based on #50121 and 5b9207f

-- go.mod --
module test

-- pkg/pkg.go --
package pkg

type Builder[T any] struct{}

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

func (r Builder[T]) New2() T {
	return r.New()
}

func BuildInt() int {
	return Builder[int]{}.New()
}

-- main.go --
package main

import (
	"fmt"

	"test/pkg"
)

func BuildInt() int {
	return pkg.BuildInt()
}

func main() {
	fmt.Println(BuildInt())
}

the difference with #50121 is the func (r Builder[T]) New2() T method.
and the error logs is here:

# test
panic: interface conversion: types.Object is nil, not *ir.Name

goroutine 1 [running]:
cmd/compile/internal/typecheck.(*crawler).markInlBody.func1({0x1a8fee0, 0xc0000b4300?})
	/usr/local/Cellar/gotip/src/cmd/compile/internal/typecheck/crawler.go:257 +0x60e
cmd/compile/internal/ir.Visit.func1({0x1a8fee0, 0xc0000b4300})
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/visit.go:105 +0x30
cmd/compile/internal/ir.doNodes(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/node_gen.go:1512
cmd/compile/internal/ir.(*CallExpr).doChildren(0xc0000a0a20, 0xc00011bec0)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/node_gen.go:263 +0x132
cmd/compile/internal/ir.DoChildren(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/visit.go:94
cmd/compile/internal/ir.Visit.func1({0x1a8faf8, 0xc0000a0a20})
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/visit.go:106 +0x57
cmd/compile/internal/ir.doNodes(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/node_gen.go:1512
cmd/compile/internal/ir.(*ReturnStmt).doChildren(0x1a91650?, 0xc00011bec0)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/node_gen.go:1049 +0x8c
cmd/compile/internal/ir.DoChildren(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/visit.go:94
cmd/compile/internal/ir.Visit.func1({0x1a91650, 0xc000092f00})
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/visit.go:106 +0x57
cmd/compile/internal/ir.Visit({0x1a91650, 0xc000092f00}, 0xc00011bea8)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/visit.go:108 +0xb8
cmd/compile/internal/ir.VisitList(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/visit.go:114
cmd/compile/internal/typecheck.(*crawler).markInlBody(0xc00011be60, 0x1886720?)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/typecheck/crawler.go:327 +0x2f4
cmd/compile/internal/typecheck.(*crawler).markInlBody.func1({0x1a910d8, 0xc000455790?})
	/usr/local/Cellar/gotip/src/cmd/compile/internal/typecheck/crawler.go:305 +0x225
cmd/compile/internal/ir.Visit.func1({0x1a910d8, 0xc000455790})
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/visit.go:105 +0x30
cmd/compile/internal/ir.(*CallExpr).doChildren(0xc000390ea0, 0xc00011be90)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/node_gen.go:260 +0x56
cmd/compile/internal/ir.DoChildren(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/visit.go:94
cmd/compile/internal/ir.Visit.func1({0x1a8faf8, 0xc000390ea0})
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/visit.go:106 +0x57
cmd/compile/internal/ir.doNodes(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/node_gen.go:1512
cmd/compile/internal/ir.(*ReturnStmt).doChildren(0x1a91650?, 0xc00011be90)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/node_gen.go:1049 +0x8c
cmd/compile/internal/ir.DoChildren(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/visit.go:94
cmd/compile/internal/ir.Visit.func1({0x1a91650, 0xc0004764b0})
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/visit.go:106 +0x57
cmd/compile/internal/ir.Visit({0x1a91650, 0xc0004764b0}, 0xc00011be78)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/visit.go:108 +0xb8
cmd/compile/internal/ir.VisitList(...)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/ir/visit.go:114
cmd/compile/internal/typecheck.(*crawler).markInlBody(0xc00011be60, 0x18c5f20?)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/typecheck/crawler.go:327 +0x2f4
cmd/compile/internal/typecheck.(*crawler).markObject(0x10cd89e?, 0xc000455450)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/typecheck/crawler.go:50 +0x2f
cmd/compile/internal/typecheck.crawlExports({0xc00008d7a0, 0x2, 0x10d1d2c?})
	/usr/local/Cellar/gotip/src/cmd/compile/internal/typecheck/crawler.go:37 +0xbf
cmd/compile/internal/typecheck.WriteExports({0x1a89fa0, 0xc0005cb740}, 0x1)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/typecheck/iexport.go:305 +0x65
cmd/compile/internal/noder.WriteExports(0xc0005d4590)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/noder/export.go:40 +0x7a
cmd/compile/internal/gc.dumpCompilerObj(0xc0005d4590?)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/gc/obj.go:107 +0x28
cmd/compile/internal/gc.dumpobj1({0x7ffeefbff239, 0x50}, 0x3)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/gc/obj.go:63 +0x17b
cmd/compile/internal/gc.dumpobj()
	/usr/local/Cellar/gotip/src/cmd/compile/internal/gc/obj.go:44 +0x36
cmd/compile/internal/gc.Main(0x1948e30)
	/usr/local/Cellar/gotip/src/cmd/compile/internal/gc/main.go:330 +0x11bc
main.main()
	/usr/local/Cellar/gotip/src/cmd/compile/main.go:55 +0xdd

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