aboutsummaryrefslogtreecommitdiff
path: root/src/Compilation.zig
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2025-08-25 06:45:00 +0200
committerAlex Rønne Petersen <alex@alexrp.com>2025-08-25 06:45:31 +0200
commit837e56431232e5257e988227dff45be6f4dececf (patch)
tree35595bac8480af82bf6c0f157a1f41011207e3f0 /src/Compilation.zig
parentbed8171d4e41a2bb6759c96076f957920e039bfd (diff)
downloadzig-837e56431232e5257e988227dff45be6f4dececf.tar.gz
zig-837e56431232e5257e988227dff45be6f4dececf.zip
Compilation: avoid ZCU strategy for ubsan-rt in Windows DLLs
Diffstat (limited to 'src/Compilation.zig')
-rw-r--r--src/Compilation.zig9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/Compilation.zig b/src/Compilation.zig
index db15eee954..20bd820d10 100644
--- a/src/Compilation.zig
+++ b/src/Compilation.zig
@@ -2048,7 +2048,14 @@ pub fn create(gpa: Allocator, arena: Allocator, diag: *CreateDiagnostic, options
break :s .none; // only LLD can handle ubsan-rt for this target
} else true,
};
- if (have_zcu and (!need_llvm or use_llvm)) break :s .zcu;
+ if (have_zcu and (!need_llvm or use_llvm)) {
+ // ubsan-rt's exports use hidden visibility. If we're building a Windows DLL and
+ // exported functions are going to be dllexported, LLVM will complain that
+ // dllexported functions must use default or protected visibility. So we can't use
+ // the ZCU strategy in this case.
+ if (options.config.dll_export_fns) break :s .lib;
+ break :s .zcu;
+ }
if (need_llvm and !build_options.have_llvm) break :s .none; // impossible to build without llvm
if (is_exe_or_dyn_lib) break :s .lib;
break :s .obj;