aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/wasm/CodeGen.zig11
-rw-r--r--test/behavior.zig6
2 files changed, 12 insertions, 5 deletions
diff --git a/src/arch/wasm/CodeGen.zig b/src/arch/wasm/CodeGen.zig
index 9a19ca439c..aa44dc2bc8 100644
--- a/src/arch/wasm/CodeGen.zig
+++ b/src/arch/wasm/CodeGen.zig
@@ -3008,6 +3008,17 @@ fn lowerDeclRefValue(func: *CodeGen, tv: TypedValue, decl_index: Module.Decl.Ind
}
const decl = mod.declPtr(decl_index);
+ // check if decl is an alias to a function, in which case we
+ // want to lower the actual decl, rather than the alias itself.
+ if (decl.val.getFunction(mod)) |func_val| {
+ if (func_val.owner_decl != decl_index) {
+ return func.lowerDeclRefValue(tv, func_val.owner_decl, offset);
+ }
+ } else if (decl.val.getExternFunc(mod)) |func_val| {
+ if (func_val.decl != decl_index) {
+ return func.lowerDeclRefValue(tv, func_val.decl, offset);
+ }
+ }
if (decl.ty.zigTypeTag(mod) != .Fn and !decl.ty.hasRuntimeBitsIgnoreComptime(mod)) {
return WValue{ .imm32 = 0xaaaaaaaa };
}
diff --git a/test/behavior.zig b/test/behavior.zig
index bdc3f30ede..017b5b4824 100644
--- a/test/behavior.zig
+++ b/test/behavior.zig
@@ -158,6 +158,7 @@ test {
_ = @import("behavior/enum.zig");
_ = @import("behavior/error.zig");
_ = @import("behavior/eval.zig");
+ _ = @import("behavior/export_self_referential_type_info.zig");
_ = @import("behavior/field_parent_ptr.zig");
_ = @import("behavior/floatop.zig");
_ = @import("behavior/fn.zig");
@@ -241,7 +242,6 @@ test {
if (builtin.zig_backend != .stage2_arm and
builtin.zig_backend != .stage2_x86_64 and
builtin.zig_backend != .stage2_aarch64 and
- builtin.zig_backend != .stage2_wasm and
builtin.zig_backend != .stage2_c and
builtin.zig_backend != .stage2_spirv64)
{
@@ -250,8 +250,4 @@ test {
_ = @import("behavior/bugs/14198.zig");
_ = @import("behavior/export.zig");
}
-
- if (builtin.zig_backend != .stage2_wasm) {
- _ = @import("behavior/export_self_referential_type_info.zig");
- }
}