diff options
Diffstat (limited to 'src/passes/InstrumentLocals.cpp')
-rw-r--r-- | src/passes/InstrumentLocals.cpp | 81 |
1 files changed, 42 insertions, 39 deletions
diff --git a/src/passes/InstrumentLocals.cpp b/src/passes/InstrumentLocals.cpp index 81494463f..004bfba74 100644 --- a/src/passes/InstrumentLocals.cpp +++ b/src/passes/InstrumentLocals.cpp @@ -135,45 +135,48 @@ struct InstrumentLocals : public WalkerPass<PostWalker<InstrumentLocals>> { Builder builder(*getModule()); Name import; auto type = curr->value->type; - if (type.isFunction()) { - import = set_funcref; - } else { - TODO_SINGLE_COMPOUND(curr->value->type); - switch (type.getBasic()) { - case Type::i32: - import = set_i32; - break; - case Type::i64: - return; // TODO - case Type::f32: - import = set_f32; - break; - case Type::f64: - import = set_f64; - break; - case Type::v128: - import = set_v128; - break; - case Type::externref: - import = set_externref; - break; - case Type::exnref: - import = set_exnref; - break; - case Type::anyref: - import = set_anyref; - break; - case Type::eqref: - import = set_eqref; - break; - case Type::i31ref: - import = set_i31ref; - break; - case Type::unreachable: - return; // nothing to do here - default: - WASM_UNREACHABLE("unexpected type"); - } + if (type.isFunction() && type != Type::funcref) { + // FIXME: support typed function references + return; + } + TODO_SINGLE_COMPOUND(curr->value->type); + switch (type.getBasic()) { + case Type::i32: + import = set_i32; + break; + case Type::i64: + return; // TODO + case Type::f32: + import = set_f32; + break; + case Type::f64: + import = set_f64; + break; + case Type::v128: + import = set_v128; + break; + case Type::funcref: + import = set_funcref; + break; + case Type::externref: + import = set_externref; + break; + case Type::exnref: + import = set_exnref; + break; + case Type::anyref: + import = set_anyref; + break; + case Type::eqref: + import = set_eqref; + break; + case Type::i31ref: + import = set_i31ref; + break; + case Type::unreachable: + return; // nothing to do here + default: + WASM_UNREACHABLE("unexpected type"); } curr->value = builder.makeCall(import, {builder.makeConst(int32_t(id++)), |