// Copyright 2020 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: --no-liftoff --experimental-wasm-return-call --experimental-wasm-threads

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

(function Regress1137608() {
  print(arguments.callee.name);
  let builder = new WasmModuleBuilder();
  let sig0 = builder.addType(kSig_i_iii);
  let sig1 = builder.addType(makeSig([kWasmF64, kWasmF64, kWasmI32,
        kWasmI32, kWasmI32, kWasmF32, kWasmI32, kWasmF64, kWasmI32, kWasmF32,
        kWasmI32, kWasmF32, kWasmI32, kWasmF64, kWasmI32], [kWasmI32]));
  let main = builder.addFunction("main", sig0)
      .addBody([
        kExprI64Const, 0,
        kExprF64UConvertI64,
        kExprF64Const, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00,
        kExprF64Const, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
        kExprF64Mul,
        kExprI32Const, 0,
        kExprF64Const, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        kExprF64StoreMem, 0x00, 0xb0, 0xe0, 0xc0, 0x81, 0x03,
        kExprI32Const, 0,
        kExprI32Const, 0,
        kExprI32Const, 0,
        kExprF32Const, 0x00, 0x00, 0x00, 0x00,
        kExprI32Const, 0,
        kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        kExprI32Const, 0,
        kExprF32Const, 0x00, 0x00, 0x00, 0x00,
        kExprI32Const, 0,
        kExprF32Const, 0x00, 0x00, 0x00, 0x00,
        kExprI32Const, 0,
        kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        kExprI32Const, 0,
        kExprI32Const, 2,
        kExprReturnCallIndirect, sig1, kTableZero]).exportFunc();
  builder.addFunction("f", sig1).addBody([kExprI32Const, 0]);
  builder.addTable(kWasmAnyFunc, 4, 4);
  builder.addMemory(16, 32, false, true);
  let module = new WebAssembly.Module(builder.toBuffer());
  let instance = new WebAssembly.Instance(module);
})();
