authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2022-12-10 03:44:25-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-12-10 09:15:40-05:00
logfc6d7d2799fa297a65e8bb0052e9e2c7bca5c645
tree65bec2a059e558e2fb195eaac18c9003f8318530
parentf020734347d03c2f1e2083272cc86a8062c27d23

CBE: fix compiling for aarch64-windows

These bugs were triggered in the C backend by aarch64-specific code in os/windows.zig. Intentionally not updating zig1.wasm yet because of upcoming changes and since aarch64-windows is not tested on master yet.

1 files changed, 7 insertions(+), 0 deletions(-)

src/codegen/c.zig+7
...@@ -559,6 +559,7 @@ pub const DeclGen = struct {...@@ -559,6 +559,7 @@ pub const DeclGen = struct {
559 try writer.writeByte(')');559 try writer.writeByte(')');
560 }560 }
561 switch (ptr_val.tag()) {561 switch (ptr_val.tag()) {
562 .int_u64, .one => try writer.print("{x}", .{try dg.fmtIntLiteral(Type.usize, ptr_val)}),
562 .decl_ref_mut, .decl_ref, .variable => {563 .decl_ref_mut, .decl_ref, .variable => {
563 const decl_index = switch (ptr_val.tag()) {564 const decl_index = switch (ptr_val.tag()) {
564 .decl_ref => ptr_val.castTag(.decl_ref).?.data,565 .decl_ref => ptr_val.castTag(.decl_ref).?.data,
...@@ -640,6 +641,9 @@ pub const DeclGen = struct {...@@ -640,6 +641,9 @@ pub const DeclGen = struct {
640 };641 };
641642
642 if (field_info.ty.hasRuntimeBitsIgnoreComptime()) {643 if (field_info.ty.hasRuntimeBitsIgnoreComptime()) {
644 // Ensure complete type definition is visible before accessing fields.
645 try dg.renderType(std.io.null_writer, field_ptr.container_ty, .Complete);
646
643 try writer.writeAll("&(");647 try writer.writeAll("&(");
644 try dg.renderParentPtr(writer, field_ptr.container_ptr, container_ptr_ty);648 try dg.renderParentPtr(writer, field_ptr.container_ptr, container_ptr_ty);
645 try writer.writeAll(")->");649 try writer.writeAll(")->");
...@@ -672,6 +676,9 @@ pub const DeclGen = struct {...@@ -672,6 +676,9 @@ pub const DeclGen = struct {
672 };676 };
673 const container_ptr_ty = Type.initPayload(&container_ptr_ty_pl.base);677 const container_ptr_ty = Type.initPayload(&container_ptr_ty_pl.base);
674678
679 // Ensure complete type definition is visible before accessing fields.
680 try dg.renderType(std.io.null_writer, payload_ptr.container_ty, .Complete);
681
675 try writer.writeAll("&(");682 try writer.writeAll("&(");
676 try dg.renderParentPtr(writer, payload_ptr.container_ptr, container_ptr_ty);683 try dg.renderParentPtr(writer, payload_ptr.container_ptr, container_ptr_ty);
677 try writer.writeAll(")->payload");684 try writer.writeAll(")->payload");