aboutsummaryrefslogtreecommitdiff
path: root/src/value.zig
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-12-22 12:45:51 +0200
committerVeikka Tuominen <git@vexu.eu>2022-12-27 15:33:27 +0200
commit9c0f3163a876859d3cf10c8b57d81cae381c46dc (patch)
tree194842cd1aea1e311200392f118e5b22c8eb0aea /src/value.zig
parentb7730c74789d8f34748e516398de892646e88bc6 (diff)
downloadzig-9c0f3163a876859d3cf10c8b57d81cae381c46dc.tar.gz
zig-9c0f3163a876859d3cf10c8b57d81cae381c46dc.zip
value: fix bitcasting packed structs with `u0` fields
Closes #13942
Diffstat (limited to 'src/value.zig')
-rw-r--r--src/value.zig2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/value.zig b/src/value.zig
index c86e5ab12c..eeb1228ebc 100644
--- a/src/value.zig
+++ b/src/value.zig
@@ -1378,6 +1378,7 @@ pub const Value = extern union {
var enum_buffer: Payload.U64 = undefined;
const int_val = val.enumToInt(ty, &enum_buffer);
+ if (abi_size == 0) return;
if (abi_size <= @sizeOf(u64)) {
const int: u64 = switch (int_val.tag()) {
.zero => 0,
@@ -1571,6 +1572,7 @@ pub const Value = extern union {
const abi_size = @intCast(usize, ty.abiSize(target));
const bits = int_info.bits;
+ if (bits == 0) return Value.zero;
if (bits <= 64) switch (int_info.signedness) { // Fast path for integers <= u64
.signed => return Value.Tag.int_i64.create(arena, std.mem.readVarPackedInt(i64, buffer, bit_offset, bits, endian, .signed)),
.unsigned => return Value.Tag.int_u64.create(arena, std.mem.readVarPackedInt(u64, buffer, bit_offset, bits, endian, .unsigned)),