From a73895339a3f28268873fc4c86cc0da729392b0d Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Wed, 1 Jun 2022 00:44:26 +0300 Subject: [PATCH] Sema: handle bitcasts produced by `coerce_result_ptr` in `validate{Array,Struct}Init` --- src/Sema.zig | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/Sema.zig b/src/Sema.zig index 42e37c7312..2e86e21a9f 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -3444,7 +3444,15 @@ fn validateStructInit( } if (air_tags[store_inst] != .store) continue; const bin_op = air_datas[store_inst].bin_op; - if (bin_op.lhs != field_ptr_air_ref) continue; + var lhs = bin_op.lhs; + { + const lhs_index = Air.refToIndex(lhs) orelse continue; + if (air_tags[lhs_index] == .bitcast) { + lhs = air_datas[lhs_index].ty_op.operand; + block_index -= 1; + } + } + if (lhs != field_ptr_air_ref) continue; if (block_index > 0 and field_ptr_air_inst == block.instructions.items[block_index - 1]) { @@ -3603,7 +3611,14 @@ fn zirValidateArrayInit( switch (air_tags[next_air_inst]) { .store => { const bin_op = air_datas[next_air_inst].bin_op; - if (bin_op.lhs != elem_ptr_air_ref) { + var lhs = bin_op.lhs; + if (Air.refToIndex(lhs)) |lhs_index| { + if (air_tags[lhs_index] == .bitcast) { + lhs = air_datas[lhs_index].ty_op.operand; + block_index -= 1; + } + } + if (lhs != elem_ptr_air_ref) { array_is_comptime = false; continue; }