From ee2575724597f214f8f4653f4a4ec1d2a6d97b8b Mon Sep 17 00:00:00 2001 From: kcbanner Date: Sat, 19 Oct 2024 18:15:39 -0400 Subject: Add support for specifying `dll_storage_class` in @extern --- src/codegen/llvm.zig | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src/codegen/llvm.zig') diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 4b4ced9a6f..a2c2f98a21 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -4782,10 +4782,10 @@ pub const NavGen = struct { const nav = ip.getNav(nav_index); const resolved = nav.status.resolved; - const is_extern, const lib_name, const is_threadlocal, const is_weak_linkage, const is_const, const init_val, const owner_nav = switch (ip.indexToKey(resolved.val)) { - .variable => |variable| .{ false, variable.lib_name, variable.is_threadlocal, variable.is_weak_linkage, false, variable.init, variable.owner_nav }, - .@"extern" => |@"extern"| .{ true, @"extern".lib_name, @"extern".is_threadlocal, @"extern".is_weak_linkage, @"extern".is_const, .none, @"extern".owner_nav }, - else => .{ false, .none, false, false, true, resolved.val, nav_index }, + const is_extern, const lib_name, const is_threadlocal, const is_weak_linkage, const is_dll_import, const is_const, const init_val, const owner_nav = switch (ip.indexToKey(resolved.val)) { + .variable => |variable| .{ false, variable.lib_name, variable.is_threadlocal, variable.is_weak_linkage, false, false, variable.init, variable.owner_nav }, + .@"extern" => |@"extern"| .{ true, @"extern".lib_name, @"extern".is_threadlocal, @"extern".is_weak_linkage, @"extern".is_dll_import, @"extern".is_const, .none, @"extern".owner_nav }, + else => .{ false, .none, false, false, false, true, resolved.val, nav_index }, }; const ty = Type.fromInterned(nav.typeOf(ip)); @@ -4860,8 +4860,11 @@ pub const NavGen = struct { try global_index.rename(decl_name, &o.builder); global_index.setLinkage(.external, &o.builder); global_index.setUnnamedAddr(.default, &o.builder); - if (zcu.comp.config.dll_export_fns) + if (is_dll_import) { + global_index.setDllStorageClass(.dllimport, &o.builder); + } else if (zcu.comp.config.dll_export_fns) { global_index.setDllStorageClass(.default, &o.builder); + } if (is_weak_linkage) global_index.setLinkage(.extern_weak, &o.builder); } -- cgit v1.2.3