aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2021-11-18 21:41:44 +0100
committerJakub Konka <kubkon@jakubkonka.com>2021-11-18 21:41:44 +0100
commit6cf8a49bb0e5a6df3154aa7c41602ef21057ce50 (patch)
treea9d07fddfb602e5abc8d11ef434e54d80002b9bd /src
parent7747bf07c73a174dbd8c976dca8a94114c49349d (diff)
downloadzig-6cf8a49bb0e5a6df3154aa7c41602ef21057ce50.tar.gz
zig-6cf8a49bb0e5a6df3154aa7c41602ef21057ce50.zip
macho: sync .variable decl handling with elf linker
Diffstat (limited to 'src')
-rw-r--r--src/link/MachO.zig11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/link/MachO.zig b/src/link/MachO.zig
index 5484b9ccfb..20ee1ede62 100644
--- a/src/link/MachO.zig
+++ b/src/link/MachO.zig
@@ -3235,6 +3235,12 @@ pub fn updateDecl(self: *MachO, module: *Module, decl: *Module.Decl) !void {
if (decl.val.tag() == .extern_fn) {
return; // TODO Should we do more when front-end analyzed extern decl?
}
+ if (decl.val.castTag(.variable)) |payload| {
+ const variable = payload.data;
+ if (variable.is_extern) {
+ return; // TODO Should we do more when front-end analyzed extern decl?
+ }
+ }
var code_buffer = std.ArrayList(u8).init(self.base.allocator);
defer code_buffer.deinit();
@@ -3258,10 +3264,11 @@ pub fn updateDecl(self: *MachO, module: *Module, decl: *Module.Decl) !void {
self.active_decl = decl;
+ const decl_val = if (decl.val.castTag(.variable)) |payload| payload.data.init else decl.val;
const res = if (debug_buffers) |dbg|
try codegen.generateSymbol(&self.base, decl.srcLoc(), .{
.ty = decl.ty,
- .val = decl.val,
+ .val = decl_val,
}, &code_buffer, .{
.dwarf = .{
.dbg_line = &dbg.dbg_line_buffer,
@@ -3272,7 +3279,7 @@ pub fn updateDecl(self: *MachO, module: *Module, decl: *Module.Decl) !void {
else
try codegen.generateSymbol(&self.base, decl.srcLoc(), .{
.ty = decl.ty,
- .val = decl.val,
+ .val = decl_val,
}, &code_buffer, .none);
const code = blk: {