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: cannot convert interface #62085

Closed
krhubert opened this issue Aug 17, 2023 · 1 comment
Closed

x/tools/go/ssa: panic: cannot convert interface #62085

krhubert opened this issue Aug 17, 2023 · 1 comment
Labels
Tools This label describes issues relating to any tools in the x/tools repository.
Milestone

Comments

@krhubert
Copy link

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

$ go version
go version go1.21.0 linux/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

GO111MODULE='auto'
GOARCH='amd64'
GOBIN=''
GOCACHE='/home/user/.cache/go-build'
GOENV='/home/user/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMODCACHE='/home/user/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/home/user'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/home/user/go'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/home/user/go/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.21.0'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='gcc'
CXX='g++'
CGO_ENABLED='1'
GOMOD='/home/user/src/krhubert/govulncheck-issue/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build1585313549=/tmp/go-build -gno-record-gcc-switches'

What did you do?

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

package main

import (
  "golang.org/x/tools/go/packages"
  "golang.org/x/tools/go/ssa"
)

func fn[I interface{ *any }](i I) {
  // panic: in main.fn: cannot convert *t0 (any) to I
  *i = *any(i).(I)
}

func main() {
  cfg := &packages.Config{
    Dir: "",
    Mode: packages.NeedImports |
      packages.NeedModule |
      packages.NeedSyntax |
      packages.NeedTypes |
      packages.NeedTypesInfo,
  }
  pkgs, err := packages.Load(cfg, "")
  if err != nil {
    panic(err)
  }
  pkg := pkgs[0]

  prog := ssa.NewProgram(pkg.Fset, ssa.InstantiateGenerics)
  for _, p := range pkg.Imports {
    prog.CreatePackage(p.Types, p.Syntax, p.TypesInfo, true)
  }

  prog.CreatePackage(pkg.Types, pkg.Syntax, pkg.TypesInfo, false)
  prog.Build()
}

What did you expect to see?

Success ssa program build.

What did you see instead?

panic: in main.fn: cannot convert *t0 (any) to I

goroutine 677 [running]:
golang.org/x/tools/go/ssa.emitConv(0xc0003a2900, {0x70bd60, 0xc000147ce0}, {0x709be8?, 0xc000405a70})
        /home/user/pkg/mod/golang.org/x/tools@v0.8.1-0.20230428195545-5283a0178901/go/ssa/emit.go:286 +0xd79
golang.org/x/tools/go/ssa.emitStore(0xc0003a2900, {0x70bd60, 0xc000147c20}, {0x70bd60, 0xc000147ce0}, 0x640120)
        /home/user/pkg/mod/golang.org/x/tools@v0.8.1-0.20230428195545-5283a0178901/go/ssa/emit.go:377 +0x58
golang.org/x/tools/go/ssa.(*address).store(0xc00011a720, 0xc0003a2900?, {0x70bd60?, 0xc000147ce0?})
        /home/user/pkg/mod/golang.org/x/tools@v0.8.1-0.20230428195545-5283a0178901/go/ssa/lvalue.go:40 +0x45
golang.org/x/tools/go/ssa.(*storebuf).emit(...)
        /home/user/pkg/mod/golang.org/x/tools@v0.8.1-0.20230428195545-5283a0178901/go/ssa/builder.go:533
golang.org/x/tools/go/ssa.(*builder).assignStmt(0xc000605840?, 0xc0003a2900, {0xc000116530, 0x1, 0x0?}, {0xc000116550, 0x1, 0x414668?}, 0x0)
        /home/user/pkg/mod/golang.org/x/tools@v0.8.1-0.20230428195545-5283a0178901/go/ssa/builder.go:1207 +0x422
golang.org/x/tools/go/ssa.(*builder).stmt(0x1?, 0xc0003a2900, {0x70aae0?, 0xc0000f3880?})
        /home/user/pkg/mod/golang.org/x/tools@v0.8.1-0.20230428195545-5283a0178901/go/ssa/builder.go:2179 +0x42d
golang.org/x/tools/go/ssa.(*builder).stmtList(...)
        /home/user/pkg/mod/golang.org/x/tools@v0.8.1-0.20230428195545-5283a0178901/go/ssa/builder.go:946
golang.org/x/tools/go/ssa.(*builder).stmt(0xc0003a2900?, 0xc0003a2900, {0x70a990?, 0xc0004053b0?})
        /home/user/pkg/mod/golang.org/x/tools@v0.8.1-0.20230428195545-5283a0178901/go/ssa/builder.go:2275 +0xe30
golang.org/x/tools/go/ssa.(*builder).buildFunctionBody(0x61ce6e?, 0xc0003a2900)
        /home/user/pkg/mod/golang.org/x/tools@v0.8.1-0.20230428195545-5283a0178901/go/ssa/builder.go:2389 +0x410
golang.org/x/tools/go/ssa.(*builder).buildFunction(0x61cec0?, 0xc0003a2900)
        /home/user/pkg/mod/golang.org/x/tools@v0.8.1-0.20230428195545-5283a0178901/go/ssa/builder.go:2324 +0x28
golang.org/x/tools/go/ssa.(*builder).buildCreated(0xc00005be18)
        /home/user/pkg/mod/golang.org/x/tools@v0.8.1-0.20230428195545-5283a0178901/go/ssa/builder.go:2411 +0x25
golang.org/x/tools/go/ssa.(*Package).build(0xc0001fee00)
        /home/user/pkg/mod/golang.org/x/tools@v0.8.1-0.20230428195545-5283a0178901/go/ssa/builder.go:2604 +0xc58
sync.(*Once).doSlow(0x0?, 0x0?)
        /home/user/go/src/sync/once.go:74 +0xbf
sync.(*Once).Do(...)
        /home/user/go/src/sync/once.go:65
golang.org/x/tools/go/ssa.(*Package).Build(...)
        /home/user/pkg/mod/golang.org/x/tools@v0.8.1-0.20230428195545-5283a0178901/go/ssa/builder.go:2475
golang.org/x/tools/go/ssa.(*Program).Build.func1(0x0?)
        /home/user/pkg/mod/golang.org/x/tools@v0.8.1-0.20230428195545-5283a0178901/go/ssa/builder.go:2460 +0x46
created by golang.org/x/tools/go/ssa.(*Program).Build in goroutine 1
        /home/user/pkg/mod/golang.org/x/tools@v0.8.1-0.20230428195545-5283a0178901/go/ssa/builder.go:2459 +0x187
exit status 2
@gopherbot gopherbot added the Tools This label describes issues relating to any tools in the x/tools repository. label Aug 17, 2023
@gopherbot gopherbot added this to the Unreleased milestone Aug 17, 2023
@Armatorix

This comment was marked as spam.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
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