| Index: test/mjsunit/wasm/indirect-calls.js | 
| diff --git a/test/mjsunit/wasm/indirect-calls.js b/test/mjsunit/wasm/indirect-calls.js | 
| index 7d7f135ae478083c21ad40e9a71e2e039a54a526..b07ce0d58a8448de9058438318181b5da9c98698 100644 | 
| --- a/test/mjsunit/wasm/indirect-calls.js | 
| +++ b/test/mjsunit/wasm/indirect-calls.js | 
| @@ -127,3 +127,111 @@ assertEquals(35, module.exports.main(2, 1)); | 
| assertEquals(32, module.exports.main(1, 2)); | 
| assertEquals(31, module.exports.main(2, 2)); | 
| assertTraps(kTrapFuncInvalid, "module.exports.main(12, 3)"); | 
| + | 
| +(function ConstBaseTest() { | 
| +  print("ConstBaseTest..."); | 
| +  function instanceWithTable(base, length) { | 
| +    var builder = new WasmModuleBuilder(); | 
| + | 
| +    var mul = builder.addFunction("mul", kSig_i_ii) | 
| +        .addBody([ | 
| +          kExprGetLocal, 0,  // -- | 
| +          kExprGetLocal, 1,  // -- | 
| +          kExprI32Mul        // -- | 
| +        ]); | 
| +    var add = builder.addFunction("add", kSig_i_ii) | 
| +        .addBody([ | 
| +          kExprGetLocal, 0,  // -- | 
| +          kExprGetLocal, 1,  // -- | 
| +          kExprI32Add        // -- | 
| +        ]); | 
| +    var sub = builder.addFunction("sub", kSig_i_ii) | 
| +        .addBody([ | 
| +          kExprGetLocal, 0,  // -- | 
| +          kExprGetLocal, 1,  // -- | 
| +          kExprI32Sub        // -- | 
| +        ]); | 
| +    builder.addFunction("main", kSig_i_ii) | 
| +      .addBody([ | 
| +        kExprI32Const, 33,  // -- | 
| +        kExprGetLocal, 0,   // -- | 
| +        kExprGetLocal, 1,   // -- | 
| +        kExprCallIndirect, 0])  // -- | 
| +      .exportAs("main"); | 
| + | 
| +    builder.setFunctionTableLength(length); | 
| +    builder.addFunctionTableInit(base, false, [add.index, sub.index, mul.index]); | 
| + | 
| +    return builder.instantiate(); | 
| +  } | 
| + | 
| +  for (var i = 0; i < 5; i++) { | 
| +    print(" base = " + i); | 
| +    var module = instanceWithTable(i, 10); | 
| +    main = module.exports.main; | 
| +    for (var j = 0; j < i; j++) { | 
| +      assertTraps(kTrapFuncSigMismatch, "main(12, " + j + ")"); | 
| +    } | 
| +    assertEquals(34, main(1, i + 0)); | 
| +    assertEquals(35, main(2, i + 0)); | 
| +    assertEquals(32, main(1, i + 1)); | 
| +    assertEquals(31, main(2, i + 1)); | 
| +    assertEquals(33, main(1, i + 2)); | 
| +    assertEquals(66, main(2, i + 2)); | 
| +    assertTraps(kTrapFuncInvalid, "main(12, 10)"); | 
| +  } | 
| +})(); | 
| + | 
| +(function GlobalBaseTest() { | 
| +  print("GlobalBaseTest..."); | 
| + | 
| +  var builder = new WasmModuleBuilder(); | 
| + | 
| +  var mul = builder.addFunction("mul", kSig_i_ii) | 
| +      .addBody([ | 
| +        kExprGetLocal, 0,  // -- | 
| +        kExprGetLocal, 1,  // -- | 
| +        kExprI32Mul        // -- | 
| +      ]); | 
| +  var add = builder.addFunction("add", kSig_i_ii) | 
| +      .addBody([ | 
| +        kExprGetLocal, 0,  // -- | 
| +        kExprGetLocal, 1,  // -- | 
| +        kExprI32Add        // -- | 
| +      ]); | 
| +  var sub = builder.addFunction("sub", kSig_i_ii) | 
| +      .addBody([ | 
| +        kExprGetLocal, 0,  // -- | 
| +        kExprGetLocal, 1,  // -- | 
| +        kExprI32Sub        // -- | 
| +      ]); | 
| +  builder.addFunction("main", kSig_i_ii) | 
| +    .addBody([ | 
| +      kExprI32Const, 33,  // -- | 
| +      kExprGetLocal, 0,   // -- | 
| +      kExprGetLocal, 1,   // -- | 
| +      kExprCallIndirect, 0])  // -- | 
| +    .exportAs("main"); | 
| + | 
| +  builder.setFunctionTableLength(10); | 
| +  var g = builder.addImportedGlobal("base", undefined, kAstI32); | 
| +  builder.addFunctionTableInit(g, true, [mul.index, add.index, sub.index]); | 
| + | 
| +  var module = new WebAssembly.Module(builder.toBuffer()); | 
| + | 
| +  for (var i = 0; i < 5; i++) { | 
| +    print(" base = " + i); | 
| +    var instance = new WebAssembly.Instance(module, {base: i}); | 
| +    main = instance.exports.main; | 
| +    for (var j = 0; j < i; j++) { | 
| +      assertTraps(kTrapFuncSigMismatch, "main(12, " + j + ")"); | 
| +    } | 
| +    assertEquals(33, main(1, i + 0)); | 
| +    assertEquals(66, main(2, i + 0)); | 
| +    assertEquals(34, main(1, i + 1)); | 
| +    assertEquals(35, main(2, i + 1)); | 
| +    assertEquals(32, main(1, i + 2)); | 
| +    assertEquals(31, main(2, i + 2)); | 
| +    assertTraps(kTrapFuncInvalid, "main(12, 10)"); | 
| +  } | 
| +})(); | 
|  |