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: support unsafe.Add and unsafe.Slice #47091

Closed
dominikh opened this issue Jul 7, 2021 · 2 comments
Closed

x/tools/go/ssa: support unsafe.Add and unsafe.Slice #47091

dominikh opened this issue Jul 7, 2021 · 2 comments
Labels
FrozenDueToAge NeedsFix The path to resolution is known, but the work has not been done. Tools This label describes issues relating to any tools in the x/tools repository.
Milestone

Comments

@dominikh
Copy link
Member

dominikh commented Jul 7, 2021

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

$ go version
go version devel go1.17-5c59e11f5e Wed Jul 7 22:29:01 2021 +0000 linux/amd64

Issue

x/tools/go/ssa currently crashes trying to build code that uses unsafe.Add or unsafe.Slice:

package pkg

import "unsafe"

func fn() {
	_ = unsafe.Add(nil, 0)
	_ = unsafe.Slice((*int)(nil), 0)
}
$ ssadump -build=F .
panic: interface conversion: types.Type is nil, not *types.Signature

goroutine 1 [running]:
golang.org/x/tools/go/ssa.(*builder).expr0(0x67d520, 0xc000300a00, {0x71e4c0, 0xc0000b16a0}, {0x0, {0x0, 0x0}, {0x0, 0x0}})
	/home/dominikh/prj/src/golang.org/x/tools/go/ssa/builder.go:679 +0x2092
golang.org/x/tools/go/ssa.(*builder).expr(0xc000206b80, 0xc000300a00, {0x71e4c0, 0xc0000b16a0})
	/home/dominikh/prj/src/golang.org/x/tools/go/ssa/builder.go:530 +0x19f
golang.org/x/tools/go/ssa.(*builder).expr0(0x67d520, 0xc000300a00, {0x71e730, 0xc00000c528}, {0x2, {0x71dbc8, 0xc0000b2b40}, {0x0, 0x0}})
	/home/dominikh/prj/src/golang.org/x/tools/go/ssa/builder.go:697 +0x1b85
golang.org/x/tools/go/ssa.(*builder).expr(0x2c, 0xc000300a00, {0x71e730, 0xc00000c528})
	/home/dominikh/prj/src/golang.org/x/tools/go/ssa/builder.go:530 +0x19f
golang.org/x/tools/go/ssa.(*builder).setCallFunc(0x8b18a0, 0xc000300a00, 0xc0000be7c0, 0xc0000c0540)
	/home/dominikh/prj/src/golang.org/x/tools/go/ssa/builder.go:881 +0x2ec
golang.org/x/tools/go/ssa.(*builder).setCall(0x67d520, 0xc000300a00, 0xc0000be7c0, 0xc0000c0540)
	/home/dominikh/prj/src/golang.org/x/tools/go/ssa/builder.go:962 +0x31
golang.org/x/tools/go/ssa.(*builder).expr0(0x67d520, 0xc000300a00, {0x71e1c0, 0xc0000be7c0}, {0x7, {0x71dad8, 0x8a7b20}, {0x0, 0x0}})
	/home/dominikh/prj/src/golang.org/x/tools/go/ssa/builder.go:596 +0x1f8e
golang.org/x/tools/go/ssa.(*builder).expr(0x40ce94, 0xc000300a00, {0x71e1c0, 0xc0000be7c0})
	/home/dominikh/prj/src/golang.org/x/tools/go/ssa/builder.go:530 +0x19f
golang.org/x/tools/go/ssa.(*builder).assign(0x0, 0x8, {0x71f1a0, 0x8e0a78}, {0x71e1c0, 0xc0000be7c0}, 0x0, 0xc000207380)
	/home/dominikh/prj/src/golang.org/x/tools/go/ssa/builder.go:502 +0x438
golang.org/x/tools/go/ssa.(*builder).assignStmt(0x100000000000002, 0xc000300a00, {0xc0000a66e0, 0x1, 0x0}, {0xc0000a6700, 0x1, 0x2}, 0x0)
	/home/dominikh/prj/src/golang.org/x/tools/go/ssa/builder.go:1050 +0x24d
golang.org/x/tools/go/ssa.(*builder).stmt(0x4126b9, 0xc000300a00, {0x71e040, 0xc0000be800})
	/home/dominikh/prj/src/golang.org/x/tools/go/ssa/builder.go:2009 +0x1094
golang.org/x/tools/go/ssa.(*builder).stmtList(0x6b8480, 0xc0000ecd80, {0xc0000b1820, 0x2, 0x67ecc0})
	/home/dominikh/prj/src/golang.org/x/tools/go/ssa/builder.go:790 +0x67
golang.org/x/tools/go/ssa.(*builder).stmt(0xc000300a00, 0xc000300a00, {0x71e160, 0xc0000110b0})
	/home/dominikh/prj/src/golang.org/x/tools/go/ssa/builder.go:2105 +0x1331
golang.org/x/tools/go/ssa.(*builder).buildFunction(0x67d880, 0xc000300a00)
	/home/dominikh/prj/src/golang.org/x/tools/go/ssa/builder.go:2198 +0x465
golang.org/x/tools/go/ssa.(*builder).buildFuncDecl(0xc0003008c0, 0xc0000b2d20, 0xc0000110e0)
	/home/dominikh/prj/src/golang.org/x/tools/go/ssa/builder.go:2228 +0x154
golang.org/x/tools/go/ssa.(*Package).build(0xc0000b2d20)
	/home/dominikh/prj/src/golang.org/x/tools/go/ssa/builder.go:2344 +0xd05
sync.(*Once).doSlow(0xc00000e248, 0x1)
	/home/dominikh/prj/go/src/sync/once.go:68 +0xd2
sync.(*Once).Do(...)
	/home/dominikh/prj/go/src/sync/once.go:59
golang.org/x/tools/go/ssa.(*Package).Build(...)
	/home/dominikh/prj/src/golang.org/x/tools/go/ssa/builder.go:2263
main.doMain()
	/home/dominikh/prj/src/golang.org/x/tools/cmd/ssadump/main.go:146 +0x92c
main.main()
	/home/dominikh/prj/src/golang.org/x/tools/cmd/ssadump/main.go:64 +0x19

This was with x/tools at fd00574

/cc @cuonglm

@dominikh dominikh added NeedsFix The path to resolution is known, but the work has not been done. Tools This label describes issues relating to any tools in the x/tools repository. labels Jul 7, 2021
@gopherbot gopherbot added this to the Unreleased milestone Jul 7, 2021
@gopherbot
Copy link

Change https://golang.org/cl/333110 mentions this issue: go/ssa: support unsafe.Add and unsafe.Slice

@gopherbot
Copy link

Change https://golang.org/cl/353350 mentions this issue: all: upgrade x/tools to latest

gopherbot pushed a commit to golang/text that referenced this issue Sep 30, 2021
Apparently the x/text/message/pipeline test uses x/tools/go/ssa to
introspect something, and as of CL 352953 the 'runtime' package needs
a newer version of x/tools/go/ssa (probably to pick up CL 333110).

Fixes golang/go#48701
Updates golang/go#47091

Change-Id: I78474f5ad037744906f5c771a7af7e0195f65173
Reviewed-on: https://go-review.googlesource.com/c/text/+/353350
Trust: Bryan C. Mills <bcmills@google.com>
Trust: Josh Bleecher Snyder <josharian@gmail.com>
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
@golang golang locked and limited conversation to collaborators Sep 30, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
FrozenDueToAge NeedsFix The path to resolution is known, but the work has not been done. Tools This label describes issues relating to any tools in the x/tools repository.
Projects
None yet
Development

No branches or pull requests

2 participants