Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

x/tools/go/ssa: panic in emitConv in InstantiateGenerics mode #71899

Open
mateusz834 opened this issue Feb 22, 2025 · 1 comment
Open

x/tools/go/ssa: panic in emitConv in InstantiateGenerics mode #71899

mateusz834 opened this issue Feb 22, 2025 · 1 comment
Labels
BugReport Issues describing a possible bug in the Go implementation. Tools This label describes issues relating to any tools in the x/tools repository.
Milestone

Comments

@mateusz834
Copy link
Member

const hello = `package aa

import "fmt"

func foo[A fmt.Stringer]() int {
	a := make([]A, 128)
	a[1].String()
	return len(a)
}

func bar() {
	foo[fmt.Stringer]()
}
`

func main() {
	// Parse the source files.
	fset := token.NewFileSet()
	f, err := parser.ParseFile(fset, "hello.go", hello, parser.ParseComments|parser.SkipObjectResolution)
	if err != nil {
		fmt.Print(err) // parse error
		return
	}
	files := []*ast.File{f}
	// Create the type-checker's package.
	pkg := types.NewPackage("hello", "")

	// Type-check the package, load dependencies.
	// Create and build the SSA program.
	_, _, err = ssautil.BuildPackage(
		&types.Config{Importer: importer.Default()}, fset, pkg, files, ssa.SanityCheckFunctions|ssa.GlobalDebug|ssa.LogSource|ssa.InstantiateGenerics)
	if err != nil {
		fmt.Print(err) // type error in some package
		return
	}
}
$ go run .
build package hello
build hello.init @ -
build hello.init @ - end
build hello.foo @ hello.go:5:6
build hello.foo @ hello.go:5:6 end
build hello.bar @ hello.go:11:6
build hello.bar @ hello.go:11:6 end
build hello.foo[fmt.Stringer] @ hello.go:5:6
build hello.foo[fmt.Stringer] @ hello.go:5:6 end
build package hello end
panic: in hello.foo[fmt.Stringer]: cannot convert term slice t0[:128:int] ([]fmt.Stringer [within []fmt.Stringer]) to type []fmt.Stringer [within []fmt.Stringer]

goroutine 1 [running]:
golang.org/x/tools/go/ssa.emitConv.func1({0x726cd8, 0xc000244d60}, {0x726cd8, 0xc000244d40})
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/emit.go:311 +0x339
golang.org/x/tools/go/ssa.emitConv.func2.1({0x726cd8?, 0xc000244d40?})
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/emit.go:320 +0x4c
golang.org/x/tools/go/ssa.underIs.func1({0xc0001ef448?, 0x2?}, {0x726cd8?, 0xc000244d40?})
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/typeset.go:100 +0x34
golang.org/x/tools/go/ssa.typeset({0x726cd8?, 0xc000244d40?}, 0xc0001ef4a0)
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/typeset.go:45 +0x103
golang.org/x/tools/go/ssa.underIs({0x726cd8?, 0xc000244d40?}, 0xc0001ef530?)
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/typeset.go:99 +0x45
golang.org/x/tools/go/ssa.emitConv.func2({0x726cd8?, 0xc000244d60?})
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/emit.go:318 +0x58
golang.org/x/tools/go/ssa.underIs.func1({0xc0001b3f80?, 0x10?}, {0x726cd8?, 0xc000244d60?})
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/typeset.go:100 +0x34
golang.org/x/tools/go/ssa.typeset({0x726cd8?, 0xc000244d60?}, 0xc0001ef5c0)
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/typeset.go:45 +0x103
golang.org/x/tools/go/ssa.underIs({0x726cd8?, 0xc000244d60?}, 0xc000244d60?)
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/typeset.go:99 +0x45
golang.org/x/tools/go/ssa.emitConv(0xc000272e00, {0x7dd9cca91f90, 0xc0001d9300}, {0x726cd8, 0xc000244d40})
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/emit.go:317 +0x67b
golang.org/x/tools/go/ssa.emitStore(0xc000272e00, {0x729c18, 0xc000232fc0}, {0x7dd9cca91f90, 0xc0001d9300}, 0x3d)
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/emit.go:418 +0x58
golang.org/x/tools/go/ssa.(*address).store(0xc0002418c0, 0xc000272e00, {0x7dd9cca91f90?, 0xc0001d9300?})
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/lvalue.go:42 +0x45
golang.org/x/tools/go/ssa.(*storebuf).emit(...)
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/builder.go:543
golang.org/x/tools/go/ssa.(*builder).assignStmt(0xc0002407e0, 0xc000272e00, {0xc0000141c0, 0x1, 0x3?}, {0xc0000141e0, 0x1, 0xc000241f80?}, 0x1)
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/builder.go:1223 +0x41c
golang.org/x/tools/go/ssa.(*builder).stmt(0xc0002407e0, 0xc000272e00, {0x727880?, 0xc00010e500?})
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/builder.go:2712 +0xd13
golang.org/x/tools/go/ssa.(*builder).stmtList(...)
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/builder.go:964
golang.org/x/tools/go/ssa.(*builder).stmt(0xc0002407e0, 0xc000272e00, {0x727790?, 0xc00007e8a0?})
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/builder.go:2745 +0x1046
golang.org/x/tools/go/ssa.(*builder).buildFromSyntax(0xc0002407e0, 0xc000272e00)
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/builder.go:2951 +0x265
golang.org/x/tools/go/ssa.(*builder).buildFunction(0xc0002407e0?, 0xc000272e00)
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/builder.go:2904 +0x186
golang.org/x/tools/go/ssa.(*builder).iterate(0xc0002407e0)
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/builder.go:2889 +0x25
golang.org/x/tools/go/ssa.(*Package).build(0xc0001d8b80)
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/builder.go:3172 +0xce
sync.(*Once).doSlow(0xc000234e10?, 0xc000032720?)
        /usr/lib/go/src/sync/once.go:76 +0xb4
sync.(*Once).Do(...)
        /usr/lib/go/src/sync/once.go:67
golang.org/x/tools/go/ssa.(*Package).Build(...)
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/builder.go:3161
golang.org/x/tools/go/ssa/ssautil.BuildPackage(0xc0001308c0, 0xc00010e3c0, 0xc000032720, {0xc0000580b0, 0x1, 0x1}, 0x14c)
        /home/mateusz/go/pkg/mod/golang.org/x/[email protected]/go/ssa/ssautil/load.go:187 +0x475
main.main()
        /tmp/cc/main.go:44 +0x17c
exit status 2

This happens only when ssa.InstantiateGenerics is passed to BuildPackage.

CC @adonovan @timothy-king per https://dev.golang.org/owners

@gopherbot gopherbot added the Tools This label describes issues relating to any tools in the x/tools repository. label Feb 22, 2025
@gopherbot gopherbot added this to the Unreleased milestone Feb 22, 2025
@gabyhelp gabyhelp added the BugReport Issues describing a possible bug in the Go implementation. label Feb 22, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BugReport Issues describing a possible bug in the Go implementation. Tools This label describes issues relating to any tools in the x/tools repository.
Projects
None yet
Development

No branches or pull requests

3 participants