| Index: test/mjsunit/asm/asm-validation.js
|
| diff --git a/test/mjsunit/asm/asm-validation.js b/test/mjsunit/asm/asm-validation.js
|
| index 3dfd18caef29218516275517e793b70abad7ca0e..1f087fc01909827191d0bd23e7a63cbe6aa3f65a 100644
|
| --- a/test/mjsunit/asm/asm-validation.js
|
| +++ b/test/mjsunit/asm/asm-validation.js
|
| @@ -413,3 +413,66 @@ function assertValidAsm(func) {
|
| Module();
|
| assertFalse(%IsAsmWasmCode(Module));
|
| })();
|
| +
|
| +(function TestConditionalReturn() {
|
| + function Module() {
|
| + 'use asm';
|
| + function foo(a, b) {
|
| + a = +a;
|
| + b = +b;
|
| + // Allowed, despite not matching the spec, as emscripten emits this in
|
| + // practice.
|
| + return a == b ? +a : +b;
|
| + }
|
| + return foo;
|
| + }
|
| + var m = Module();
|
| + assertEquals(4, m(4, 4));
|
| + assertEquals(5, m(4, 5));
|
| + assertEquals(4, m(5, 4));
|
| + assertValidAsm(Module);
|
| +})();
|
| +
|
| +(function TestMismatchedConditionalReturn() {
|
| + function Module() {
|
| + 'use asm';
|
| + function foo(a, b) {
|
| + a = +a;
|
| + return a == 0.0 ? 0 : +a;
|
| + }
|
| + return foo;
|
| + }
|
| + Module();
|
| + assertFalse(% IsAsmWasmCode(Module));
|
| +})();
|
| +
|
| +(function TestBadIntConditionalReturn() {
|
| + function Module() {
|
| + 'use asm';
|
| + function foo(a, b) {
|
| + a = a | 0;
|
| + b = b | 0;
|
| + // Disallowed because signature must be signed, but these will be int.
|
| + return 1 ? a : b;
|
| + }
|
| + return foo;
|
| + }
|
| + Module();
|
| + assertFalse(% IsAsmWasmCode(Module));
|
| +})();
|
| +
|
| +(function TestBadSignedConditionalReturn() {
|
| + function Module() {
|
| + 'use asm';
|
| + function foo(a, b) {
|
| + a = a | 0;
|
| + b = b | 0;
|
| + // Disallowed because conditional yields int, even when both sides
|
| + // are signed.
|
| + return 1 ? a | 0 : b | 0;
|
| + }
|
| + return foo;
|
| + }
|
| + Module();
|
| + assertFalse(% IsAsmWasmCode(Module));
|
| +})();
|
|
|