diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /js/src/jit-test/tests/wasm/gc/limits.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/jit-test/tests/wasm/gc/limits.js')
-rw-r--r-- | js/src/jit-test/tests/wasm/gc/limits.js | 69 |
1 files changed, 69 insertions, 0 deletions
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/); |