Commit 6511afcfe0

Veikka Tuominen <git@vexu.eu>
2022-12-19 19:44:58
Sema: fix coercion from `[:0]T` to `[*c]T`
1 parent 0c1d865
Changed files (2)
src
test
behavior
src/Sema.zig
@@ -24615,8 +24615,9 @@ fn coerceExtra(
                             else => break :p,
                         }
                         if (inst_info.size == .Slice) {
-                            if (dest_info.sentinel == null or inst_info.sentinel == null or
-                                !dest_info.sentinel.?.eql(inst_info.sentinel.?, dest_info.pointee_type, sema.mod))
+                            assert(dest_info.sentinel == null);
+                            if (inst_info.sentinel == null or
+                                !inst_info.sentinel.?.eql(Value.zero, dest_info.pointee_type, sema.mod))
                                 break :p;
 
                             const slice_ptr = try sema.analyzeSlicePtr(block, inst_src, inst, inst_ty);
test/behavior/cast.zig
@@ -1495,3 +1495,13 @@ test "cast typed undefined to int" {
         _ = b;
     }
 }
+
+test "implicit cast from [:0]T to [*c]T" {
+    if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
+    var a: [:0]const u8 = "foo";
+    var b: [*c]const u8 = a;
+    var c = std.mem.span(b);
+    try expect(c.len == a.len);
+    try expect(c.ptr == a.ptr);
+}