Index: test/mjsunit/wasm/compiled-module-management.js |
diff --git a/test/mjsunit/wasm/compiled-module-management.js b/test/mjsunit/wasm/compiled-module-management.js |
index 40a0513a7f205878b2b9a85bbb8eb9c4882f3bac..8c4c3b32afc91210e83d0d5466a897b2583fbf7a 100644 |
--- a/test/mjsunit/wasm/compiled-module-management.js |
+++ b/test/mjsunit/wasm/compiled-module-management.js |
@@ -2,15 +2,21 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-// TODO (mtrofin): re-enable ignition (v8:5345) |
-// Flags: --no-turbo --no-ignition --no-ignition-staging |
// Flags: --expose-wasm --expose-gc --allow-natives-syntax |
load("test/mjsunit/wasm/wasm-constants.js"); |
load("test/mjsunit/wasm/wasm-module-builder.js"); |
+// Use global variables for all values where the test wants to maintain strict |
+// control over value lifetime. Using local variables would not give sufficient |
+// guarantees of the value lifetime. |
+var module; |
+var instance1; |
+var instance2; |
+var instance3; |
+var instance4; |
-(function CompiledModuleInstancesAreGCed() { |
+(function CompiledModuleInstancesInitialize1to3() { |
var builder = new WasmModuleBuilder(); |
builder.addMemory(1,1, true); |
@@ -20,31 +26,46 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); |
kExprCallFunction, 0 |
]).exportFunc(); |
- var module = new WebAssembly.Module(builder.toBuffer()); |
+ module = new WebAssembly.Module(builder.toBuffer()); |
%ValidateWasmModuleState(module); |
%ValidateWasmInstancesChain(module, 0); |
- var i1 = new WebAssembly.Instance(module, {getValue: () => 1}); |
+ instance1 = new WebAssembly.Instance(module, {getValue: () => 1}); |
%ValidateWasmInstancesChain(module, 1); |
- var i2 = new WebAssembly.Instance(module, {getValue: () => 2}); |
+ instance2 = new WebAssembly.Instance(module, {getValue: () => 2}); |
%ValidateWasmInstancesChain(module, 2); |
- var i3 = new WebAssembly.Instance(module, {getValue: () => 3}); |
+ instance3 = new WebAssembly.Instance(module, {getValue: () => 3}); |
%ValidateWasmInstancesChain(module, 3); |
+})(); |
- assertEquals(1, i1.exports.f()); |
- i1 = null; |
- gc(); |
- %ValidateWasmInstancesChain(module, 2); |
- assertEquals(3, i3.exports.f()); |
- i3 = null; |
- gc(); |
- %ValidateWasmInstancesChain(module, 1); |
- assertEquals(2, i2.exports.f()); |
- i2 = null; |
- gc(); |
- %ValidateWasmModuleState(module); |
- var i4 = new WebAssembly.Instance(module, {getValue: () => 4}); |
- assertEquals(4, i4.exports.f()); |
+(function CompiledModuleInstancesClear1() { |
+ assertEquals(1, instance1.exports.f()); |
+ instance1 = null; |
+})(); |
+ |
+gc(); |
+%ValidateWasmInstancesChain(module, 2); |
+ |
+(function CompiledModuleInstancesClear3() { |
+ assertEquals(3, instance3.exports.f()); |
+ instance3 = null; |
+})(); |
+ |
+gc(); |
+%ValidateWasmInstancesChain(module, 1); |
+ |
+(function CompiledModuleInstancesClear2() { |
+ assertEquals(2, instance2.exports.f()); |
+ instance2 = null; |
+})(); |
+ |
+gc(); |
+%ValidateWasmModuleState(module); |
+ |
+(function CompiledModuleInstancesInitialize4AndClearModule() { |
+ instance4 = new WebAssembly.Instance(module, {getValue: () => 4}); |
+ assertEquals(4, instance4.exports.f()); |
module = null; |
- gc(); |
- %ValidateWasmOrphanedInstance(i4); |
})(); |
+ |
+gc(); |
+%ValidateWasmOrphanedInstance(instance4); |