-
Notifications
You must be signed in to change notification settings - Fork 18.4k
Closed
Labels
FrozenDueToAgeNeedsFixThe path to resolution is known, but the work has not been done.The path to resolution is known, but the work has not been done.
Milestone
Description
What version of Go are you using (go version
)?
$ go version go version go1.15 darwin/amd64
Does this issue reproduce with the latest release?
Yes
What did you do?
go run -race
the following code:
package main import ( "fmt" "unsafe" ) func main() { a := make([]int, 100) b := unsafe.Pointer(&a) c := unsafe.Pointer(uintptr(b) + 12) fmt.Println(b, c) d := unsafe.Pointer(uintptr(c) - (uintptr(c) & 7)) fmt.Println(d) e := unsafe.Pointer(uintptr(c) &^ 7) fmt.Println(e) }
What did you expect to see?
All pointers stay within bounds, so the program should work.
What did you see instead?
0xc00000e060 0xc00000e06c 0xc00000e068 fatal error: checkptr: pointer arithmetic result points to invalid allocation goroutine 1 [running]: runtime.throw(0x116a2c2, 0x40) /usr/local/Cellar/go/1.15/libexec/src/runtime/panic.go:1116 +0x72 fp=0xc000105ea0 sp=0xc000105e70 pc=0x1072e72 runtime.checkptrArithmetic(0xc00000e068, 0x0, 0x0, 0x0) /usr/local/Cellar/go/1.15/libexec/src/runtime/checkptr.go:43 +0xbe fp=0xc000105ed0 sp=0xc000105ea0 pc=0x1046bde main.main() /Users/dkisman/go/src/foo/foo.go:15 +0x26f fp=0xc000105f88 sp=0xc000105ed0 pc=0x1136daf runtime.main() /usr/local/Cellar/go/1.15/libexec/src/runtime/proc.go:204 +0x209 fp=0xc000105fe0 sp=0xc000105f88 pc=0x1075649 runtime.goexit() /usr/local/Cellar/go/1.15/libexec/src/runtime/asm_amd64.s:1374 +0x1 fp=0xc000105fe8 sp=0xc000105fe0 pc=0x10a5781 exit status 2
Note that the d
pointer arithmetic works fine, and e
flags the error, despite the two being logically equivalent.
Metadata
Metadata
Assignees
Labels
FrozenDueToAgeNeedsFixThe path to resolution is known, but the work has not been done.The path to resolution is known, but the work has not been done.