authorgravatar for samuel.tebbs@gmail.comSamTebbs33 <samuel.tebbs@gmail.com> 2019-07-05 00:00:12+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-07-06 17:02:17-04:00
logb118806c69e44029a7af9c9b8bdfa9cdcd280260
treea76bb5a3b4d9d3c407a81d6c7924b9f338cb293a
parent21c60922e3514ca15fa505efb380fb37fde8d62a

Add implicit cast for *[N]T to [*c]T


2 files changed, 12 insertions(+), 2 deletions(-)

src/ir.cpp+2-2
......@@ -12773,9 +12773,9 @@ static IrInstruction *ir_analyze_cast(IrAnalyze *ira, IrInstruction *source_inst
1277312773 }
1277412774 }
1277512775
12776 // *[N]T to [*]T
12776 // *[N]T to [*]T and [*c]T
1277712777 if (wanted_type->id == ZigTypeIdPointer &&
12778 wanted_type->data.pointer.ptr_len == PtrLenUnknown &&
12778 (wanted_type->data.pointer.ptr_len == PtrLenUnknown || wanted_type->data.pointer.ptr_len == PtrLenC) &&
1277912779 actual_type->id == ZigTypeIdPointer &&
1278012780 actual_type->data.pointer.ptr_len == PtrLenSingle &&
1278112781 actual_type->data.pointer.child_type->id == ZigTypeIdArray)
test/stage1/behavior/cast.zig+10
......@@ -404,6 +404,16 @@ test "implicit cast from *[N]T to ?[*]T" {
404404 expect(std.mem.eql(u16, x.?[0..4], y[0..4]));
405405}
406406
407test "implicit cast from *[N]T to [*c]T" {
408 var x: [4]u16 = [4]u16{ 0, 1, 2, 3 };
409 var y: [*c]u16 = &x;
410
411 expect(std.mem.eql(u16, x[0..4], y[0..4]));
412 x[0] = 8;
413 y[3] = 6;
414 expect(std.mem.eql(u16, x[0..4], y[0..4]));
415}
416
407417test "implicit cast from *T to ?*c_void" {
408418 var a: u8 = 1;
409419 incrementVoidPtrValue(&a);