Index: test/mjsunit/regress/wasm/regression-5800.js |
diff --git a/test/mjsunit/regress/wasm/regression-5800.js b/test/mjsunit/regress/wasm/regression-5800.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2e56da853dd6f6e385a1e9d071ea3c7b186d58cf |
--- /dev/null |
+++ b/test/mjsunit/regress/wasm/regression-5800.js |
@@ -0,0 +1,56 @@ |
+// 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. |
+ |
+load("test/mjsunit/wasm/wasm-constants.js"); |
+load("test/mjsunit/wasm/wasm-module-builder.js"); |
+ |
+(function AddTest() { |
+ let builder = new WasmModuleBuilder(); |
+ |
+ builder.addFunction("main", kSig_i_v) |
+ .addBody([ |
+ kExprBlock, kWasmStmt, |
+ kExprI64Const, 0, |
+ // 0x80 ... 0x10 is the LEB encoding of 0x100000000. This is chosen so |
+ // that the 64-bit constant has a non-zero top half. In this bug, the |
+ // top half was clobbering eax, leading to the function return 1 rather |
+ // than 0. |
+ kExprI64Const, 0x80, 0x80, 0x80, 0x80, 0x10, |
+ kExprI64Add, |
+ kExprI64Eqz, |
+ kExprBrIf, 0, |
+ kExprI32Const, 0, |
+ kExprReturn, |
+ kExprEnd, |
+ kExprI32Const, 0 |
+ ]) |
+ .exportFunc(); |
+ let module = builder.instantiate(); |
+ assertEquals(0, module.exports.main()); |
+})(); |
+ |
+(function SubTest() { |
+ let builder = new WasmModuleBuilder(); |
+ |
+ builder.addFunction("main", kSig_i_v) |
+ .addBody([ |
+ kExprBlock, kWasmStmt, |
+ kExprI64Const, 0, |
+ // 0x80 ... 0x10 is the LEB encoding of 0x100000000. This is chosen so |
+ // that the 64-bit constant has a non-zero top half. In this bug, the |
+ // top half was clobbering eax, leading to the function return 1 rather |
+ // than 0. |
+ kExprI64Const, 0x80, 0x80, 0x80, 0x80, 0x10, |
+ kExprI64Sub, |
+ kExprI64Eqz, |
+ kExprBrIf, 0, |
+ kExprI32Const, 0, |
+ kExprReturn, |
+ kExprEnd, |
+ kExprI32Const, 0 |
+ ]) |
+ .exportFunc(); |
+ let module = builder.instantiate(); |
+ assertEquals(0, module.exports.main()); |
+})(); |