diff options
Diffstat (limited to 'src/passes/InstrumentLocals.cpp')
-rw-r--r-- | src/passes/InstrumentLocals.cpp | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/src/passes/InstrumentLocals.cpp b/src/passes/InstrumentLocals.cpp index ee288c103..b1ce5f05e 100644 --- a/src/passes/InstrumentLocals.cpp +++ b/src/passes/InstrumentLocals.cpp @@ -59,6 +59,7 @@ Name get_f64("get_f64"); Name get_funcref("get_funcref"); Name get_externref("get_externref"); Name get_exnref("get_exnref"); +Name get_anyref("get_anyref"); Name get_v128("get_v128"); Name set_i32("set_i32"); @@ -68,6 +69,7 @@ Name set_f64("set_f64"); Name set_funcref("set_funcref"); Name set_externref("set_externref"); Name set_exnref("set_exnref"); +Name set_anyref("set_anyref"); Name set_v128("set_v128"); struct InstrumentLocals : public WalkerPass<PostWalker<InstrumentLocals>> { @@ -99,6 +101,9 @@ struct InstrumentLocals : public WalkerPass<PostWalker<InstrumentLocals>> { case Type::exnref: import = get_exnref; break; + case Type::anyref: + import = get_anyref; + break; case Type::none: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); @@ -145,6 +150,9 @@ struct InstrumentLocals : public WalkerPass<PostWalker<InstrumentLocals>> { case Type::exnref: import = set_exnref; break; + case Type::anyref: + import = set_anyref; + break; case Type::unreachable: return; // nothing to do here case Type::none: @@ -184,12 +192,18 @@ struct InstrumentLocals : public WalkerPass<PostWalker<InstrumentLocals>> { set_externref, {Type::i32, Type::i32, Type::externref}, Type::externref); - } - if (curr->features.hasExceptionHandling()) { - addImport( - curr, get_exnref, {Type::i32, Type::i32, Type::exnref}, Type::exnref); - addImport( - curr, set_exnref, {Type::i32, Type::i32, Type::exnref}, Type::exnref); + if (curr->features.hasExceptionHandling()) { + addImport( + curr, get_exnref, {Type::i32, Type::i32, Type::exnref}, Type::exnref); + addImport( + curr, set_exnref, {Type::i32, Type::i32, Type::exnref}, Type::exnref); + } + if (curr->features.hasAnyref()) { + addImport( + curr, get_anyref, {Type::i32, Type::i32, Type::anyref}, Type::anyref); + addImport( + curr, set_anyref, {Type::i32, Type::i32, Type::anyref}, Type::anyref); + } } if (curr->features.hasSIMD()) { addImport(curr, get_v128, {Type::i32, Type::i32, Type::v128}, Type::v128); |