aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAustin Clements <austin@google.com>2014-10-30 11:17:26 -0400
committerAustin Clements <austin@google.com>2014-10-30 11:17:26 -0400
commit36d417c0e380b8ea762812b415796cf4b0af72de (patch)
tree27e7ed7d548d9e04ebc1bb7820bde569a5cae98c
parent097362fd2e01735b25b79c71ba6005cd38f81da0 (diff)
downloadgo-36d417c0e380b8ea762812b415796cf4b0af72de.tar.gz
go-36d417c0e380b8ea762812b415796cf4b0af72de.zip
[dev.power64] runtime: test CAS on large unsigned 32-bit numbers
This adds a test to runtime·check to ensure CAS of large unsigned 32-bit numbers does not accidentally sign-extend its arguments. LGTM=rsc R=rsc CC=golang-codereviews https://golang.org/cl/162490044
-rw-r--r--src/runtime/runtime.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/runtime/runtime.c b/src/runtime/runtime.c
index f19f8e4be3..a684142848 100644
--- a/src/runtime/runtime.c
+++ b/src/runtime/runtime.c
@@ -226,6 +226,12 @@ runtime·check(void)
if(z != 4)
runtime·throw("cas4");
+ z = 0xffffffff;
+ if(!runtime·cas(&z, 0xffffffff, 0xfffffffe))
+ runtime·throw("cas5");
+ if(z != 0xfffffffe)
+ runtime·throw("cas6");
+
k = (byte*)0xfedcb123;
if(sizeof(void*) == 8)
k = (byte*)((uintptr)k<<10);