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 {...@@ -154,6 +154,7 @@ pub const Env = enum {
154 else => Env.ast_gen.supports(feature),154 else => Env.ast_gen.supports(feature),
155 },155 },
156 .cbe => switch (feature) {156 .cbe => switch (feature) {
157 .legalize,
157 .c_backend,158 .c_backend,
158 .c_linker,159 .c_linker,
159 => true,160 => true,
src/link/C.zig+11-3
...@@ -63,13 +63,20 @@ const String = extern struct {...@@ -63,13 +63,20 @@ const String = extern struct {
63 .start = 0,63 .start = 0,
64 .len = 0,64 .len = 0,
65 };65 };
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 }
66};74};
6775
68/// Per-declaration data.76/// Per-declaration data.
69pub const AvBlock = struct {77pub const AvBlock = struct {
70 fwd_decl: String = .empty,78 fwd_decl: String = .empty,
71 code: String = .empty,79 code: String = .empty,
72 code_header: String = .empty,
73 /// Each `Decl` stores a set of used `CType`s. In `flush()`, we iterate80 /// Each `Decl` stores a set of used `CType`s. In `flush()`, we iterate
74 /// over each `Decl` and generate the definition for each used `CType` once.81 /// over each `Decl` and generate the definition for each used `CType` once.
75 ctype_pool: codegen.CType.Pool = .empty,82 ctype_pool: codegen.CType.Pool = .empty,
...@@ -205,9 +212,10 @@ pub fn updateFunc(...@@ -205,9 +212,10 @@ pub fn updateFunc(
205 .ctype_pool = mir.c.ctype_pool.move(),212 .ctype_pool = mir.c.ctype_pool.move(),
206 .lazy_fns = mir.c.lazy_fns.move(),213 .lazy_fns = mir.c.lazy_fns.move(),
207 };214 };
208 gop.value_ptr.code = try self.addString(mir.c.code);
209 gop.value_ptr.fwd_decl = try self.addString(mir.c.fwd_decl);215 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);
211 try self.addUavsFromCodegen(&mir.c.uavs);219 try self.addUavsFromCodegen(&mir.c.uavs);
212}220}
213221