Commit e9e43ed0d3

daurnimator <quae@daurnimator.com>
2020-04-05 06:08:25
compiler_rt/atomics: be consistent with `const value`
1 parent f947444
Changed files (1)
lib
std
special
compiler_rt
lib/std/special/compiler_rt/atomics.zig
@@ -154,7 +154,7 @@ fn atomicExchangeFn(comptime T: type) fn (*T, T, i32) callconv(.C) T {
             if (@sizeOf(T) > largest_atomic_size) {
                 var sl = spinlocks.get(@ptrToInt(ptr));
                 defer sl.release();
-                var value = ptr.*;
+                const value = ptr.*;
                 ptr.* = val;
                 return value;
             } else {
@@ -177,11 +177,12 @@ fn atomicCompareExchangeFn(comptime T: type) fn (*T, *T, T, i32, i32) callconv(.
             if (@sizeOf(T) > largest_atomic_size) {
                 var sl = spinlocks.get(@ptrToInt(ptr));
                 defer sl.release();
-                if (ptr.* == expected.*) {
+                const value = ptr.*;
+                if (value == expected.*) {
                     ptr.* = desired;
                     return 1;
                 }
-                expected.* = ptr.*;
+                expected.* = value;
                 return 0;
             } else {
                 if (@cmpxchgStrong(T, ptr, expected.*, desired, .SeqCst, .SeqCst)) |old_value| {
@@ -208,14 +209,14 @@ fn fetchFn(comptime T: type, comptime op: builtin.AtomicRmwOp) fn (*T, T, i32) c
                 var sl = spinlocks.get(@ptrToInt(ptr));
                 defer sl.release();
 
-                var value = ptr.*;
+                const value = ptr.*;
                 ptr.* = switch (op) {
-                    .Add => ptr.* +% val,
-                    .Sub => ptr.* -% val,
-                    .And => ptr.* & val,
-                    .Nand => ~(ptr.* & val),
-                    .Or => ptr.* | val,
-                    .Xor => ptr.* ^ val,
+                    .Add => value +% val,
+                    .Sub => value -% val,
+                    .And => value & val,
+                    .Nand => ~(value & val),
+                    .Or => value | val,
+                    .Xor => value ^ val,
                     else => @compileError("unsupported atomic op"),
                 };