aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
authorMatthew Lugg <mlugg@mlugg.co.uk>2024-12-25 02:58:27 +0000
committerGitHub <noreply@github.com>2024-12-25 02:58:27 +0000
commit497592c9b45a94fb7b6028bf45b80f183e395a9b (patch)
tree467873c408750cb4223f3ccf31775e42ec9fbd5c /src/codegen.zig
parentaf5e731729592af4a5716edd3b1e03264d66ea46 (diff)
parent3afda4322c34dedc2319701fdfac3505c8d311e9 (diff)
downloadzig-497592c9b45a94fb7b6028bf45b80f183e395a9b.tar.gz
zig-497592c9b45a94fb7b6028bf45b80f183e395a9b.zip
Merge pull request #22303 from mlugg/131-new
compiler: analyze type and value of global declarations separately
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index 2b179979f0..7b607f13f9 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -817,7 +817,7 @@ fn genNavRef(
pt: Zcu.PerThread,
src_loc: Zcu.LazySrcLoc,
val: Value,
- ref_nav_index: InternPool.Nav.Index,
+ nav_index: InternPool.Nav.Index,
target: std.Target,
) CodeGenError!GenResult {
const zcu = pt.zcu;
@@ -851,14 +851,15 @@ fn genNavRef(
}
}
- const nav_index, const is_extern, const lib_name, const is_threadlocal = switch (ip.indexToKey(zcu.navValue(ref_nav_index).toIntern())) {
- .func => |func| .{ func.owner_nav, false, .none, false },
- .variable => |variable| .{ variable.owner_nav, false, variable.lib_name, variable.is_threadlocal },
- .@"extern" => |@"extern"| .{ @"extern".owner_nav, true, @"extern".lib_name, @"extern".is_threadlocal },
- else => .{ ref_nav_index, false, .none, false },
- };
+ const nav = ip.getNav(nav_index);
+
+ const is_extern, const lib_name, const is_threadlocal = if (nav.getExtern(ip)) |e|
+ .{ true, e.lib_name, e.is_threadlocal }
+ else
+ .{ false, .none, nav.isThreadlocal(ip) };
+
const single_threaded = zcu.navFileScope(nav_index).mod.single_threaded;
- const name = ip.getNav(nav_index).name;
+ const name = nav.name;
if (lf.cast(.elf)) |elf_file| {
const zo = elf_file.zigObjectPtr().?;
if (is_extern) {