• Matthew Dempsky's avatar
    cmd/compile: add -d=checkptr to validate unsafe.Pointer rules · 80a6fede
    Matthew Dempsky authored
    This CL adds -d=checkptr as a compile-time option for adding
    instrumentation to check that Go code is following unsafe.Pointer
    safety rules dynamically. In particular, it currently checks two
    things:
    
    1. When converting unsafe.Pointer to *T, make sure the resulting
    pointer is aligned appropriately for T.
    
    2. When performing pointer arithmetic, if the result points to a Go
    heap object, make sure we can find an unsafe.Pointer-typed operand
    that pointed into the same object.
    
    These checks are currently disabled for the runtime, and can also be
    disabled through a new //go:nocheckptr annotation. The latter is
    necessary for functions like strings.noescape, which intentionally
    violate safety rules to workaround escape analysis limitations.
    
    Fixes #22218.
    
    Change-Id: If5a51273881d93048f74bcff10a3275c9c91da6a
    Reviewed-on: https://go-review.googlesource.com/c/go/+/162237
    Run-TryBot: Matthew Dempsky <mdempsky@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarKeith Randall <khr@golang.org>
    80a6fede
main.go 42.3 KB