Skip to content

Commit 82e64ba

Browse files
authored
[wat2wasm] Passive segments require bulk memory (#1203)
1 parent f644a03 commit 82e64ba

7 files changed

+27
-7
lines changed

src/test-wast-parser.cc

+3-3
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ Errors ParseInvalidModule(std::string text) {
4949

5050
TEST(WastParser, LongToken) {
5151
std::string text;
52-
text = "(module (data ";
52+
text = "(module (memory ";
5353
text += repeat("a", 0x5000);
5454
text += "))";
5555

@@ -58,9 +58,9 @@ TEST(WastParser, LongToken) {
5858

5959
ASSERT_EQ(ErrorLevel::Error, errors[0].error_level);
6060
ASSERT_EQ(1, errors[0].loc.line);
61-
ASSERT_EQ(15, errors[0].loc.first_column);
61+
ASSERT_EQ(17, errors[0].loc.first_column);
6262
ASSERT_STREQ(
63-
R"(unexpected token aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..., expected ).)",
63+
R"(unexpected token "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...", expected a natural number (e.g. 123).)",
6464
errors[0].message.c_str());
6565
}
6666

src/wast-parser.cc

+7-1
Original file line numberDiff line numberDiff line change
@@ -933,7 +933,12 @@ Result WastParser::ParseDataModuleField(Module* module) {
933933
} else if (ParseVarOpt(&field->data_segment.memory_var, Var(0, loc))) {
934934
CHECK_RESULT(ParseOffsetExpr(&field->data_segment.offset));
935935
} else if (!ParseOffsetExprOpt(&field->data_segment.offset)) {
936-
field->data_segment.flags |= SegPassive;
936+
if (options_->features.bulk_memory_enabled()) {
937+
field->data_segment.flags |= SegPassive;
938+
} else {
939+
Error(loc, "passive data segments are not allowed");
940+
return Result::Error;
941+
}
937942
}
938943

939944
ParseTextListOpt(&field->data_segment.data);
@@ -987,6 +992,7 @@ Result WastParser::ParseElemModuleField(Module* module) {
987992
}
988993

989994
if (ParseRefTypeOpt(&field->elem_segment.elem_type)) {
995+
// TODO: Don't allow unless bulk memory is enabled.
990996
field->elem_segment.flags |= (SegPassive | SegUseElemExprs);
991997
// Parse a potentially empty sequence of ElemExprs.
992998
while (true) {

test/parse/expr/bulk-memory-disabled.txt

+3
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
)
2121
)
2222
(;; STDERR ;;;
23+
out/test/parse/expr/bulk-memory-disabled.txt:6:4: error: passive data segments are not allowed
24+
(data $data "a")
25+
^^^^
2326
out/test/parse/expr/bulk-memory-disabled.txt:8:41: error: opcode not allowed: memory.init
2427
i32.const 0 i32.const 0 i32.const 0 memory.init 0
2528
^^^^^^^^^^^
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
;;; TOOL: wat2wasm
22
;;; ERROR: 1
3+
;;; ARGS: --enable-bulk-memory
34
(module
45
(memory 100)
56
(data foo))
67
(;; STDERR ;;;
7-
out/test/parse/module/bad-memory-segment-address.txt:5:9: error: unexpected token foo, expected ).
8+
out/test/parse/module/bad-memory-segment-address.txt:6:9: error: unexpected token foo, expected ).
89
(data foo))
910
^^^
1011
;;; STDERR ;;)
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
;;; TOOL: wat2wasm
2+
;;; ARGS: --enable-bulk-memory
23
(module
34
(memory 1)
45
(data "hi"))

test/regress/regress-33.txt

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
;;; TOOL: wat2wasm
22
;;; ERROR: 1
3+
;;; ARGS: --enable-bulk-memory
34
(data "\d")
45
(;; STDERR ;;;
5-
out/test/regress/regress-33.txt:3:8: error: bad escape "\d"
6+
out/test/regress/regress-33.txt:4:8: error: bad escape "\d"
67
(data "\d")
78
^^
8-
out/test/regress/regress-33.txt:3:7: error: unexpected token Invalid, expected ).
9+
out/test/regress/regress-33.txt:4:7: error: unexpected token Invalid, expected ).
910
(data "\d")
1011
^^^^
1112
;;; STDERR ;;)

test/regress/regress-36.txt

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
;;; TOOL: wat2wasm
2+
;;; ERROR: 1
3+
(data "hello")
4+
(;; STDERR ;;;
5+
out/test/regress/regress-36.txt:3:2: error: passive data segments are not allowed
6+
(data "hello")
7+
^^^^
8+
;;; STDERR ;;)

0 commit comments

Comments
 (0)