diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2020-07-05 22:24:25 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-07-05 22:24:25 +0000 |
| commit | dcca5cf1a9241e7274ae03a587b7e3313d673f3e (patch) | |
| tree | 6b4ca8bd860d267f3c75ba37e78d0acd9bc49753 /lib/std | |
| parent | 289eab9177443bdfadfe750afda8f7f32f43be0f (diff) | |
| parent | b8553b4813e971e50dcae7b8181e5f6771f3dbff (diff) | |
| download | zig-dcca5cf1a9241e7274ae03a587b7e3313d673f3e.tar.gz zig-dcca5cf1a9241e7274ae03a587b7e3313d673f3e.zip | |
Merge pull request #5797 from xackus/intcast-runtime-safety
stage1: `@intcast` runtime safety for unsigned -> signed of same bit count
Diffstat (limited to 'lib/std')
| -rw-r--r-- | lib/std/special/compiler_rt/clzsi2_test.zig | 2 | ||||
| -rw-r--r-- | lib/std/special/compiler_rt/int.zig | 2 | ||||
| -rw-r--r-- | lib/std/special/compiler_rt/udivmod.zig | 2 |
3 files changed, 3 insertions, 3 deletions
diff --git a/lib/std/special/compiler_rt/clzsi2_test.zig b/lib/std/special/compiler_rt/clzsi2_test.zig index ff94455846..8a2896fcb6 100644 --- a/lib/std/special/compiler_rt/clzsi2_test.zig +++ b/lib/std/special/compiler_rt/clzsi2_test.zig @@ -4,7 +4,7 @@ const testing = @import("std").testing; fn test__clzsi2(a: u32, expected: i32) void { var nakedClzsi2 = clzsi2.__clzsi2; var actualClzsi2 = @ptrCast(fn (a: i32) callconv(.C) i32, nakedClzsi2); - var x = @intCast(i32, a); + var x = @bitCast(i32, a); var result = actualClzsi2(x); testing.expectEqual(expected, result); } diff --git a/lib/std/special/compiler_rt/int.zig b/lib/std/special/compiler_rt/int.zig index eb731ee898..a72c13e233 100644 --- a/lib/std/special/compiler_rt/int.zig +++ b/lib/std/special/compiler_rt/int.zig @@ -244,7 +244,7 @@ pub fn __udivsi3(n: u32, d: u32) callconv(.C) u32 { // r.all -= d.all; // carry = 1; // } - const s = @intCast(i32, d -% r -% 1) >> @intCast(u5, n_uword_bits - 1); + const s = @bitCast(i32, d -% r -% 1) >> @intCast(u5, n_uword_bits - 1); carry = @intCast(u32, s & 1); r -= d & @bitCast(u32, s); } diff --git a/lib/std/special/compiler_rt/udivmod.zig b/lib/std/special/compiler_rt/udivmod.zig index 7d519c34cb..ba53d1dee0 100644 --- a/lib/std/special/compiler_rt/udivmod.zig +++ b/lib/std/special/compiler_rt/udivmod.zig @@ -184,7 +184,7 @@ pub fn udivmod(comptime DoubleInt: type, a: DoubleInt, b: DoubleInt, maybe_rem: // carry = 1; // } r_all = @ptrCast(*align(@alignOf(SingleInt)) DoubleInt, &r[0]).*; // TODO issue #421 - const s: SignedDoubleInt = @intCast(SignedDoubleInt, b -% r_all -% 1) >> (DoubleInt.bit_count - 1); + const s: SignedDoubleInt = @bitCast(SignedDoubleInt, b -% r_all -% 1) >> (DoubleInt.bit_count - 1); carry = @intCast(u32, s & 1); r_all -= b & @bitCast(DoubleInt, s); r = @ptrCast(*[2]SingleInt, &r_all).*; // TODO issue #421 |
