aboutsummaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2022-12-10 03:44:25 -0500
committerAndrew Kelley <andrew@ziglang.org>2022-12-10 09:15:40 -0500
commitfc6d7d2799fa297a65e8bb0052e9e2c7bca5c645 (patch)
tree65bec2a059e558e2fb195eaac18c9003f8318530 /src/codegen
parentf020734347d03c2f1e2083272cc86a8062c27d23 (diff)
downloadzig-fc6d7d2799fa297a65e8bb0052e9e2c7bca5c645.tar.gz
zig-fc6d7d2799fa297a65e8bb0052e9e2c7bca5c645.zip
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.
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/c.zig7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig
index 364d8f586d..b78c9e9b1a 100644
--- a/src/codegen/c.zig
+++ b/src/codegen/c.zig
@@ -559,6 +559,7 @@ pub const DeclGen = struct {
try writer.writeByte(')');
}
switch (ptr_val.tag()) {
+ .int_u64, .one => try writer.print("{x}", .{try dg.fmtIntLiteral(Type.usize, ptr_val)}),
.decl_ref_mut, .decl_ref, .variable => {
const decl_index = switch (ptr_val.tag()) {
.decl_ref => ptr_val.castTag(.decl_ref).?.data,
@@ -640,6 +641,9 @@ pub const DeclGen = struct {
};
if (field_info.ty.hasRuntimeBitsIgnoreComptime()) {
+ // Ensure complete type definition is visible before accessing fields.
+ try dg.renderType(std.io.null_writer, field_ptr.container_ty, .Complete);
+
try writer.writeAll("&(");
try dg.renderParentPtr(writer, field_ptr.container_ptr, container_ptr_ty);
try writer.writeAll(")->");
@@ -672,6 +676,9 @@ pub const DeclGen = struct {
};
const container_ptr_ty = Type.initPayload(&container_ptr_ty_pl.base);
+ // Ensure complete type definition is visible before accessing fields.
+ try dg.renderType(std.io.null_writer, payload_ptr.container_ty, .Complete);
+
try writer.writeAll("&(");
try dg.renderParentPtr(writer, payload_ptr.container_ptr, container_ptr_ty);
try writer.writeAll(")->payload");