diff options
author | Sergey Pepyakin <s.pepyakin@gmail.com> | 2017-09-14 19:12:56 +0300 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2017-09-14 09:12:56 -0700 |
commit | 9f4e3288c17a48186b959648fedb93b9a226ef9f (patch) | |
tree | 8c25eed9ed13b89b704581980d01d5cb4f240af0 | |
parent | 5d27b204c39d8adc8f328fbdab1837493804ec71 (diff) | |
download | binaryen-9f4e3288c17a48186b959648fedb93b9a226ef9f.tar.gz binaryen-9f4e3288c17a48186b959648fedb93b9a226ef9f.tar.bz2 binaryen-9f4e3288c17a48186b959648fedb93b9a226ef9f.zip |
Add missing finalize() call to C API for call_indirect (#1184)
-rw-r--r-- | src/binaryen-c.cpp | 1 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.c | 14 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.txt | 10 |
3 files changed, 25 insertions, 0 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index 7cbd22a69..038431782 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -475,6 +475,7 @@ BinaryenExpressionRef BinaryenCallIndirect(BinaryenModuleRef module, BinaryenExp } ret->fullType = type; ret->type = wasm->getFunctionType(ret->fullType)->result; + ret->finalize(); return static_cast<Expression*>(ret); } BinaryenExpressionRef BinaryenGetLocal(BinaryenModuleRef module, BinaryenIndex index, BinaryenType type) { diff --git a/test/example/c-api-kitchen-sink.c b/test/example/c-api-kitchen-sink.c index 726dc9ce8..5b5b012e1 100644 --- a/test/example/c-api-kitchen-sink.c +++ b/test/example/c-api-kitchen-sink.c @@ -278,6 +278,19 @@ void test_core() { BinaryenModuleDispose(module); } +void test_unreachable() { + BinaryenModuleRef module = BinaryenModuleCreate(); + BinaryenFunctionTypeRef i = BinaryenAddFunctionType(module, "i", BinaryenInt32(), NULL, 0); + BinaryenFunctionTypeRef I = BinaryenAddFunctionType(module, "I", BinaryenInt64(), NULL, 0); + + BinaryenExpressionRef body = BinaryenCallIndirect(module, BinaryenUnreachable(module), NULL, 0, "I"); + BinaryenFunctionRef fn = BinaryenAddFunction(module, "unreachable-fn", i, NULL, 0, body); + + assert(BinaryenModuleValidate(module)); + BinaryenModulePrint(module); + BinaryenModuleDispose(module); +} + BinaryenExpressionRef makeCallCheck(BinaryenModuleRef module, int x) { BinaryenExpressionRef callOperands[] = { makeInt32(module, x) }; return BinaryenCallImport(module, "check", callOperands, 1, BinaryenNone()); @@ -556,6 +569,7 @@ void test_tracing() { int main() { test_types(); test_core(); + test_unreachable(); test_relooper(); test_binaries(); test_interpret(); diff --git a/test/example/c-api-kitchen-sink.txt b/test/example/c-api-kitchen-sink.txt index d366a3c7f..16d48ea5b 100644 --- a/test/example/c-api-kitchen-sink.txt +++ b/test/example/c-api-kitchen-sink.txt @@ -536,6 +536,16 @@ BinaryenFloat64: 4 (nop) ) ) +(module + (type $i (func (result i32))) + (type $I (func (result i64))) + (memory $0 0) + (func $unreachable-fn (type $i) (result i32) + (call_indirect $I + (unreachable) + ) + ) +) raw: (module (type $v (func)) |