zig

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

commit 381e23146809b90de5a32f0fe1548c00b06e8ab2 (tree)
parent 13f31bb3c319813cbc3ed461ad9a97ec1c379f11
Author: Alex Rønne Petersen <alex@alexrp.com>
Date:   Thu, 12 Feb 2026 08:36:15 +0100

Merge pull request 'fix(codegen/llvm): teach llvm to not `dllexport` hidden exports' (#31180) from GasInfinity/zig:fix-hidden-dllexport into master

Reviewed-on: https://codeberg.org/ziglang/zig/pulls/31180
Reviewed-by: Alex Rønne Petersen <alex@alexrp.com>

Diffstat:
Msrc/codegen/llvm.zig | 4++--
Mtest/standalone/shared_library/build.zig | 60++++++++++++++++++++++++++++++++++--------------------------
2 files changed, 36 insertions(+), 28 deletions(-)

diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig @@ -1735,7 +1735,7 @@ pub const Object = struct { } global_index.setUnnamedAddr(.default, &o.builder); - if (comp.config.dll_export_fns) + if (comp.config.dll_export_fns and first_export.opts.visibility != .hidden) global_index.setDllStorageClass(.dllexport, &o.builder); global_index.setLinkage(switch (first_export.opts.linkage) { .internal => unreachable, @@ -1794,7 +1794,7 @@ pub const Object = struct { const alias_global_index = alias_index.ptrConst(&o.builder).global; alias_global_index.setUnnamedAddr(.default, &o.builder); - if (comp.config.dll_export_fns) + if (comp.config.dll_export_fns and first_export.opts.visibility != .hidden) alias_global_index.setDllStorageClass(.dllexport, &o.builder); alias_global_index.setLinkage(switch (first_export.opts.linkage) { .internal => unreachable, diff --git a/test/standalone/shared_library/build.zig b/test/standalone/shared_library/build.zig @@ -6,32 +6,40 @@ pub fn build(b: *std.Build) void { const optimize: std.builtin.OptimizeMode = .Debug; const target = b.graph.host; - const lib = b.addLibrary(.{ - .linkage = .dynamic, - .name = "mathtest", - .version = .{ .major = 1, .minor = 0, .patch = 0 }, - .root_module = b.createModule(.{ - .root_source_file = b.path("mathtest.zig"), - .target = target, - .optimize = optimize, - }), - }); - const exe = b.addExecutable(.{ - .name = "test", - .root_module = b.createModule(.{ - .root_source_file = null, - .target = target, - .optimize = optimize, - .link_libc = true, - }), - }); - exe.root_module.addCSourceFile(.{ - .file = b.path("test.c"), - .flags = &[_][]const u8{"-std=c99"}, - }); - exe.root_module.linkLibrary(lib); + const exe_names: []const []const u8 = &.{ "test", "test-dync" }; + const lib_names: []const []const u8 = &.{ "mathtest", "mathtest-dync" }; + const lib_link_libc: []const bool = &.{ false, true }; - const run_cmd = b.addRunArtifact(exe); - test_step.dependOn(&run_cmd.step); + for (exe_names, lib_names, lib_link_libc) |exe_name, lib_name, dyn_libc| { + const lib = b.addLibrary(.{ + .linkage = .dynamic, + .name = lib_name, + .version = .{ .major = 1, .minor = 0, .patch = 0 }, + .root_module = b.createModule(.{ + .root_source_file = b.path("mathtest.zig"), + .target = target, + .optimize = optimize, + .link_libc = dyn_libc, + }), + }); + + const exe = b.addExecutable(.{ + .name = exe_name, + .root_module = b.createModule(.{ + .root_source_file = null, + .target = target, + .optimize = optimize, + .link_libc = true, + }), + }); + exe.root_module.addCSourceFile(.{ + .file = b.path("test.c"), + .flags = &[_][]const u8{"-std=c99"}, + }); + exe.root_module.linkLibrary(lib); + + const run_cmd = b.addRunArtifact(exe); + test_step.dependOn(&run_cmd.step); + } }