authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-07-08 00:51:33-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-07 22:43:53-07:00
log720cd43fc14cc7e362b3a0bfb6d4b86b3de82299
tree06bce525e2422d2264a4fa29ab0e952a05f6e1dc
parent043079d7655efefbec97d8338b7d7fa3f9fcbdb0

cbe: fix code header being omitted from the output


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

src/dev.zig+1
......@@ -154,6 +154,7 @@ pub const Env = enum {
154154 else => Env.ast_gen.supports(feature),
155155 },
156156 .cbe => switch (feature) {
157 .legalize,
157158 .c_backend,
158159 .c_linker,
159160 => true,
src/link/C.zig+11-3
......@@ -63,13 +63,20 @@ const String = extern struct {
6363 .start = 0,
6464 .len = 0,
6565 };
66
67 fn concat(lhs: String, rhs: String) String {
68 assert(lhs.start + lhs.len == rhs.start);
69 return .{
70 .start = lhs.start,
71 .len = lhs.len + rhs.len,
72 };
73 }
6674};
6775
6876/// Per-declaration data.
6977pub const AvBlock = struct {
7078 fwd_decl: String = .empty,
7179 code: String = .empty,
72 code_header: String = .empty,
7380 /// Each `Decl` stores a set of used `CType`s. In `flush()`, we iterate
7481 /// over each `Decl` and generate the definition for each used `CType` once.
7582 ctype_pool: codegen.CType.Pool = .empty,
......@@ -205,9 +212,10 @@ pub fn updateFunc(
205212 .ctype_pool = mir.c.ctype_pool.move(),
206213 .lazy_fns = mir.c.lazy_fns.move(),
207214 };
208 gop.value_ptr.code = try self.addString(mir.c.code);
209215 gop.value_ptr.fwd_decl = try self.addString(mir.c.fwd_decl);
210 gop.value_ptr.code_header = try self.addString(mir.c.code_header);
216 const code_header = try self.addString(mir.c.code_header);
217 const code = try self.addString(mir.c.code);
218 gop.value_ptr.code = code_header.concat(code);
211219 try self.addUavsFromCodegen(&mir.c.uavs);
212220}
213221