From db613d38f07da20385709b8250d1a3e83b96337d Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Fri, 25 Aug 2017 20:05:10 -0400 Subject: [PATCH] implement comptime bitcasting from array --- src/ir.cpp | 11 ++++++++++- test/cases/cast.zig | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/ir.cpp b/src/ir.cpp index f88612a049..c39950081f 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -14364,7 +14364,16 @@ static void buf_write_value_bytes(CodeGen *codegen, uint8_t *buf, ConstExprValue zig_unreachable(); } case TypeTableEntryIdArray: - zig_panic("TODO buf_write_value_bytes array type"); + { + size_t buf_i = 0; + expand_undef_array(codegen, val); + for (size_t elem_i = 0; elem_i < val->type->data.array.len; elem_i += 1) { + ConstExprValue *elem = &val->data.x_array.s_none.elements[elem_i]; + buf_write_value_bytes(codegen, &buf[buf_i], elem); + buf_i += type_size(codegen, elem->type); + } + } + return; case TypeTableEntryIdStruct: zig_panic("TODO buf_write_value_bytes struct type"); case TypeTableEntryIdMaybe: diff --git a/test/cases/cast.zig b/test/cases/cast.zig index c805c9b378..8c1df39f66 100644 --- a/test/cases/cast.zig +++ b/test/cases/cast.zig @@ -282,5 +282,5 @@ test "const slice widen cast" { const u32_value = ([]const u32)(bytes[0..])[0]; assert(u32_value == 0x12121212); - //assert(@bitCast(u32, bytes) == 0x12121212); + assert(@bitCast(u32, bytes) == 0x12121212); }