aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/syscall_windows_test.go
diff options
context:
space:
mode:
authorAlex Brainman <alex.brainman@gmail.com>2019-01-25 18:56:22 +1100
committerEmmanuel Odeke <emm.odeke@gmail.com>2019-02-26 20:22:39 +0000
commit5cf4e442a5dc1f4a1d6f3fd04b1083bc192e648e (patch)
treeb3359d1f13c559facf644f2e3e1b0595b440b221 /src/runtime/syscall_windows_test.go
parentc97e57657643de69bf1dc58f3ffde75d31eda0c8 (diff)
downloadgo-5cf4e442a5dc1f4a1d6f3fd04b1083bc192e648e.tar.gz
go-5cf4e442a5dc1f4a1d6f3fd04b1083bc192e648e.zip
runtime: fix syscall.NewCallback to return all bits for uintptr values
syscall.NewCallback mistakenly used MOVL even for windows/amd64, which only returned the lower 32 bits regardless of the architecture. This was due to a copy and paste after porting from windows/386. The code now uses MOVQ, which will return all the available bits. Also adjust TestReturnAfterStackGrowInCallback to ensure we never regress. Fixes #29331 Change-Id: I4f5c8021c33f234c2bb7baa9ef7a6b4870172509 Reviewed-on: https://go-review.googlesource.com/c/159579 Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com> Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/runtime/syscall_windows_test.go')
-rw-r--r--src/runtime/syscall_windows_test.go8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/runtime/syscall_windows_test.go b/src/runtime/syscall_windows_test.go
index 3ad6512976..5335c12f0f 100644
--- a/src/runtime/syscall_windows_test.go
+++ b/src/runtime/syscall_windows_test.go
@@ -655,12 +655,16 @@ uintptr_t cfunc(callback f, uintptr_t n) {
r uintptr
err syscall.Errno
}
+ want := result{
+ // Make it large enough to test issue #29331.
+ r: (^uintptr(0)) >> 24,
+ err: 333,
+ }
c := make(chan result)
go func() {
- r, _, err := proc.Call(cb, 100)
+ r, _, err := proc.Call(cb, want.r)
c <- result{r, err.(syscall.Errno)}
}()
- want := result{r: 100, err: 333}
if got := <-c; got != want {
t.Errorf("got %d want %d", got, want)
}