authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-10-29 13:28:17+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-10-29 18:55:58+01:00
logeaca72534c6d57acf85b7f20e76fd31302785a5e
treee1efe284c266e78b23f6a45f6373a00e67e2c1d1
parent209fd8cb9326ed8376bf17e847209ff0598d3aa6

elf: implement exporting anon decls


2 files changed, 16 insertions(+), 4 deletions(-)

src/link/Elf.zig+15-2
......@@ -3585,8 +3585,21 @@ pub fn updateExports(
35853585 _ = try self.getOrCreateMetadataForDecl(decl_index);
35863586 break :blk self.decls.getPtr(decl_index).?;
35873587 },
3588 // TODO is it possible to request export before const being lowered?
3589 .value => |value| self.anon_decls.getPtr(value).?,
3588 .value => |value| self.anon_decls.getPtr(value) orelse blk: {
3589 const first_exp = exports[0];
3590 const res = try self.lowerAnonDecl(value, .none, first_exp.getSrcLoc(mod));
3591 switch (res) {
3592 .ok => {},
3593 .fail => |em| {
3594 // TODO maybe it's enough to return an error here and let Module.processExportsInner
3595 // handle the error?
3596 try mod.failed_exports.ensureUnusedCapacity(mod.gpa, 1);
3597 mod.failed_exports.putAssumeCapacityNoClobber(first_exp, em);
3598 return;
3599 },
3600 }
3601 break :blk self.anon_decls.getPtr(value).?;
3602 },
35903603 };
35913604 const sym_index = metadata.symbol_index;
35923605 const esym_index = self.symbol(sym_index).esym_index;
test/behavior/export_builtin.zig+1-2
......@@ -70,8 +70,7 @@ test "exporting comptime-known value" {
7070test "exporting comptime var" {
7171 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
7272 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
73 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
74 // if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
73 if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
7574 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
7675 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
7776 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;