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:
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);
+ }
}