[wasm] Initialize IFT only for table 0

The indirect function table only exists for table 0 at the moment.
Therefore we should initialize it only for table 0.

R=mstarzinger@chromium.org

Bug: chromium:964607
Change-Id: I88a3a5cb5ebec7f0456adc2cebdf5cc499b22761
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1624804
Reviewed-by: Michael Starzinger <mstarzinger@chromium.org>
Commit-Queue: Andreas Haas <ahaas@chromium.org>
Cr-Commit-Position: refs/heads/master@{#61794}
diff --git a/src/wasm/module-instantiate.cc b/src/wasm/module-instantiate.cc
index 721153e..93eb317 100644
--- a/src/wasm/module-instantiate.cc
+++ b/src/wasm/module-instantiate.cc
@@ -930,8 +930,10 @@
     return false;
   }
 
-  if (table.type == kWasmAnyFunc && !InitializeImportedIndirectFunctionTable(
-                                        instance, import_index, table_object)) {
+  // The indirect function table only exists for table 0.
+  if (table.type == kWasmAnyFunc && table_index == 0 &&
+      !InitializeImportedIndirectFunctionTable(instance, import_index,
+                                               table_object)) {
     return false;
   }
 
diff --git a/test/mjsunit/regress/wasm/regress-964607.js b/test/mjsunit/regress/wasm/regress-964607.js
new file mode 100644
index 0000000..0a6d762
--- /dev/null
+++ b/test/mjsunit/regress/wasm/regress-964607.js
@@ -0,0 +1,29 @@
+// Copyright 2019 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --expose-wasm --experimental-wasm-anyref
+
+load('test/mjsunit/wasm/wasm-module-builder.js');
+
+let builder = new WasmModuleBuilder();
+
+builder.addImportedTable('ffi', 't1', 5, 5, kWasmAnyFunc);
+builder.addImportedTable('ffi', 't2', 9, 9, kWasmAnyFunc);
+
+builder.addFunction('foo', kSig_v_v).addBody([]).exportFunc();
+
+let module = builder.toModule();
+let table1 =
+    new WebAssembly.Table({element: 'anyfunc', initial: 5, maximum: 5});
+
+let table2 =
+    new WebAssembly.Table({element: 'anyfunc', initial: 9, maximum: 9});
+
+let instance =
+    new WebAssembly.Instance(module, {ffi: {t1: table1, t2: table2}});
+let table3 =
+    new WebAssembly.Table({element: 'anyfunc', initial: 9, maximum: 9});
+
+table3.set(8, instance.exports.foo);
+new WebAssembly.Instance(module, {ffi: {t1: table1, t2: table3}});