From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- js/src/jit-test/tests/wasm/gc/limits.js | 69 +++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 js/src/jit-test/tests/wasm/gc/limits.js (limited to 'js/src/jit-test/tests/wasm/gc/limits.js') diff --git a/js/src/jit-test/tests/wasm/gc/limits.js b/js/src/jit-test/tests/wasm/gc/limits.js new file mode 100644 index 0000000000..e6f21b5d6b --- /dev/null +++ b/js/src/jit-test/tests/wasm/gc/limits.js @@ -0,0 +1,69 @@ +// |jit-test| skip-if: !wasmGcEnabled() || getBuildConfiguration("tsan") + +// This test has a timeout on TSAN configurations due to the large +// allocations. + +// Limit of 1 million recursion groups +wasmValidateText(`(module + ${`(rec (type (func)))`.repeat(1_000_000)} + )`); +wasmFailValidateText(`(module + ${`(rec (type (func)))`.repeat(1_000_001)} + )`, /too many/); + +// Limit of 1 million types (across all recursion groups) +wasmValidateText(`(module + (rec ${`(type (func))`.repeat(1_000_000)}) + )`); +wasmValidateText(`(module + (rec ${`(type (func))`.repeat(500_000)}) + (rec ${`(type (func))`.repeat(500_000)}) + )`); +wasmFailValidateText(`(module + (rec ${`(type (func))`.repeat(1_000_001)}) + )`, /too many/); +wasmFailValidateText(`(module + (rec ${`(type (func))`.repeat(500_000)}) + (rec ${`(type (func))`.repeat(500_001)}) + )`, /too many/); + +// Limit of subtyping hierarchy 63 deep +function testSubtypingModule(depth) { + let types = '(type (sub (func)))'; + for (let i = 1; i <= depth; i++) { + types += `(type (sub ${i - 1} (func)))`; + } + return `(module + ${types} + )`; +} +wasmValidateText(testSubtypingModule(63)); +wasmFailValidateText(testSubtypingModule(64), /too deep/); + +// Limit of 10_000 struct fields +wasmFailValidateText(`(module + (type (struct ${'(field i64)'.repeat(10_001)})) +)`, /too many/); + +{ + let {makeLargeStructDefault, makeLargeStruct} = wasmEvalText(`(module + (type $s (struct ${'(field i64)'.repeat(10_000)})) + (func (export "makeLargeStructDefault") (result anyref) + struct.new_default $s + ) + (func (export "makeLargeStruct") (result anyref) + ${'i64.const 0 '.repeat(10_000)} + struct.new $s + ) + )`).exports; + let largeStructDefault = makeLargeStructDefault(); + let largeStruct = makeLargeStruct(); +} + +// array.new_fixed has limit of 10_000 operands +wasmFailValidateText(`(module + (type $a (array i32)) + (func + array.new_fixed $a 10001 + ) +)`, /too many/); -- cgit v1.2.3