zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit cf822c6ddd7e56b248ab217d38907aad38935b2f (tree)
parent f5b6019646fe76678c993596130f03116989eb12
Author: Matt Knight <mattnite@protonmail.com>
Date:   Sun, 25 Dec 2022 17:19:50 -0800

@export() with linksection option (#14035)


Diffstat:
Msrc/Sema.zig | 15++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/Sema.zig b/src/Sema.zig @@ -20328,8 +20328,13 @@ fn resolveExportOptions( const linkage_val = try sema.resolveConstValue(block, linkage_src, linkage_operand, "linkage of exported value must be comptime-known"); const linkage = linkage_val.toEnum(std.builtin.GlobalLinkage); - const section = try sema.fieldVal(block, src, options, "section", section_src); - const section_val = try sema.resolveConstValue(block, section_src, section, "linksection of exported value must be comptime-known"); + const section_operand = try sema.fieldVal(block, src, options, "section", section_src); + const section_opt_val = try sema.resolveConstValue(block, section_src, section_operand, "linksection of exported value must be comptime-known"); + const section_ty = Type.initTag(.const_slice_u8); + const section = if (section_opt_val.optionalValue()) |section_val| + try section_val.toAllocatedBytes(section_ty, sema.arena, sema.mod) + else + null; const visibility_operand = try sema.fieldVal(block, src, options, "visibility", visibility_src); const visibility_val = try sema.resolveConstValue(block, visibility_src, visibility_operand, "visibility of exported value must be comptime-known"); @@ -20345,14 +20350,10 @@ fn resolveExportOptions( }); } - if (!section_val.isNull()) { - return sema.fail(block, section_src, "TODO: implement exporting with linksection", .{}); - } - return std.builtin.ExportOptions{ .name = name, .linkage = linkage, - .section = null, // TODO + .section = section, .visibility = visibility, }; }