golang/go
View on GitHubcmd/compile: -d=checkptr doesn't detect invalid pointer fields in converted pointers-to-structs
Open
#36,017 opened on Dec 6, 2019
NeedsInvestigationcompiler/runtimehelp wanted
Repository metrics
- Stars
- (133,883 stars)
- PR merge metrics
- (No merged PRs in 30d)
Description
What version of Go are you using (go version)?
What operating system and processor architecture are you using (go env)?
What did you do?
package tmp
import (
"testing"
"unsafe"
)
func TestUnsafeCast(t *testing.T) {
var x uint32 = 0
p := (*uint64)(unsafe.Pointer(&x))
t.Log(*p)
}
func TestUnsafeStructCast(t *testing.T) {
var x uint32 = 0
type A struct {
p *uint32
}
type B struct {
p *uint64
}
v := &A{ptr:&x}
p := (*B)(unsafe.Pointer(v))
t.Log(*p.p)
}
What did you expect to see?
Both TestUnsafeCast and TestUnsafeStructCast fail with go test -gcflags=-d=checkptr, since both use invalid unsafe.Pointer casts.
What did you see instead?
Only the TestUnsafeCast fails. Pointer fields are not verified properly.