| Index: test/mjsunit/wasm/errors.js | 
| diff --git a/test/mjsunit/wasm/errors.js b/test/mjsunit/wasm/errors.js | 
| index 7dbd6e5cb6b9f17af0c230359ee0cfd4cd6c147d..b87702fa837b72a8601ea34655594b24f8088e03 100644 | 
| --- a/test/mjsunit/wasm/errors.js | 
| +++ b/test/mjsunit/wasm/errors.js | 
| @@ -25,6 +25,23 @@ function instance(bytes, imports = {}) { | 
| return new WebAssembly.Instance(module(bytes), imports); | 
| } | 
|  | 
| +// instantiate should succeed but run should fail. | 
| +function instantiateAndFailAtRuntime(bytes, imports = {}) { | 
| +  var instance = undefined; | 
| +  try { | 
| +    instance = new WebAssembly.Instance(module(bytes), imports); | 
| +  } catch(e) { | 
| +    // If we fail at startup. | 
| +    if (e instanceof WebAssembly.RuntimeError) { | 
| +      throw e; | 
| +    } | 
| +    // Swallow other instantiation errors because we expect instantiation | 
| +    // to succeed but runtime to fail. | 
| +    return; | 
| +  } | 
| +  instance.exports.run(); | 
| +} | 
| + | 
| function builder() { | 
| return new WasmModuleBuilder; | 
| } | 
| @@ -33,21 +50,23 @@ function assertCompileError(bytes) { | 
| assertThrows(() => module(bytes), WebAssembly.CompileError); | 
| } | 
|  | 
| +// default imports to {} so we get LinkError by default, thus allowing us to | 
| +// distinguish the TypeError we want to catch | 
| function assertTypeError(bytes, imports = {}) { | 
| assertThrows(() => instance(bytes, imports), TypeError); | 
| } | 
|  | 
| -function assertLinkError(bytes, imports = {}) { | 
| +function assertLinkError(bytes, imports) { | 
| assertThrows(() => instance(bytes, imports), WebAssembly.LinkError); | 
| } | 
|  | 
| -function assertRuntimeError(bytes, imports = {}) { | 
| -  assertThrows(() => instance(bytes, imports).exports.run(), | 
| +function assertRuntimeError(bytes, imports) { | 
| +  assertThrows(() => instantiateAndFailAtRuntime(bytes, imports), | 
| WebAssembly.RuntimeError); | 
| } | 
|  | 
| -function assertConversionError(bytes, imports = {}) { | 
| -  assertThrows(() => instance(bytes, imports).exports.run(), TypeError); | 
| +function assertConversionError(bytes, imports) { | 
| +  assertThrows(() => instantiateAndFailAtRuntime(bytes, imports), TypeError); | 
| } | 
|  | 
| (function TestDecodingError() { | 
| @@ -72,7 +91,7 @@ function assertConversionError(bytes, imports = {}) { | 
|  | 
| b = builder(); | 
| b.addImport("foo", "bar", kSig_v_v); | 
| -  assertTypeError(b.toBuffer(), {}); | 
| +  assertLinkError(b.toBuffer(), {}); | 
| b = builder(); | 
| b.addImport("foo", "bar", kSig_v_v); | 
| assertLinkError(b.toBuffer(), {foo: {}}); | 
| @@ -82,7 +101,7 @@ function assertConversionError(bytes, imports = {}) { | 
|  | 
| b = builder(); | 
| b.addImportedGlobal("foo", "bar", kWasmI32); | 
| -  assertTypeError(b.toBuffer(), {}); | 
| +  assertLinkError(b.toBuffer(), {}); | 
| b = builder(); | 
| b.addImportedGlobal("foo", "bar", kWasmI32); | 
| assertLinkError(b.toBuffer(), {foo: {}}); | 
| @@ -95,7 +114,7 @@ function assertConversionError(bytes, imports = {}) { | 
|  | 
| b = builder(); | 
| b.addImportedMemory("foo", "bar"); | 
| -  assertTypeError(b.toBuffer(), {}); | 
| +  assertLinkError(b.toBuffer(), {}); | 
| b = builder(); | 
| b.addImportedMemory("foo", "bar"); | 
| assertLinkError(b.toBuffer(), {foo: {}}); | 
| @@ -105,7 +124,7 @@ function assertConversionError(bytes, imports = {}) { | 
| {foo: {bar: () => new WebAssembly.Memory({initial: 0})}}); | 
|  | 
| b = builder(); | 
| -  b.addFunction("f", kSig_v_v).addBody([ | 
| +  b.addFunction("startup", kSig_v_v).addBody([ | 
| kExprUnreachable, | 
| ]).end().addStart(0); | 
| assertRuntimeError(b.toBuffer()); | 
| @@ -135,8 +154,9 @@ function assertConversionError(bytes, imports = {}) { | 
| b.addImport("foo", "bar", kSig_v_l); | 
| assertConversionError(b.addFunction("run", kSig_v_v).addBody([ | 
| kExprI64Const, 0, kExprCallFunction, 0 | 
| -  ]).exportFunc().end().toBuffer()); | 
| +  ]).exportFunc().end().toBuffer(), {foo:{bar: (l)=>{}}}); | 
|  | 
| +  b = builder() | 
| assertConversionError(builder().addFunction("run", kSig_l_v).addBody([ | 
| kExprI64Const, 0 | 
| ]).exportFunc().end().toBuffer()); | 
|  |