From 720cd43fc14cc7e362b3a0bfb6d4b86b3de82299 Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Tue, 8 Jul 2025 00:51:33 -0400 Subject: [PATCH] cbe: fix code header being omitted from the output --- src/dev.zig | 1 + src/link/C.zig | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/dev.zig b/src/dev.zig index babf3af69e..4c602621ec 100644 --- a/src/dev.zig +++ b/src/dev.zig @@ -154,6 +154,7 @@ pub const Env = enum { else => Env.ast_gen.supports(feature), }, .cbe => switch (feature) { + .legalize, .c_backend, .c_linker, => true, diff --git a/src/link/C.zig b/src/link/C.zig index 5ffb0fa986..941d33e5f7 100644 --- a/src/link/C.zig +++ b/src/link/C.zig @@ -63,13 +63,20 @@ const String = extern struct { .start = 0, .len = 0, }; + + fn concat(lhs: String, rhs: String) String { + assert(lhs.start + lhs.len == rhs.start); + return .{ + .start = lhs.start, + .len = lhs.len + rhs.len, + }; + } }; /// Per-declaration data. pub const AvBlock = struct { fwd_decl: String = .empty, code: String = .empty, - code_header: String = .empty, /// Each `Decl` stores a set of used `CType`s. In `flush()`, we iterate /// over each `Decl` and generate the definition for each used `CType` once. ctype_pool: codegen.CType.Pool = .empty, @@ -205,9 +212,10 @@ pub fn updateFunc( .ctype_pool = mir.c.ctype_pool.move(), .lazy_fns = mir.c.lazy_fns.move(), }; - gop.value_ptr.code = try self.addString(mir.c.code); gop.value_ptr.fwd_decl = try self.addString(mir.c.fwd_decl); - gop.value_ptr.code_header = try self.addString(mir.c.code_header); + const code_header = try self.addString(mir.c.code_header); + const code = try self.addString(mir.c.code); + gop.value_ptr.code = code_header.concat(code); try self.addUavsFromCodegen(&mir.c.uavs); }