windows/amd64: race detector triggers checkptr failure
Hi @JasonTashtego, I hope you're doing well. Copying from sqlite#62: ``` C:\Users\0xjnml\go\src\github.com\zombiezen\go-sqlite>go clean -testcache C:\Users\0xjnml\go\src\github.com\zombiezen\go-sqlite>go env GOOS GOARCH windows amd64 C:\Users\0xjnml\go\src\github.com\zombiezen\go-sqlite>go test PASS ok zombiezen.com/go/sqlite 0.469s C:\Users\0xjnml\go\src\github.com\zombiezen\go-sqlite>go test -race fatal error: checkptr: pointer arithmetic computed bad pointer value goroutine 1 [running, locked to thread]: runtime.throw(0x13bd40b, 0x37) C:/Program Files/Go/src/runtime/panic.go:1117 +0x79 fp=0xc000113300 sp=0xc0001132d0 pc=0x939f99 runtime.checkptrArithmetic(0x1, 0x0, 0x0, 0x0) C:/Program Files/Go/src/runtime/checkptr.go:26 +0xd7 fp=0xc000113330 sp=0xc000113300 pc=0x904e17 modernc.org/libc.newFile(0x0, 0xc000000000, 0xc000163500) C:/Users/0xjnml/go/pkg/mod/modernc.org/libc@v1.9.11/libc_windows.go:230 +0x19b fp=0xc000113370 sp=0xc000113330 pc=0xae807b modernc.org/libc.init() C:/Users/0xjnml/go/pkg/mod/modernc.org/libc@v1.9.11/libc.go:53 +0x5eea fp=0xc000113b98 sp=0xc000113370 pc=0xaf476a runtime.doInit(0x16d7aa0) C:/Program Files/Go/src/runtime/proc.go:6309 +0xfd fp=0xc000113ce8 sp=0xc000113b98 pc=0x94aa1d runtime.doInit(0x16d52c0) C:/Program Files/Go/src/runtime/proc.go:6286 +0x88 fp=0xc000113e38 sp=0xc000113ce8 pc=0x94a9a8 runtime.doInit(0x16d1f80) C:/Program Files/Go/src/runtime/proc.go:6286 +0x88 fp=0xc000113f88 sp=0xc000113e38 pc=0x94a9a8 runtime.main() C:/Program Files/Go/src/runtime/proc.go:208 +0x205 fp=0xc000113fe0 sp=0xc000113f88 pc=0x93c765 runtime.goexit() C:/Program Files/Go/src/runtime/asm_amd64.s:1371 +0x1 fp=0xc000113fe8 sp=0xc000113fe0 pc=0x973c41 exit status 2 FAIL zombiezen.com/go/sqlite 0.099s C:\Users\0xjnml\go\src\github.com\zombiezen\go-sqlite>go test -race -run 18 fatal error: checkptr: pointer arithmetic computed bad pointer value goroutine 1 [running, locked to thread]: runtime.throw(0x199d40b, 0x37) C:/Program Files/Go/src/runtime/panic.go:1117 +0x79 fp=0xc000113300 sp=0xc0001132d0 pc=0xf19f99 runtime.checkptrArithmetic(0x1, 0x0, 0x0, 0x0) C:/Program Files/Go/src/runtime/checkptr.go:26 +0xd7 fp=0xc000113330 sp=0xc000113300 pc=0xee4e17 modernc.org/libc.newFile(0x0, 0xc000000000, 0xc000165500) C:/Users/0xjnml/go/pkg/mod/modernc.org/libc@v1.9.11/libc_windows.go:230 +0x19b fp=0xc000113370 sp=0xc000113330 pc=0x10c807b modernc.org/libc.init() C:/Users/0xjnml/go/pkg/mod/modernc.org/libc@v1.9.11/libc.go:53 +0x5eea fp=0xc000113b98 sp=0xc000113370 pc=0x10d476a runtime.doInit(0x1cb7aa0) C:/Program Files/Go/src/runtime/proc.go:6309 +0xfd fp=0xc000113ce8 sp=0xc000113b98 pc=0xf2aa1d runtime.doInit(0x1cb52c0) C:/Program Files/Go/src/runtime/proc.go:6286 +0x88 fp=0xc000113e38 sp=0xc000113ce8 pc=0xf2a9a8 runtime.doInit(0x1cb1f80) C:/Program Files/Go/src/runtime/proc.go:6286 +0x88 fp=0xc000113f88 sp=0xc000113e38 pc=0xf2a9a8 runtime.main() C:/Program Files/Go/src/runtime/proc.go:208 +0x205 fp=0xc000113fe0 sp=0xc000113f88 pc=0xf1c765 runtime.goexit() C:/Program Files/Go/src/runtime/asm_amd64.s:1371 +0x1 fp=0xc000113fe8 sp=0xc000113fe0 pc=0xf53c41 exit status 2 FAIL zombiezen.com/go/sqlite 0.139s C:\Users\0xjnml\go\src\github.com\zombiezen\go-sqlite> ``` The [line in question](https://gitlab.com/cznic/libc/-/blob/f08d236e2e693436eb5236d641117f007d283f6b/libc_windows.go#L230) seems to incorrectly convert an uintptr, holding a handle, to `unsafe.Pointer` and then back to `uintptr`. I think we can just replace ```go f := addFile(h, fd) return uintptr(unsafe.Pointer(f)) ``` with ```go return addFile(h, fd) ``` and similarly two more times below, but I wanted to check with you if I'm possibly missing something. Please take a look, thank you.
issue