summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/binary-reader-ir.cc12
-rw-r--r--src/binary-reader-logging.cc15
-rw-r--r--src/binary-reader-logging.h2
-rw-r--r--src/binary-reader-nop.h2
-rw-r--r--src/binary-reader.cc20
-rw-r--r--src/binary-reader.h2
-rw-r--r--src/interp/binary-reader-interp.cc8
-rw-r--r--src/ir.h14
-rw-r--r--src/wast-parser.cc26
-rw-r--r--src/wast-parser.h2
-rw-r--r--test/binary/bad-function-missing-end.txt17
-rw-r--r--test/spec/binary.txt176
-rw-r--r--test/spec/exception-handling/binary.txt176
-rw-r--r--test/spec/multi-memory/binary.txt156
m---------third_party/testsuite0
15 files changed, 344 insertions, 284 deletions
diff --git a/src/binary-reader-ir.cc b/src/binary-reader-ir.cc
index bc2fc2dd..3722e4bd 100644
--- a/src/binary-reader-ir.cc
+++ b/src/binary-reader-ir.cc
@@ -203,10 +203,12 @@ class BinaryReaderIR : public BinaryReaderNop {
Result EndFunctionBody(Index index) override;
Result OnSimdLaneOpExpr(Opcode opcode, uint64_t value) override;
Result OnSimdLoadLaneExpr(Opcode opcode,
+ Index memidx,
Address alignment_log2,
Address offset,
uint64_t value) override;
Result OnSimdStoreLaneExpr(Opcode opcode,
+ Index memidx,
Address alignment_log2,
Address offset,
uint64_t value) override;
@@ -1099,19 +1101,21 @@ Result BinaryReaderIR::OnSimdLaneOpExpr(Opcode opcode, uint64_t value) {
}
Result BinaryReaderIR::OnSimdLoadLaneExpr(Opcode opcode,
+ Index memidx,
Address alignment_log2,
Address offset,
uint64_t value) {
- return AppendExpr(
- MakeUnique<SimdLoadLaneExpr>(opcode, 1 << alignment_log2, offset, value));
+ return AppendExpr(MakeUnique<SimdLoadLaneExpr>(
+ opcode, Var(memidx), 1 << alignment_log2, offset, value));
}
Result BinaryReaderIR::OnSimdStoreLaneExpr(Opcode opcode,
+ Index memidx,
Address alignment_log2,
Address offset,
uint64_t value) {
- return AppendExpr(MakeUnique<SimdStoreLaneExpr>(opcode, 1 << alignment_log2,
- offset, value));
+ return AppendExpr(MakeUnique<SimdStoreLaneExpr>(
+ opcode, Var(memidx), 1 << alignment_log2, offset, value));
}
Result BinaryReaderIR::OnSimdShuffleOpExpr(Opcode opcode, v128 value) {
diff --git a/src/binary-reader-logging.cc b/src/binary-reader-logging.cc
index 7e103540..459fca24 100644
--- a/src/binary-reader-logging.cc
+++ b/src/binary-reader-logging.cc
@@ -717,12 +717,15 @@ Result BinaryReaderLogging::OnComdatEntry(ComdatType kind, Index index) {
}
#define DEFINE_SIMD_LOAD_STORE_LANE_OPCODE(name) \
- Result BinaryReaderLogging::name(Opcode opcode, Address alignment_log2, \
- Address offset, uint64_t value) { \
- LOGF(#name "(opcode: \"%s\" (%u), align log2: %" PRIaddress \
- ", offset: %" PRIaddress ", lane: %" PRIu64 ")\n", \
- opcode.GetName(), opcode.GetCode(), alignment_log2, offset, value); \
- return reader_->name(opcode, alignment_log2, offset, value); \
+ Result BinaryReaderLogging::name(Opcode opcode, Index memidx, \
+ Address alignment_log2, Address offset, \
+ uint64_t value) { \
+ LOGF(#name "(opcode: \"%s\" (%u), memidx: %" PRIindex \
+ ", align log2: %" PRIaddress ", offset: %" PRIaddress \
+ ", lane: %" PRIu64 ")\n", \
+ opcode.GetName(), opcode.GetCode(), memidx, alignment_log2, offset, \
+ value); \
+ return reader_->name(opcode, memidx, alignment_log2, offset, value); \
}
#define DEFINE0(name) \
diff --git a/src/binary-reader-logging.h b/src/binary-reader-logging.h
index c722181b..1c2f302a 100644
--- a/src/binary-reader-logging.h
+++ b/src/binary-reader-logging.h
@@ -235,10 +235,12 @@ class BinaryReaderLogging : public BinaryReaderDelegate {
Result EndCodeSection() override;
Result OnSimdLaneOpExpr(Opcode opcode, uint64_t value) override;
Result OnSimdLoadLaneExpr(Opcode opcode,
+ Index memidx,
Address alignment_log2,
Address offset,
uint64_t value) override;
Result OnSimdStoreLaneExpr(Opcode opcode,
+ Index memidx,
Address alignment_log2,
Address offset,
uint64_t value) override;
diff --git a/src/binary-reader-nop.h b/src/binary-reader-nop.h
index 1acf1c24..d87ec922 100644
--- a/src/binary-reader-nop.h
+++ b/src/binary-reader-nop.h
@@ -315,12 +315,14 @@ class BinaryReaderNop : public BinaryReaderDelegate {
return Result::Ok;
}
Result OnSimdLoadLaneExpr(Opcode opcode,
+ Index memidx,
Address alignment_log2,
Address offset,
uint64_t value) override {
return Result::Ok;
}
Result OnSimdStoreLaneExpr(Opcode opcode,
+ Index memidx,
Address alignment_log2,
Address offset,
uint64_t value) override {
diff --git a/src/binary-reader.cc b/src/binary-reader.cc
index 1d75ad07..c584b018 100644
--- a/src/binary-reader.cc
+++ b/src/binary-reader.cc
@@ -1328,12 +1328,20 @@ Result BinaryReader::ReadInstructions(bool stop_on_end,
case Opcode::V128Load64Lane: {
Address alignment_log2;
CHECK_RESULT(ReadAlignment(&alignment_log2, "load alignment"));
+ Index memidx = 0;
+ if (alignment_log2 >> 6) {
+ ERROR_IF(!options_.features.multi_memory_enabled(),
+ "multi_memory not allowed");
+ CHECK_RESULT(ReadMemidx(&memidx, "store memidx"));
+ alignment_log2 = alignment_log2 & ((1 << 6) - 1);
+ }
Address offset;
CHECK_RESULT(ReadAddress(&offset, 0, "load offset"));
uint8_t lane_val;
CHECK_RESULT(ReadU8(&lane_val, "Lane idx"));
- CALLBACK(OnSimdLoadLaneExpr, opcode, alignment_log2, offset, lane_val);
+ CALLBACK(OnSimdLoadLaneExpr, opcode, memidx, alignment_log2, offset,
+ lane_val);
CALLBACK(OnOpcodeUint32Uint32Uint32, alignment_log2, offset, lane_val);
break;
}
@@ -1343,12 +1351,20 @@ Result BinaryReader::ReadInstructions(bool stop_on_end,
case Opcode::V128Store64Lane: {
Address alignment_log2;
CHECK_RESULT(ReadAlignment(&alignment_log2, "load alignment"));
+ Index memidx = 0;
+ if (alignment_log2 >> 6) {
+ ERROR_IF(!options_.features.multi_memory_enabled(),
+ "multi_memory not allowed");
+ CHECK_RESULT(ReadMemidx(&memidx, "store memidx"));
+ alignment_log2 = alignment_log2 & ((1 << 6) - 1);
+ }
Address offset;
CHECK_RESULT(ReadAddress(&offset, 0, "load offset"));
uint8_t lane_val;
CHECK_RESULT(ReadU8(&lane_val, "Lane idx"));
- CALLBACK(OnSimdStoreLaneExpr, opcode, alignment_log2, offset, lane_val);
+ CALLBACK(OnSimdStoreLaneExpr, opcode, memidx, alignment_log2, offset,
+ lane_val);
CALLBACK(OnOpcodeUint32Uint32Uint32, alignment_log2, offset, lane_val);
break;
}
diff --git a/src/binary-reader.h b/src/binary-reader.h
index b38e6c9c..10602e7c 100644
--- a/src/binary-reader.h
+++ b/src/binary-reader.h
@@ -299,10 +299,12 @@ class BinaryReaderDelegate {
virtual Result OnSimdLaneOpExpr(Opcode opcode, uint64_t value) = 0;
virtual Result OnSimdShuffleOpExpr(Opcode opcode, v128 value) = 0;
virtual Result OnSimdLoadLaneExpr(Opcode opcode,
+ Index memidx,
Address alignment_log2,
Address offset,
uint64_t value) = 0;
virtual Result OnSimdStoreLaneExpr(Opcode opcode,
+ Index memidx,
Address alignment_log2,
Address offset,
uint64_t value) = 0;
diff --git a/src/interp/binary-reader-interp.cc b/src/interp/binary-reader-interp.cc
index cf4436f6..25f4d84f 100644
--- a/src/interp/binary-reader-interp.cc
+++ b/src/interp/binary-reader-interp.cc
@@ -238,10 +238,12 @@ class BinaryReaderInterp : public BinaryReaderNop {
Result EndFunctionBody(Index index) override;
Result OnSimdLaneOpExpr(Opcode opcode, uint64_t value) override;
Result OnSimdLoadLaneExpr(Opcode opcode,
+ Index memidx,
Address alignment_log2,
Address offset,
uint64_t value) override;
Result OnSimdStoreLaneExpr(Opcode opcode,
+ Index memidx,
Address alignment_log2,
Address offset,
uint64_t value) override;
@@ -901,22 +903,24 @@ uint32_t GetAlignment(Address alignment_log2) {
}
Result BinaryReaderInterp::OnSimdLoadLaneExpr(Opcode opcode,
+ Index memidx,
Address alignment_log2,
Address offset,
uint64_t value) {
CHECK_RESULT(validator_.OnSimdLoadLane(GetLocation(), opcode,
GetAlignment(alignment_log2), value));
- istream_.Emit(opcode, kMemoryIndex0, offset, static_cast<u8>(value));
+ istream_.Emit(opcode, memidx, offset, static_cast<u8>(value));
return Result::Ok;
}
Result BinaryReaderInterp::OnSimdStoreLaneExpr(Opcode opcode,
+ Index memidx,
Address alignment_log2,
Address offset,
uint64_t value) {
CHECK_RESULT(validator_.OnSimdStoreLane(GetLocation(), opcode,
GetAlignment(alignment_log2), value));
- istream_.Emit(opcode, kMemoryIndex0, offset, static_cast<u8>(value));
+ istream_.Emit(opcode, memidx, offset, static_cast<u8>(value));
return Result::Ok;
}
diff --git a/src/ir.h b/src/ir.h
index d69100dc..eee59a32 100644
--- a/src/ir.h
+++ b/src/ir.h
@@ -501,35 +501,41 @@ class SimdLaneOpExpr : public ExprMixin<ExprType::SimdLaneOp> {
uint64_t val;
};
-class SimdLoadLaneExpr : public OpcodeExpr<ExprType::SimdLoadLane> {
+class SimdLoadLaneExpr : public MemoryExpr<ExprType::SimdLoadLane> {
public:
SimdLoadLaneExpr(Opcode opcode,
+ Var memidx,
Address align,
Address offset,
uint64_t val,
const Location& loc = Location())
- : OpcodeExpr<ExprType::SimdLoadLane>(opcode, loc),
+ : MemoryExpr<ExprType::SimdLoadLane>(memidx, loc),
+ opcode(opcode),
align(align),
offset(offset),
val(val) {}
+ Opcode opcode;
Address align;
Address offset;
uint64_t val;
};
-class SimdStoreLaneExpr : public OpcodeExpr<ExprType::SimdStoreLane> {
+class SimdStoreLaneExpr : public MemoryExpr<ExprType::SimdStoreLane> {
public:
SimdStoreLaneExpr(Opcode opcode,
+ Var memidx,
Address align,
Address offset,
uint64_t val,
const Location& loc = Location())
- : OpcodeExpr<ExprType::SimdStoreLane>(opcode, loc),
+ : MemoryExpr<ExprType::SimdStoreLane>(memidx, loc),
+ opcode(opcode),
align(align),
offset(offset),
val(val) {}
+ Opcode opcode;
Address align;
Address offset;
uint64_t val;
diff --git a/src/wast-parser.cc b/src/wast-parser.cc
index 353eed36..f2fcf73e 100644
--- a/src/wast-parser.cc
+++ b/src/wast-parser.cc
@@ -583,8 +583,8 @@ TokenTypePair WastParser::PeekPair() {
return TokenTypePair{{Peek(), Peek(1)}};
}
-bool WastParser::PeekMatch(TokenType type) {
- return Peek() == type;
+bool WastParser::PeekMatch(TokenType type, size_t n) {
+ return Peek(n) == type;
}
bool WastParser::PeekMatchLpar(TokenType type) {
@@ -1945,6 +1945,26 @@ Result WastParser::ParseSIMDLoadStoreInstr(Location loc,
std::unique_ptr<Expr>* out_expr) {
ErrorUnlessOpcodeEnabled(token);
+ Var memidx(0, loc);
+
+ if (options_->features.multi_memory_enabled()) {
+ // We have to be a little careful when reading the memeory index.
+ // If there is just a single integer folloing the instruction that
+ // represents the lane index, so we check for either a pair of intergers
+ // or an integers followed by offset= or align=.
+ bool try_read_mem_index = true;
+ if (PeekMatch(TokenType::Nat)) {
+ // The next token could be a memory index or a lane index
+ if (!PeekMatch(TokenType::OffsetEqNat, 1) &&
+ !PeekMatch(TokenType::AlignEqNat, 1) &&
+ !PeekMatch(TokenType::Nat, 1)) {
+ try_read_mem_index = false;
+ }
+ }
+ if (try_read_mem_index) {
+ CHECK_RESULT(ParseMemidx(loc, &memidx));
+ }
+ }
Address offset;
Address align;
ParseOffsetOpt(&offset);
@@ -1957,7 +1977,7 @@ Result WastParser::ParseSIMDLoadStoreInstr(Location loc,
return Result::Error;
}
- out_expr->reset(new T(token.opcode(), align, offset, lane_idx, loc));
+ out_expr->reset(new T(token.opcode(), memidx, align, offset, lane_idx, loc));
return Result::Ok;
}
diff --git a/src/wast-parser.h b/src/wast-parser.h
index 4a449c7f..8c799b7f 100644
--- a/src/wast-parser.h
+++ b/src/wast-parser.h
@@ -82,7 +82,7 @@ class WastParser {
TokenTypePair PeekPair();
// Returns true if the next token's type is equal to the parameter.
- bool PeekMatch(TokenType);
+ bool PeekMatch(TokenType, size_t n = 0);
// Returns true if the next token's type is '(' and the following token is
// equal to the parameter.
diff --git a/test/binary/bad-function-missing-end.txt b/test/binary/bad-function-missing-end.txt
deleted file mode 100644
index ae7c7c5b..00000000
--- a/test/binary/bad-function-missing-end.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-;;; TOOL: run-gen-wasm-interp
-;;; ERROR: 1
-magic
-version
-section(TYPE) { count[1] function params[0] results[0] }
-section(FUNCTION) { count[1] sig[0] }
-section(CODE) {
- count[1]
- size[4]
- locals[0]
- i32.const
- leb_i32(42)
- drop
-}
-(;; STDERR ;;;
-000001a: error: function body must end with END opcode
-;;; STDERR ;;)
diff --git a/test/spec/binary.txt b/test/spec/binary.txt
index 612e8116..2ff6e2e1 100644
--- a/test/spec/binary.txt
+++ b/test/spec/binary.txt
@@ -107,173 +107,179 @@ out/test/spec/binary.wast:351: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
out/test/spec/binary.wast:361: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/binary.wast:374: assert_malformed passed:
+out/test/spec/binary.wast:373: assert_malformed passed:
+ 000001b: error: function body must end with END opcode
+out/test/spec/binary.wast:394: assert_malformed passed:
+ 000001a: error: function body must end with END opcode
+out/test/spec/binary.wast:410: assert_malformed passed:
+ 000001a: error: function body must end with END opcode
+out/test/spec/binary.wast:430: assert_malformed passed:
000000c: error: unable to read u32 leb128: memory initial page count
-out/test/spec/binary.wast:382: assert_malformed passed:
+out/test/spec/binary.wast:438: assert_malformed passed:
0000022: error: unable to read u32 leb128: load offset
-out/test/spec/binary.wast:401: assert_malformed passed:
+out/test/spec/binary.wast:457: assert_malformed passed:
0000021: error: unable to read u32 leb128: load alignment
-out/test/spec/binary.wast:420: assert_malformed passed:
+out/test/spec/binary.wast:476: assert_malformed passed:
0000023: error: unable to read u32 leb128: store alignment
-out/test/spec/binary.wast:439: assert_malformed passed:
+out/test/spec/binary.wast:495: assert_malformed passed:
0000024: error: unable to read u32 leb128: store offset
-out/test/spec/binary.wast:460: assert_malformed passed:
+out/test/spec/binary.wast:516: assert_malformed passed:
000000e: error: unable to read i32 leb128: i32.const value
-out/test/spec/binary.wast:470: assert_malformed passed:
+out/test/spec/binary.wast:526: assert_malformed passed:
000000e: error: unable to read i32 leb128: i32.const value
-out/test/spec/binary.wast:481: assert_malformed passed:
+out/test/spec/binary.wast:537: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/binary.wast:491: assert_malformed passed:
+out/test/spec/binary.wast:547: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/binary.wast:503: assert_malformed passed:
+out/test/spec/binary.wast:559: assert_malformed passed:
000000c: error: unable to read u32 leb128: memory initial page count
-out/test/spec/binary.wast:511: assert_malformed passed:
+out/test/spec/binary.wast:567: assert_malformed passed:
000000c: error: unable to read u32 leb128: memory initial page count
-out/test/spec/binary.wast:519: assert_malformed passed:
+out/test/spec/binary.wast:575: assert_malformed passed:
0000022: error: unable to read u32 leb128: load offset
-out/test/spec/binary.wast:538: assert_malformed passed:
+out/test/spec/binary.wast:594: assert_malformed passed:
0000022: error: unable to read u32 leb128: load offset
-out/test/spec/binary.wast:557: assert_malformed passed:
+out/test/spec/binary.wast:613: assert_malformed passed:
0000021: error: unable to read u32 leb128: load alignment
-out/test/spec/binary.wast:575: assert_malformed passed:
+out/test/spec/binary.wast:631: assert_malformed passed:
0000021: error: unable to read u32 leb128: load alignment
-out/test/spec/binary.wast:594: assert_malformed passed:
+out/test/spec/binary.wast:650: assert_malformed passed:
0000023: error: unable to read u32 leb128: store alignment
-out/test/spec/binary.wast:613: assert_malformed passed:
+out/test/spec/binary.wast:669: assert_malformed passed:
0000023: error: unable to read u32 leb128: store alignment
-out/test/spec/binary.wast:632: assert_malformed passed:
+out/test/spec/binary.wast:688: assert_malformed passed:
0000024: error: unable to read u32 leb128: store offset
-out/test/spec/binary.wast:651: assert_malformed passed:
+out/test/spec/binary.wast:707: assert_malformed passed:
0000024: error: unable to read u32 leb128: store offset
-out/test/spec/binary.wast:673: assert_malformed passed:
+out/test/spec/binary.wast:729: assert_malformed passed:
000000e: error: unable to read i32 leb128: i32.const value
-out/test/spec/binary.wast:683: assert_malformed passed:
+out/test/spec/binary.wast:739: assert_malformed passed:
000000e: error: unable to read i32 leb128: i32.const value
-out/test/spec/binary.wast:693: assert_malformed passed:
+out/test/spec/binary.wast:749: assert_malformed passed:
000000e: error: unable to read i32 leb128: i32.const value
-out/test/spec/binary.wast:703: assert_malformed passed:
+out/test/spec/binary.wast:759: assert_malformed passed:
000000e: error: unable to read i32 leb128: i32.const value
-out/test/spec/binary.wast:714: assert_malformed passed:
+out/test/spec/binary.wast:770: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/binary.wast:724: assert_malformed passed:
+out/test/spec/binary.wast:780: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/binary.wast:734: assert_malformed passed:
+out/test/spec/binary.wast:790: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/binary.wast:744: assert_malformed passed:
+out/test/spec/binary.wast:800: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/binary.wast:756: assert_malformed passed:
+out/test/spec/binary.wast:812: assert_malformed passed:
0000020: error: memory.grow reserved value must be 0
-out/test/spec/binary.wast:776: assert_malformed passed:
+out/test/spec/binary.wast:832: assert_malformed passed:
0000020: error: memory.grow reserved value must be 0
-out/test/spec/binary.wast:796: assert_malformed passed:
+out/test/spec/binary.wast:852: assert_malformed passed:
0000020: error: memory.grow reserved value must be 0
-out/test/spec/binary.wast:815: assert_malformed passed:
+out/test/spec/binary.wast:871: assert_malformed passed:
0000020: error: memory.grow reserved value must be 0
-out/test/spec/binary.wast:834: assert_malformed passed:
+out/test/spec/binary.wast:890: assert_malformed passed:
0000020: error: memory.grow reserved value must be 0
-out/test/spec/binary.wast:854: assert_malformed passed:
+out/test/spec/binary.wast:910: assert_malformed passed:
000001e: error: memory.size reserved value must be 0
-out/test/spec/binary.wast:873: assert_malformed passed:
+out/test/spec/binary.wast:929: assert_malformed passed:
000001e: error: memory.size reserved value must be 0
-out/test/spec/binary.wast:892: assert_malformed passed:
+out/test/spec/binary.wast:948: assert_malformed passed:
000001e: error: memory.size reserved value must be 0
-out/test/spec/binary.wast:910: assert_malformed passed:
+out/test/spec/binary.wast:966: assert_malformed passed:
000001e: error: memory.size reserved value must be 0
-out/test/spec/binary.wast:928: assert_malformed passed:
+out/test/spec/binary.wast:984: assert_malformed passed:
000001e: error: memory.size reserved value must be 0
-out/test/spec/binary.wast:947: assert_malformed passed:
+out/test/spec/binary.wast:1003: assert_malformed passed:
0000017: error: unable to read u32 leb128: local type count
-out/test/spec/binary.wast:964: assert_malformed passed:
+out/test/spec/binary.wast:1020: assert_malformed passed:
0000017: error: unable to read u32 leb128: local type count
-out/test/spec/binary.wast:981: assert_malformed passed:
+out/test/spec/binary.wast:1037: assert_malformed passed:
000001c: error: local count must be < 0x10000000
-out/test/spec/binary.wast:997: assert_malformed passed:
+out/test/spec/binary.wast:1053: assert_malformed passed:
0000030: error: local count must be < 0x10000000
-out/test/spec/binary.wast:1031: assert_malformed passed:
+out/test/spec/binary.wast:1087: assert_malformed passed:
0000013: error: function signature count != function body count
-out/test/spec/binary.wast:1041: assert_malformed passed:
+out/test/spec/binary.wast:1097: assert_malformed passed:
000000b: error: function signature count != function body count
-out/test/spec/binary.wast:1050: assert_malformed passed:
+out/test/spec/binary.wast:1106: assert_malformed passed:
0000016: error: function signature count != function body count
-out/test/spec/binary.wast:1061: assert_malformed passed:
+out/test/spec/binary.wast:1117: assert_malformed passed:
0000015: error: function signature count != function body count
-out/test/spec/binary.wast:1084: assert_malformed passed:
+out/test/spec/binary.wast:1140: assert_malformed passed:
000000e: error: data segment count does not equal count in DataCount section
-out/test/spec/binary.wast:1094: assert_malformed passed:
+out/test/spec/binary.wast:1150: assert_malformed passed:
000000e: error: data segment count does not equal count in DataCount section
-out/test/spec/binary.wast:1104: assert_malformed passed:
+out/test/spec/binary.wast:1160: assert_malformed passed:
0000024: error: memory.init requires data count section
-out/test/spec/binary.wast:1126: assert_malformed passed:
+out/test/spec/binary.wast:1182: assert_malformed passed:
000001e: error: data.drop requires data count section
-out/test/spec/binary.wast:1145: assert_malformed passed:
+out/test/spec/binary.wast:1201: assert_malformed passed:
0000024: error: expected ref.null or ref.func in passive element segment
0000025: error: expected END opcode after element expression
-out/test/spec/binary.wast:1171: assert_malformed passed:
+out/test/spec/binary.wast:1227: assert_malformed passed:
0000022: error: table elem type must be a reference type
-out/test/spec/binary.wast:1252: assert_malformed passed:
+out/test/spec/binary.wast:1308: assert_malformed passed:
000000a: error: invalid section size: extends past end
-out/test/spec/binary.wast:1263: assert_malformed passed:
+out/test/spec/binary.wast:1319: assert_malformed passed:
000000e: error: unfinished section (expected end: 0x11)
-out/test/spec/binary.wast:1282: assert_malformed passed:
+out/test/spec/binary.wast:1338: assert_malformed passed:
000000e: error: invalid import tag kind: exceptions not allowed
-out/test/spec/binary.wast:1292: assert_malformed passed:
+out/test/spec/binary.wast:1348: assert_malformed passed:
000000e: error: invalid import tag kind: exceptions not allowed
-out/test/spec/binary.wast:1303: assert_malformed passed:
+out/test/spec/binary.wast:1359: assert_malformed passed:
000000e: error: malformed import kind: 5
-out/test/spec/binary.wast:1313: assert_malformed passed:
+out/test/spec/binary.wast:1369: assert_malformed passed:
000000e: error: malformed import kind: 5
-out/test/spec/binary.wast:1324: assert_malformed passed:
+out/test/spec/binary.wast:1380: assert_malformed passed:
000000e: error: malformed import kind: 128
-out/test/spec/binary.wast:1334: assert_malformed passed:
+out/test/spec/binary.wast:1390: assert_malformed passed:
000000e: error: malformed import kind: 128
-out/test/spec/binary.wast:1347: assert_malformed passed:
+out/test/spec/binary.wast:1403: assert_malformed passed:
0000027: error: unable to read u32 leb128: string length
-out/test/spec/binary.wast:1366: assert_malformed passed:
+out/test/spec/binary.wast:1422: assert_malformed passed:
000002b: error: unfinished section (expected end: 0x40)
-out/test/spec/binary.wast:1397: assert_malformed passed:
+out/test/spec/binary.wast:1453: assert_malformed passed:
000000b: error: invalid table count 1, only 0 bytes left in section
-out/test/spec/binary.wast:1407: assert_malformed passed:
+out/test/spec/binary.wast:1463: assert_malformed passed:
000000d: error: tables may not be shared
-out/test/spec/binary.wast:1416: assert_malformed passed:
+out/test/spec/binary.wast:1472: assert_malformed passed:
000000d: error: tables may not be shared
-out/test/spec/binary.wast:1426: assert_malformed passed:
+out/test/spec/binary.wast:1482: assert_malformed passed:
000000d: error: malformed table limits flag: 129
-out/test/spec/binary.wast:1444: assert_malformed passed:
+out/test/spec/binary.wast:1500: assert_malformed passed:
000000b: error: invalid memory count 1, only 0 bytes left in section
-out/test/spec/binary.wast:1454: assert_malformed passed:
+out/test/spec/binary.wast:1510: assert_malformed passed:
000000c: error: memory may not be shared: threads not allowed
-out/test/spec/binary.wast:1462: assert_malformed passed:
+out/test/spec/binary.wast:1518: assert_malformed passed:
000000c: error: memory may not be shared: threads not allowed
-out/test/spec/binary.wast:1471: assert_malformed passed:
+out/test/spec/binary.wast:1527: assert_malformed passed:
000000c: error: malformed memory limits flag: 129
-out/test/spec/binary.wast:1480: assert_malformed passed:
+out/test/spec/binary.wast:1536: assert_malformed passed:
000000c: error: malformed memory limits flag: 129
-out/test/spec/binary.wast:1497: assert_malformed passed:
+out/test/spec/binary.wast:1553: assert_malformed passed:
0000010: error: unable to read i32 leb128: global type
-out/test/spec/binary.wast:1508: assert_malformed passed:
+out/test/spec/binary.wast:1564: assert_malformed passed:
0000010: error: unfinished section (expected end: 0x15)
-out/test/spec/binary.wast:1531: assert_malformed passed:
+out/test/spec/binary.wast:1587: assert_malformed passed:
000001b: error: unable to read u32 leb128: string length
-out/test/spec/binary.wast:1552: assert_malformed passed:
+out/test/spec/binary.wast:1608: assert_malformed passed:
000001b: error: unfinished section (expected end: 0x20)
-out/test/spec/binary.wast:1586: assert_malformed passed:
+out/test/spec/binary.wast:1642: assert_malformed passed:
0000021: error: unable to read u32 leb128: elem segment flags
-out/test/spec/binary.wast:1602: assert_malformed passed:
+out/test/spec/binary.wast:1658: assert_malformed passed:
0000021: error: unable to read u32 leb128: elem segment flags
-out/test/spec/binary.wast:1619: assert_malformed passed:
+out/test/spec/binary.wast:1675: assert_malformed passed:
0000021: error: unfinished section (expected end: 0x27)
-out/test/spec/binary.wast:1645: assert_malformed passed:
+out/test/spec/binary.wast:1701: assert_malformed passed:
0000016: error: unable to read u32 leb128: data segment flags
-out/test/spec/binary.wast:1658: assert_malformed passed:
+out/test/spec/binary.wast:1714: assert_malformed passed:
0000016: error: unfinished section (expected end: 0x1c)
-out/test/spec/binary.wast:1671: assert_malformed passed:
+out/test/spec/binary.wast:1727: assert_malformed passed:
0000015: error: unable to read data: data segment data
-out/test/spec/binary.wast:1685: assert_malformed passed:
+out/test/spec/binary.wast:1741: assert_malformed passed:
000001a: error: unfinished section (expected end: 0x1b)
-out/test/spec/binary.wast:1716: assert_malformed passed:
- out/test/spec/binary/binary.166.wasm:0000025: error: function type variable out of range: 11 (max 1)
+out/test/spec/binary.wast:1772: assert_malformed passed:
+ out/test/spec/binary/binary.169.wasm:0000025: error: function type variable out of range: 11 (max 1)
0000025: error: OnBlockExpr callback failed
-out/test/spec/binary.wast:1751: assert_malformed passed:
+out/test/spec/binary.wast:1807: assert_malformed passed:
0000017: error: multiple Start sections
-136/136 tests passed.
+139/139 tests passed.
;;; STDOUT ;;)
diff --git a/test/spec/exception-handling/binary.txt b/test/spec/exception-handling/binary.txt
index 1a1870ee..444e206a 100644
--- a/test/spec/exception-handling/binary.txt
+++ b/test/spec/exception-handling/binary.txt
@@ -108,173 +108,179 @@ out/test/spec/exception-handling/binary.wast:351: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
out/test/spec/exception-handling/binary.wast:361: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/exception-handling/binary.wast:374: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:373: assert_malformed passed:
+ 000001b: error: function body must end with END opcode
+out/test/spec/exception-handling/binary.wast:394: assert_malformed passed:
+ 000001a: error: function body must end with END opcode
+out/test/spec/exception-handling/binary.wast:410: assert_malformed passed:
+ 000001a: error: function body must end with END opcode
+out/test/spec/exception-handling/binary.wast:430: assert_malformed passed:
000000c: error: unable to read u32 leb128: memory initial page count
-out/test/spec/exception-handling/binary.wast:382: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:438: assert_malformed passed:
0000022: error: unable to read u32 leb128: load offset
-out/test/spec/exception-handling/binary.wast:401: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:457: assert_malformed passed:
0000021: error: unable to read u32 leb128: load alignment
-out/test/spec/exception-handling/binary.wast:420: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:476: assert_malformed passed:
0000023: error: unable to read u32 leb128: store alignment
-out/test/spec/exception-handling/binary.wast:439: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:495: assert_malformed passed:
0000024: error: unable to read u32 leb128: store offset
-out/test/spec/exception-handling/binary.wast:460: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:516: assert_malformed passed:
000000e: error: unable to read i32 leb128: i32.const value
-out/test/spec/exception-handling/binary.wast:470: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:526: assert_malformed passed:
000000e: error: unable to read i32 leb128: i32.const value
-out/test/spec/exception-handling/binary.wast:481: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:537: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/exception-handling/binary.wast:491: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:547: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/exception-handling/binary.wast:503: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:559: assert_malformed passed:
000000c: error: unable to read u32 leb128: memory initial page count
-out/test/spec/exception-handling/binary.wast:511: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:567: assert_malformed passed:
000000c: error: unable to read u32 leb128: memory initial page count
-out/test/spec/exception-handling/binary.wast:519: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:575: assert_malformed passed:
0000022: error: unable to read u32 leb128: load offset
-out/test/spec/exception-handling/binary.wast:538: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:594: assert_malformed passed:
0000022: error: unable to read u32 leb128: load offset
-out/test/spec/exception-handling/binary.wast:557: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:613: assert_malformed passed:
0000021: error: unable to read u32 leb128: load alignment
-out/test/spec/exception-handling/binary.wast:575: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:631: assert_malformed passed:
0000021: error: unable to read u32 leb128: load alignment
-out/test/spec/exception-handling/binary.wast:594: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:650: assert_malformed passed:
0000023: error: unable to read u32 leb128: store alignment
-out/test/spec/exception-handling/binary.wast:613: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:669: assert_malformed passed:
0000023: error: unable to read u32 leb128: store alignment
-out/test/spec/exception-handling/binary.wast:632: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:688: assert_malformed passed:
0000024: error: unable to read u32 leb128: store offset
-out/test/spec/exception-handling/binary.wast:651: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:707: assert_malformed passed:
0000024: error: unable to read u32 leb128: store offset
-out/test/spec/exception-handling/binary.wast:673: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:729: assert_malformed passed:
000000e: error: unable to read i32 leb128: i32.const value
-out/test/spec/exception-handling/binary.wast:683: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:739: assert_malformed passed:
000000e: error: unable to read i32 leb128: i32.const value
-out/test/spec/exception-handling/binary.wast:693: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:749: assert_malformed passed:
000000e: error: unable to read i32 leb128: i32.const value
-out/test/spec/exception-handling/binary.wast:703: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:759: assert_malformed passed:
000000e: error: unable to read i32 leb128: i32.const value
-out/test/spec/exception-handling/binary.wast:714: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:770: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/exception-handling/binary.wast:724: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:780: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/exception-handling/binary.wast:734: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:790: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/exception-handling/binary.wast:744: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:800: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/exception-handling/binary.wast:756: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:812: assert_malformed passed:
0000020: error: memory.grow reserved value must be 0
-out/test/spec/exception-handling/binary.wast:776: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:832: assert_malformed passed:
0000020: error: memory.grow reserved value must be 0
-out/test/spec/exception-handling/binary.wast:796: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:852: assert_malformed passed:
0000020: error: memory.grow reserved value must be 0
-out/test/spec/exception-handling/binary.wast:815: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:871: assert_malformed passed:
0000020: error: memory.grow reserved value must be 0
-out/test/spec/exception-handling/binary.wast:834: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:890: assert_malformed passed:
0000020: error: memory.grow reserved value must be 0
-out/test/spec/exception-handling/binary.wast:854: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:910: assert_malformed passed:
000001e: error: memory.size reserved value must be 0
-out/test/spec/exception-handling/binary.wast:873: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:929: assert_malformed passed:
000001e: error: memory.size reserved value must be 0
-out/test/spec/exception-handling/binary.wast:892: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:948: assert_malformed passed:
000001e: error: memory.size reserved value must be 0
-out/test/spec/exception-handling/binary.wast:910: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:966: assert_malformed passed:
000001e: error: memory.size reserved value must be 0
-out/test/spec/exception-handling/binary.wast:928: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:984: assert_malformed passed:
000001e: error: memory.size reserved value must be 0
-out/test/spec/exception-handling/binary.wast:947: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1003: assert_malformed passed:
0000017: error: unable to read u32 leb128: local type count
-out/test/spec/exception-handling/binary.wast:964: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1020: assert_malformed passed:
0000017: error: unable to read u32 leb128: local type count
-out/test/spec/exception-handling/binary.wast:981: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1037: assert_malformed passed:
000001c: error: local count must be < 0x10000000
-out/test/spec/exception-handling/binary.wast:997: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1053: assert_malformed passed:
0000030: error: local count must be < 0x10000000
-out/test/spec/exception-handling/binary.wast:1031: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1087: assert_malformed passed:
0000013: error: function signature count != function body count
-out/test/spec/exception-handling/binary.wast:1041: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1097: assert_malformed passed:
000000b: error: function signature count != function body count
-out/test/spec/exception-handling/binary.wast:1050: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1106: assert_malformed passed:
0000016: error: function signature count != function body count
-out/test/spec/exception-handling/binary.wast:1061: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1117: assert_malformed passed:
0000015: error: function signature count != function body count
-out/test/spec/exception-handling/binary.wast:1084: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1140: assert_malformed passed:
000000e: error: data segment count does not equal count in DataCount section
-out/test/spec/exception-handling/binary.wast:1094: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1150: assert_malformed passed:
000000e: error: data segment count does not equal count in DataCount section
-out/test/spec/exception-handling/binary.wast:1104: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1160: assert_malformed passed:
0000024: error: memory.init requires data count section
-out/test/spec/exception-handling/binary.wast:1126: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1182: assert_malformed passed:
000001e: error: data.drop requires data count section
-out/test/spec/exception-handling/binary.wast:1145: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1201: assert_malformed passed:
0000024: error: expected ref.null or ref.func in passive element segment
0000025: error: expected END opcode after element expression
-out/test/spec/exception-handling/binary.wast:1171: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1227: assert_malformed passed:
0000022: error: table elem type must be a reference type
-out/test/spec/exception-handling/binary.wast:1252: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1308: assert_malformed passed:
000000a: error: invalid section size: extends past end
-out/test/spec/exception-handling/binary.wast:1263: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1319: assert_malformed passed:
000000e: error: unfinished section (expected end: 0x11)
-out/test/spec/exception-handling/binary.wast:1282: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1338: assert_malformed passed:
000000e: error: malformed import kind: 5
-out/test/spec/exception-handling/binary.wast:1292: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1348: assert_malformed passed:
000000e: error: malformed import kind: 5
-out/test/spec/exception-handling/binary.wast:1303: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1359: assert_malformed passed:
000000e: error: malformed import kind: 5
-out/test/spec/exception-handling/binary.wast:1313: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1369: assert_malformed passed:
000000e: error: malformed import kind: 5
-out/test/spec/exception-handling/binary.wast:1324: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1380: assert_malformed passed:
000000e: error: malformed import kind: 128
-out/test/spec/exception-handling/binary.wast:1334: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1390: assert_malformed passed:
000000e: error: malformed import kind: 128
-out/test/spec/exception-handling/binary.wast:1347: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1403: assert_malformed passed:
0000027: error: unable to read u32 leb128: string length
-out/test/spec/exception-handling/binary.wast:1366: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1422: assert_malformed passed:
000002b: error: unfinished section (expected end: 0x40)
-out/test/spec/exception-handling/binary.wast:1397: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1453: assert_malformed passed:
000000b: error: invalid table count 1, only 0 bytes left in section
-out/test/spec/exception-handling/binary.wast:1407: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1463: assert_malformed passed:
000000d: error: tables may not be shared
-out/test/spec/exception-handling/binary.wast:1416: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1472: assert_malformed passed:
000000d: error: tables may not be shared
-out/test/spec/exception-handling/binary.wast:1426: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1482: assert_malformed passed:
000000d: error: malformed table limits flag: 129
-out/test/spec/exception-handling/binary.wast:1444: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1500: assert_malformed passed:
000000b: error: invalid memory count 1, only 0 bytes left in section
-out/test/spec/exception-handling/binary.wast:1454: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1510: assert_malformed passed:
000000c: error: memory may not be shared: threads not allowed
-out/test/spec/exception-handling/binary.wast:1462: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1518: assert_malformed passed:
000000c: error: memory may not be shared: threads not allowed
-out/test/spec/exception-handling/binary.wast:1471: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1527: assert_malformed passed:
000000c: error: malformed memory limits flag: 129
-out/test/spec/exception-handling/binary.wast:1480: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1536: assert_malformed passed:
000000c: error: malformed memory limits flag: 129
-out/test/spec/exception-handling/binary.wast:1497: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1553: assert_malformed passed:
0000010: error: unable to read i32 leb128: global type
-out/test/spec/exception-handling/binary.wast:1508: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1564: assert_malformed passed:
0000010: error: unfinished section (expected end: 0x15)
-out/test/spec/exception-handling/binary.wast:1531: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1587: assert_malformed passed:
000001b: error: unable to read u32 leb128: string length
-out/test/spec/exception-handling/binary.wast:1552: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1608: assert_malformed passed:
000001b: error: unfinished section (expected end: 0x20)
-out/test/spec/exception-handling/binary.wast:1586: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1642: assert_malformed passed:
0000021: error: unable to read u32 leb128: elem segment flags
-out/test/spec/exception-handling/binary.wast:1602: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1658: assert_malformed passed:
0000021: error: unable to read u32 leb128: elem segment flags
-out/test/spec/exception-handling/binary.wast:1619: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1675: assert_malformed passed:
0000021: error: unfinished section (expected end: 0x27)
-out/test/spec/exception-handling/binary.wast:1645: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1701: assert_malformed passed:
0000016: error: unable to read u32 leb128: data segment flags
-out/test/spec/exception-handling/binary.wast:1658: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1714: assert_malformed passed:
0000016: error: unfinished section (expected end: 0x1c)
-out/test/spec/exception-handling/binary.wast:1671: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1727: assert_malformed passed:
0000015: error: unable to read data: data segment data
-out/test/spec/exception-handling/binary.wast:1685: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1741: assert_malformed passed:
000001a: error: unfinished section (expected end: 0x1b)
-out/test/spec/exception-handling/binary.wast:1716: assert_malformed passed:
- out/test/spec/exception-handling/binary/binary.166.wasm:0000025: error: function type variable out of range: 11 (max 1)
+out/test/spec/exception-handling/binary.wast:1772: assert_malformed passed:
+ out/test/spec/exception-handling/binary/binary.169.wasm:0000025: error: function type variable out of range: 11 (max 1)
0000025: error: OnBlockExpr callback failed
-out/test/spec/exception-handling/binary.wast:1751: assert_malformed passed:
+out/test/spec/exception-handling/binary.wast:1807: assert_malformed passed:
0000017: error: multiple Start sections
-136/136 tests passed.
+139/139 tests passed.
;;; STDOUT ;;)
diff --git a/test/spec/multi-memory/binary.txt b/test/spec/multi-memory/binary.txt
index 66406cc4..a6b85d78 100644
--- a/test/spec/multi-memory/binary.txt
+++ b/test/spec/multi-memory/binary.txt
@@ -108,153 +108,159 @@ out/test/spec/multi-memory/binary.wast:351: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
out/test/spec/multi-memory/binary.wast:361: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/multi-memory/binary.wast:374: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:373: assert_malformed passed:
+ 000001b: error: function body must end with END opcode
+out/test/spec/multi-memory/binary.wast:394: assert_malformed passed:
+ 000001a: error: function body must end with END opcode
+out/test/spec/multi-memory/binary.wast:410: assert_malformed passed:
+ 000001a: error: function body must end with END opcode
+out/test/spec/multi-memory/binary.wast:430: assert_malformed passed:
000000c: error: unable to read u32 leb128: memory initial page count
-out/test/spec/multi-memory/binary.wast:382: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:438: assert_malformed passed:
0000022: error: unable to read u32 leb128: load offset
-out/test/spec/multi-memory/binary.wast:401: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:457: assert_malformed passed:
0000021: error: unable to read u32 leb128: load alignment
-out/test/spec/multi-memory/binary.wast:420: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:476: assert_malformed passed:
0000023: error: unable to read u32 leb128: store alignment
-out/test/spec/multi-memory/binary.wast:439: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:495: assert_malformed passed:
0000024: error: unable to read u32 leb128: store offset
-out/test/spec/multi-memory/binary.wast:460: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:516: assert_malformed passed:
000000e: error: unable to read i32 leb128: i32.const value
-out/test/spec/multi-memory/binary.wast:470: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:526: assert_malformed passed:
000000e: error: unable to read i32 leb128: i32.const value
-out/test/spec/multi-memory/binary.wast:481: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:537: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/multi-memory/binary.wast:491: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:547: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/multi-memory/binary.wast:503: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:559: assert_malformed passed:
000000c: error: unable to read u32 leb128: memory initial page count
-out/test/spec/multi-memory/binary.wast:511: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:567: assert_malformed passed:
000000c: error: unable to read u32 leb128: memory initial page count
-out/test/spec/multi-memory/binary.wast:519: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:575: assert_malformed passed:
0000022: error: unable to read u32 leb128: load offset
-out/test/spec/multi-memory/binary.wast:538: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:594: assert_malformed passed:
0000022: error: unable to read u32 leb128: load offset
-out/test/spec/multi-memory/binary.wast:557: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:613: assert_malformed passed:
0000021: error: unable to read u32 leb128: load alignment
-out/test/spec/multi-memory/binary.wast:575: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:631: assert_malformed passed:
0000021: error: unable to read u32 leb128: load alignment
-out/test/spec/multi-memory/binary.wast:594: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:650: assert_malformed passed:
0000023: error: unable to read u32 leb128: store alignment
-out/test/spec/multi-memory/binary.wast:613: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:669: assert_malformed passed:
0000023: error: unable to read u32 leb128: store alignment
-out/test/spec/multi-memory/binary.wast:632: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:688: assert_malformed passed:
0000024: error: unable to read u32 leb128: store offset
-out/test/spec/multi-memory/binary.wast:651: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:707: assert_malformed passed:
0000024: error: unable to read u32 leb128: store offset
-out/test/spec/multi-memory/binary.wast:673: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:729: assert_malformed passed:
000000e: error: unable to read i32 leb128: i32.const value
-out/test/spec/multi-memory/binary.wast:683: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:739: assert_malformed passed:
000000e: error: unable to read i32 leb128: i32.const value
-out/test/spec/multi-memory/binary.wast:693: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:749: assert_malformed passed:
000000e: error: unable to read i32 leb128: i32.const value
-out/test/spec/multi-memory/binary.wast:703: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:759: assert_malformed passed:
000000e: error: unable to read i32 leb128: i32.const value
-out/test/spec/multi-memory/binary.wast:714: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:770: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/multi-memory/binary.wast:724: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:780: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/multi-memory/binary.wast:734: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:790: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/multi-memory/binary.wast:744: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:800: assert_malformed passed:
000000e: error: unable to read i64 leb128: i64.const value
-out/test/spec/multi-memory/binary.wast:756: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:812: assert_malformed passed:
0000017: error: unable to read u32 leb128: local type count
-out/test/spec/multi-memory/binary.wast:773: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:829: assert_malformed passed:
0000017: error: unable to read u32 leb128: local type count
-out/test/spec/multi-memory/binary.wast:790: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:846: assert_malformed passed:
000001c: error: local count must be < 0x10000000
-out/test/spec/multi-memory/binary.wast:806: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:862: assert_malformed passed:
0000030: error: local count must be < 0x10000000
-out/test/spec/multi-memory/binary.wast:840: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:896: assert_malformed passed:
0000013: error: function signature count != function body count
-out/test/spec/multi-memory/binary.wast:850: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:906: assert_malformed passed:
000000b: error: function signature count != function body count
-out/test/spec/multi-memory/binary.wast:859: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:915: assert_malformed passed:
0000016: error: function signature count != function body count
-out/test/spec/multi-memory/binary.wast:870: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:926: assert_malformed passed:
0000015: error: function signature count != function body count
-out/test/spec/multi-memory/binary.wast:893: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:949: assert_malformed passed:
000000e: error: data segment count does not equal count in DataCount section
-out/test/spec/multi-memory/binary.wast:903: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:959: assert_malformed passed:
000000e: error: data segment count does not equal count in DataCount section
-out/test/spec/multi-memory/binary.wast:913: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:969: assert_malformed passed:
0000024: error: memory.init requires data count section
-out/test/spec/multi-memory/binary.wast:935: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:991: assert_malformed passed:
000001e: error: data.drop requires data count section
-out/test/spec/multi-memory/binary.wast:954: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1010: assert_malformed passed:
0000024: error: expected ref.null or ref.func in passive element segment
0000025: error: expected END opcode after element expression
-out/test/spec/multi-memory/binary.wast:980: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1036: assert_malformed passed:
0000022: error: table elem type must be a reference type
-out/test/spec/multi-memory/binary.wast:1061: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1117: assert_malformed passed:
000000a: error: invalid section size: extends past end
-out/test/spec/multi-memory/binary.wast:1072: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1128: assert_malformed passed:
000000e: error: unfinished section (expected end: 0x11)
-out/test/spec/multi-memory/binary.wast:1091: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1147: assert_malformed passed:
000000e: error: invalid import tag kind: exceptions not allowed
-out/test/spec/multi-memory/binary.wast:1101: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1157: assert_malformed passed:
000000e: error: invalid import tag kind: exceptions not allowed
-out/test/spec/multi-memory/binary.wast:1112: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1168: assert_malformed passed:
000000e: error: malformed import kind: 5
-out/test/spec/multi-memory/binary.wast:1122: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1178: assert_malformed passed:
000000e: error: malformed import kind: 5
-out/test/spec/multi-memory/binary.wast:1133: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1189: assert_malformed passed:
000000e: error: malformed import kind: 128
-out/test/spec/multi-memory/binary.wast:1143: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1199: assert_malformed passed:
000000e: error: malformed import kind: 128
-out/test/spec/multi-memory/binary.wast:1156: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1212: assert_malformed passed:
0000027: error: unable to read u32 leb128: string length
-out/test/spec/multi-memory/binary.wast:1175: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1231: assert_malformed passed:
000002b: error: unfinished section (expected end: 0x40)
-out/test/spec/multi-memory/binary.wast:1206: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1262: assert_malformed passed:
000000b: error: invalid table count 1, only 0 bytes left in section
-out/test/spec/multi-memory/binary.wast:1216: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1272: assert_malformed passed:
000000d: error: tables may not be shared
-out/test/spec/multi-memory/binary.wast:1225: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1281: assert_malformed passed:
000000d: error: tables may not be shared
-out/test/spec/multi-memory/binary.wast:1235: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1291: assert_malformed passed:
000000d: error: malformed table limits flag: 129
-out/test/spec/multi-memory/binary.wast:1253: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1309: assert_malformed passed:
000000b: error: invalid memory count 1, only 0 bytes left in section
-out/test/spec/multi-memory/binary.wast:1263: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1319: assert_malformed passed:
000000c: error: memory may not be shared: threads not allowed
-out/test/spec/multi-memory/binary.wast:1271: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1327: assert_malformed passed:
000000c: error: memory may not be shared: threads not allowed
-out/test/spec/multi-memory/binary.wast:1280: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1336: assert_malformed passed:
000000c: error: malformed memory limits flag: 129
-out/test/spec/multi-memory/binary.wast:1289: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1345: assert_malformed passed:
000000c: error: malformed memory limits flag: 129
-out/test/spec/multi-memory/binary.wast:1306: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1362: assert_malformed passed:
0000010: error: unable to read i32 leb128: global type
-out/test/spec/multi-memory/binary.wast:1317: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1373: assert_malformed passed:
0000010: error: unfinished section (expected end: 0x15)
-out/test/spec/multi-memory/binary.wast:1340: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1396: assert_malformed passed:
000001b: error: unable to read u32 leb128: string length
-out/test/spec/multi-memory/binary.wast:1361: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1417: assert_malformed passed:
000001b: error: unfinished section (expected end: 0x20)
-out/test/spec/multi-memory/binary.wast:1395: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1451: assert_malformed passed:
0000021: error: unable to read u32 leb128: elem segment flags
-out/test/spec/multi-memory/binary.wast:1411: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1467: assert_malformed passed:
0000021: error: unable to read u32 leb128: elem segment flags
-out/test/spec/multi-memory/binary.wast:1428: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1484: assert_malformed passed:
0000021: error: unfinished section (expected end: 0x27)
-out/test/spec/multi-memory/binary.wast:1454: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1510: assert_malformed passed:
0000016: error: unable to read u32 leb128: data segment flags
-out/test/spec/multi-memory/binary.wast:1467: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1523: assert_malformed passed:
0000016: error: unfinished section (expected end: 0x1c)
-out/test/spec/multi-memory/binary.wast:1480: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1536: assert_malformed passed:
0000015: error: unable to read data: data segment data
-out/test/spec/multi-memory/binary.wast:1494: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1550: assert_malformed passed:
000001a: error: unfinished section (expected end: 0x1b)
-out/test/spec/multi-memory/binary.wast:1525: assert_malformed passed:
- out/test/spec/multi-memory/binary/binary.156.wasm:0000025: error: function type variable out of range: 11 (max 1)
+out/test/spec/multi-memory/binary.wast:1581: assert_malformed passed:
+ out/test/spec/multi-memory/binary/binary.159.wasm:0000025: error: function type variable out of range: 11 (max 1)
0000025: error: OnBlockExpr callback failed
-out/test/spec/multi-memory/binary.wast:1560: assert_malformed passed:
+out/test/spec/multi-memory/binary.wast:1616: assert_malformed passed:
0000017: error: multiple Start sections
-126/126 tests passed.
+129/129 tests passed.
;;; STDOUT ;;)
diff --git a/third_party/testsuite b/third_party/testsuite
-Subproject 6241ce9e153e83ae281998ea8c9f54fe7748ee7
+Subproject 2c235ce09eca72ffcae73102c35cbc35226fb30