From cda6f552d5d4a996df69981dac7c9d9b3c066537 Mon Sep 17 00:00:00 2001 From: mlugg Date: Thu, 4 Jul 2024 10:31:59 +0100 Subject: [PATCH] cbe: don't mark exported values/Decls as extern --- src/link/C.zig | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/link/C.zig b/src/link/C.zig index be8397e196..21245c1e30 100644 --- a/src/link/C.zig +++ b/src/link/C.zig @@ -536,11 +536,22 @@ pub fn flushModule(self: *C, arena: Allocator, prog_node: std.Progress.Node) !vo try f.all_buffers.ensureUnusedCapacity(gpa, 1 + (self.anon_decls.count() + self.decl_table.count()) * 2); f.appendBufAssumeCapacity(self.lazy_code_buf.items); for (self.anon_decls.keys(), self.anon_decls.values()) |anon_decl, decl_block| f.appendCodeAssumeCapacity( - self.exported_values.contains(anon_decl), + if (self.exported_values.contains(anon_decl)) + .default + else switch (zcu.intern_pool.indexToKey(anon_decl)) { + .extern_func => .zig_extern, + .variable => |variable| if (variable.is_extern) .zig_extern else .static, + else => .static, + }, self.getString(decl_block.code), ); for (self.decl_table.keys(), self.decl_table.values()) |decl_index, decl_block| f.appendCodeAssumeCapacity( - self.exported_decls.contains(decl_index), + if (self.exported_decls.contains(decl_index)) + .default + else if (zcu.declPtr(decl_index).isExtern(zcu)) + .zig_extern + else + .static, self.getString(decl_block.code), ); @@ -572,9 +583,13 @@ const Flush = struct { f.file_size += buf.len; } - fn appendCodeAssumeCapacity(f: *Flush, is_extern: bool, code: []const u8) void { + fn appendCodeAssumeCapacity(f: *Flush, storage: enum { default, zig_extern, static }, code: []const u8) void { if (code.len == 0) return; - f.appendBufAssumeCapacity(if (is_extern) "\nzig_extern " else "\nstatic "); + f.appendBufAssumeCapacity(switch (storage) { + .default => "\n", + .zig_extern => "\nzig_extern ", + .static => "\nstatic ", + }); f.appendBufAssumeCapacity(code); }