aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/llvm.zig
diff options
context:
space:
mode:
authorkcbanner <kcbanner@gmail.com>2024-10-20 16:30:12 -0400
committerkcbanner <kcbanner@gmail.com>2024-10-22 12:41:35 -0400
commita4690ecb1fc8a9ac5f7dfccfdf9f67c7a74e1569 (patch)
treec957ba83ecc602392fc4275a53ef9b958b5dbdf1 /src/codegen/llvm.zig
parentee2575724597f214f8f4653f4a4ec1d2a6d97b8b (diff)
downloadzig-a4690ecb1fc8a9ac5f7dfccfdf9f67c7a74e1569.tar.gz
zig-a4690ecb1fc8a9ac5f7dfccfdf9f67c7a74e1569.zip
Cause a compilation error to occur if using @extern with is_dll_import in a comptime scope.
Add a note about thread local / dll import being the cause.
Diffstat (limited to 'src/codegen/llvm.zig')
-rw-r--r--src/codegen/llvm.zig9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig
index a2c2f98a21..2657d2e799 100644
--- a/src/codegen/llvm.zig
+++ b/src/codegen/llvm.zig
@@ -3237,10 +3237,10 @@ pub const Object = struct {
const ip = &zcu.intern_pool;
const nav = ip.getNav(nav_index);
const resolved = nav.status.resolved;
- const is_extern, const is_threadlocal, const is_weak_linkage = switch (ip.indexToKey(resolved.val)) {
- .variable => |variable| .{ false, variable.is_threadlocal, variable.is_weak_linkage },
- .@"extern" => |@"extern"| .{ true, @"extern".is_threadlocal, @"extern".is_weak_linkage },
- else => .{ false, false, false },
+ const is_extern, const is_threadlocal, const is_weak_linkage, const is_dll_import = switch (ip.indexToKey(resolved.val)) {
+ .variable => |variable| .{ false, variable.is_threadlocal, variable.is_weak_linkage, false },
+ .@"extern" => |@"extern"| .{ true, @"extern".is_threadlocal, @"extern".is_weak_linkage, @"extern".is_dll_import },
+ else => .{ false, false, false, false },
};
const variable_index = try o.builder.addVariable(
@@ -3257,6 +3257,7 @@ pub const Object = struct {
if (is_threadlocal and !zcu.navFileScope(nav_index).mod.single_threaded)
variable_index.setThreadLocal(.generaldynamic, &o.builder);
if (is_weak_linkage) variable_index.setLinkage(.extern_weak, &o.builder);
+ if (is_dll_import) variable_index.setDllStorageClass(.dllimport, &o.builder);
} else {
variable_index.setLinkage(.internal, &o.builder);
variable_index.setUnnamedAddr(.unnamed_addr, &o.builder);