mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 22:04:21 +00:00
wasm: support calling alias'd function pointers
When lowering a decl value we verify whether its owner decl index equals to the decl index of the decl being lowered. When this is not the case, we are lowering an alias. So instead, we will now lower the owner decl instead and call its symbol to ensure its type is being correctly generated.
This commit is contained in:
parent
1cfad29f10
commit
e3db210cf1
2 changed files with 12 additions and 5 deletions
|
|
@ -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 };
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue