aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormlugg <mlugg@mlugg.co.uk>2024-03-12 20:25:54 +0000
committermlugg <mlugg@mlugg.co.uk>2024-03-14 07:40:08 +0000
commit347196f905c083047fdc0a3b72656f1867973a13 (patch)
tree70f7ba3c98fc67589bf26decc445e308b041adcc /src
parent075c103332effdac80d2c00e59f06ee0fea95b49 (diff)
downloadzig-347196f905c083047fdc0a3b72656f1867973a13.tar.gz
zig-347196f905c083047fdc0a3b72656f1867973a13.zip
Zcu: perform orphan checks against uncoerced function
Diffstat (limited to 'src')
-rw-r--r--src/InternPool.zig2
-rw-r--r--src/Module.zig9
2 files changed, 8 insertions, 3 deletions
diff --git a/src/InternPool.zig b/src/InternPool.zig
index 2367edff45..832927071e 100644
--- a/src/InternPool.zig
+++ b/src/InternPool.zig
@@ -9223,7 +9223,7 @@ pub fn funcTypeParamsLen(ip: *const InternPool, i: Index) u32 {
return ip.extra.items[start + std.meta.fieldIndex(Tag.TypeFunction, "params_len").?];
}
-fn unwrapCoercedFunc(ip: *const InternPool, i: Index) Index {
+pub fn unwrapCoercedFunc(ip: *const InternPool, i: Index) Index {
const tags = ip.items.items(.tag);
return switch (tags[@intFromEnum(i)]) {
.func_coerced => {
diff --git a/src/Module.zig b/src/Module.zig
index 8d0a8fe328..95b96b3605 100644
--- a/src/Module.zig
+++ b/src/Module.zig
@@ -3113,13 +3113,18 @@ pub fn ensureDeclAnalyzed(mod: *Module, decl_index: Decl.Index) SemaError!void {
}
}
-pub fn ensureFuncBodyAnalyzed(zcu: *Zcu, func_index: InternPool.Index) SemaError!void {
+pub fn ensureFuncBodyAnalyzed(zcu: *Zcu, maybe_coerced_func_index: InternPool.Index) SemaError!void {
const tracy = trace(@src());
defer tracy.end();
const gpa = zcu.gpa;
const ip = &zcu.intern_pool;
- const func = zcu.funcInfo(func_index);
+
+ // We only care about the uncoerced function.
+ // We need to do this for the "orphaned function" check below to be valid.
+ const func_index = ip.unwrapCoercedFunc(maybe_coerced_func_index);
+
+ const func = zcu.funcInfo(maybe_coerced_func_index);
const decl_index = func.owner_decl;
const decl = zcu.declPtr(decl_index);