diff --git a/src/Sema.zig b/src/Sema.zig index afb97f3b3d..09f99c5751 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -18140,11 +18140,6 @@ fn coerce( return sema.addConstUndef(dest_ty); }, else => { - // undefined sets the error code also to undefined. - if (is_undef) { - return sema.addConstUndef(dest_ty); - } - // T to E!T return sema.wrapErrorUnionPayload(block, dest_ty, inst, inst_src); }, diff --git a/test/behavior/cast.zig b/test/behavior/cast.zig index 15a793d109..8a4bec935e 100644 --- a/test/behavior/cast.zig +++ b/test/behavior/cast.zig @@ -1372,3 +1372,13 @@ test "cast compatible optional types" { var b: ?[]const u8 = a; try expect(b == null); } + +test "coerce undefined single-item pointer of array to error union of slice" { + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + + const a = @as([*]u8, undefined)[0..0]; + var b: error{a}![]const u8 = a; + const s = try b; + try expect(s.len == 0); +}