diff --git a/src/ir.cpp b/src/ir.cpp index 0645193454cc90512153c53f24991a9b1811e646..828940a8ee77d65eff3a9f9d7c05638f4f556bca 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -15200,6 +15200,9 @@ static IrInstruction *ir_resolve_result(IrAnalyze *ira, IrInstruction *suspend_s return unwrapped_err_ptr; } } + } else if (is_slice(actual_elem_type) && value_type->id == ZigTypeIdArray) { + // need to allow EndExpr to do the implicit cast from array to slice + result_loc_pass1->written = false; } return result_loc; } diff --git a/test/stage1/behavior/misc.zig b/test/stage1/behavior/misc.zig index 28df26f9fa1501ff9a711b20acaea8fcd240a859..d499df4cb7cea477b6137a852d24cdbceca4c5eb 100644 --- a/test/stage1/behavior/misc.zig +++ b/test/stage1/behavior/misc.zig @@ -698,3 +698,11 @@ test "unicode escape in character literal" { var a: u24 = '\U01f4a9'; expect(a == 128169); } + +test "result location zero sized array inside struct field implicit cast to slice" { + const E = struct { + entries: []u32, + }; + var foo = E{ .entries = [_]u32{} }; + expect(foo.entries.len == 0); +}