// Copyright 2017 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

load('test/mjsunit/wasm/wasm-module-builder.js');

let module1 = (() => {
  let builder = new WasmModuleBuilder();
  builder.addMemory(1, 1);
  builder.addFunction('load', kSig_i_i)
      .addBody([kExprI32Const, 0, kExprI32LoadMem, 0, 0])
      .exportAs('load');
  return new WebAssembly.Module(builder.toBuffer());
})();

let module2 = (() => {
  let builder = new WasmModuleBuilder();
  builder.addMemory(1, 1);
  builder.addImport('A', 'load', kSig_i_i);
  builder.addExportOfKind('load', kExternalFunction, 0);
  return new WebAssembly.Module(builder.toBuffer());
})();

let instance1 = new WebAssembly.Instance(module1);
let instance2 = new WebAssembly.Instance(module2, {A: instance1.exports});

assertEquals(0, instance2.exports.load());
