Description
As a prerequisite for #34964, the standard library's tests need to all pass when -d=checkptr
is enabled:
$ go test -a -short -gcflags=all=-d=checkptr std cmd
Currently, that's not the case.
-
There are also some panics because of
(*[Big]T)(p)[:n]
expressions, like in package reflect. This code pattern should be recognized by cmd/compile. -
There are a few tests that fail because CL 201781 leads them to heap allocate when before things would only stack allocate; e.g., context.TestAllocs or database/sql.TestRawBytesAllocs. Not sure how to handle this; maybe for now the escape analysis change should only be enabled for
-d=checkptr=2
, and-race
/-msan
only enable-d=checkptr=1
. -
In sync/atomic.hammerStoreLoadPointer, there's (in effect):
new := uintptr(LoadPointer(addr)) new += offset StorePointer(addr, unsafe.Pointer(new))
This violates package unsafe's pointer rules: pointers have to be converted to uintptr and back to unsafe.Pointer in a single expression without being stored in a uintptr-typed variable, as is being done with
new
. (This just needs someone to grok exactly what the test is doing, and fix it to follow pointer rules correctly.)
There seem to be other failures still that need to be diagnosed. If folks want to try running the command above, claiming a failure, and then investigating what's going on, that would be great.