diff --git a/interpreter/host/flags.ml b/interpreter/host/flags.ml index 0aa3e793f1..e3fcc2abfa 100644 --- a/interpreter/host/flags.ml +++ b/interpreter/host/flags.ml @@ -1,7 +1,6 @@ let interactive = ref false let trace = ref false let unchecked = ref false -let checked = ref false let print_sig = ref false let dry = ref false let width = ref 80 diff --git a/interpreter/host/js.ml b/interpreter/host/js.ml index d0c7124163..d5338e9309 100644 --- a/interpreter/host/js.ml +++ b/interpreter/host/js.ml @@ -9,8 +9,6 @@ open Source let harness = "'use strict';\n" ^ "\n" ^ - "let hard_validate = " ^ string_of_bool !Flags.checked ^ ";\n" ^ - "\n" ^ "let spectest = {\n" ^ " print: print || ((...xs) => console.log(...xs)),\n" ^ " global: 666,\n" ^ @@ -37,7 +35,7 @@ let harness = " } catch (e) {\n" ^ " throw new Error(\"Wasm validate throws\");\n" ^ " }\n" ^ - " if (validated !== valid && valid !== null) {\n" ^ + " if (validated !== valid) {\n" ^ " throw new Error(\"Wasm validate failure\" + " ^ "(valid ? \"\" : \" expected\"));\n" ^ " }\n" ^ @@ -78,14 +76,6 @@ let harness = " throw new Error(\"Wasm validation failure expected\");\n" ^ "}\n" ^ "\n" ^ - "function assert_soft_invalid(bytes) {\n" ^ - " try { module(bytes, hard_validate ? false : null) } catch (e) {\n" ^ - " if (e instanceof WebAssembly.CompileError) return;\n" ^ - " }\n" ^ - " if (hard_validate)\n" ^ - " throw new Error(\"Wasm validation failure expected\");\n" ^ - "}\n" ^ - "\n" ^ "function assert_unlinkable(bytes) {\n" ^ " let mod = module(bytes);\n" ^ " try { new WebAssembly.Instance(mod, registry) } catch (e) {\n" ^ @@ -330,8 +320,6 @@ let of_assertion mods ass = "assert_malformed(" ^ of_definition def ^ ");" | AssertInvalid (def, _) -> "assert_invalid(" ^ of_definition def ^ ");" - | AssertSoftInvalid (def, _) -> - "assert_soft_invalid(" ^ of_definition def ^ ");" | AssertUnlinkable (def, _) -> "assert_unlinkable(" ^ of_definition def ^ ");" | AssertUninstantiable (def, _) -> diff --git a/interpreter/host/main.ml b/interpreter/host/main.ml index fa16ccb199..5e62cab159 100644 --- a/interpreter/host/main.ml +++ b/interpreter/host/main.ml @@ -30,7 +30,6 @@ let argspec = Arg.align " configure output width (default is 80)"; "-s", Arg.Set Flags.print_sig, " show module signatures"; "-u", Arg.Set Flags.unchecked, " unchecked, do not perform validation"; - "-c", Arg.Set Flags.checked, " fully checked, perform hard validation"; "-h", Arg.Clear Flags.harness, " exclude harness for JS convesion"; "-d", Arg.Set Flags.dry, " dry, do not run program"; "-t", Arg.Set Flags.trace, " trace execution"; diff --git a/interpreter/host/run.ml b/interpreter/host/run.ml index 44f2724041..fe48751f1b 100644 --- a/interpreter/host/run.ml +++ b/interpreter/host/run.ml @@ -313,21 +313,15 @@ let run_assertion ass = | _ -> Assert.error ass.at "expected decoding error" ) - | AssertInvalid (def, re) - | AssertSoftInvalid (def, re) -> - let active = - match ass.it with - | AssertSoftInvalid _ -> !Flags.checked - | _ -> true - in - trace ("Asserting " ^ (if active then "" else "soft ") ^ "invalid..."); + | AssertInvalid (def, re) -> + trace "Asserting invalid..."; (match let m = run_definition def in Valid.check_module m with | exception Valid.Invalid (_, msg) -> assert_message ass.at "validation" msg re - | _ -> if active then Assert.error ass.at "expected validation error" + | _ -> Assert.error ass.at "expected validation error" ) | AssertUnlinkable (def, re) -> @@ -351,7 +345,8 @@ let run_assertion ass = let imports = Import.link m in ignore (Eval.init m imports) with - | exception Eval.Trap (_, msg) -> assert_message ass.at "instantiation" msg re + | exception Eval.Trap (_, msg) -> + assert_message ass.at "instantiation" msg re | _ -> Assert.error ass.at "expected instantiation error" ) diff --git a/interpreter/text/arrange.ml b/interpreter/text/arrange.ml index b2c30d0dbb..f6cabf8fe4 100644 --- a/interpreter/text/arrange.ml +++ b/interpreter/text/arrange.ml @@ -410,8 +410,6 @@ let assertion mode ass = Node ("assert_malformed", [definition `Original None def; Atom (string re)]) | AssertInvalid (def, re) -> Node ("assert_invalid", [definition mode None def; Atom (string re)]) - | AssertSoftInvalid (def, re) -> - Node ("assert_soft_invalid", [definition mode None def; Atom (string re)]) | AssertUnlinkable (def, re) -> Node ("assert_unlinkable", [definition mode None def; Atom (string re)]) | AssertUninstantiable (def, re) -> diff --git a/interpreter/text/lexer.mll b/interpreter/text/lexer.mll index 3cd98bcba8..9f1cd8b328 100644 --- a/interpreter/text/lexer.mll +++ b/interpreter/text/lexer.mll @@ -306,7 +306,6 @@ rule token = parse | "get" { GET } | "assert_malformed" { ASSERT_MALFORMED } | "assert_invalid" { ASSERT_INVALID } - | "assert_soft_invalid" { ASSERT_SOFT_INVALID } | "assert_unlinkable" { ASSERT_UNLINKABLE } | "assert_return" { ASSERT_RETURN } | "assert_return_nan" { ASSERT_RETURN_NAN } diff --git a/interpreter/text/parser.mly b/interpreter/text/parser.mly index 099b99d039..37e681939b 100644 --- a/interpreter/text/parser.mly +++ b/interpreter/text/parser.mly @@ -656,8 +656,6 @@ assertion : { AssertMalformed (snd $3, $4) @@ at () } | LPAR ASSERT_INVALID module_ TEXT RPAR { AssertInvalid (snd $3, $4) @@ at () } - | LPAR ASSERT_SOFT_INVALID module_ TEXT RPAR - { AssertSoftInvalid (snd $3, $4) @@ at () } | LPAR ASSERT_UNLINKABLE module_ TEXT RPAR { AssertUnlinkable (snd $3, $4) @@ at () } | LPAR ASSERT_TRAP module_ TEXT RPAR diff --git a/interpreter/text/script.ml b/interpreter/text/script.ml index 3d9246bbce..d3048f3c67 100644 --- a/interpreter/text/script.ml +++ b/interpreter/text/script.ml @@ -14,7 +14,6 @@ type assertion = assertion' Source.phrase and assertion' = | AssertMalformed of definition * string | AssertInvalid of definition * string - | AssertSoftInvalid of definition * string | AssertUnlinkable of definition * string | AssertUninstantiable of definition * string | AssertReturn of action * Ast.literal list diff --git a/test/core/soft-fail.wast b/test/core/unreached-invalid.wast similarity index 85% rename from test/core/soft-fail.wast rename to test/core/unreached-invalid.wast index 13c965382e..cb0abd9161 100644 --- a/test/core/soft-fail.wast +++ b/test/core/unreached-invalid.wast @@ -1,21 +1,35 @@ -;; Test soft failures -;; These are invalid Wasm, but the failure is in dead code, which -;; implementations are not required to validate. If they do, they shall -;; diagnose the correct error. +;; Failures in unreachable code. -(assert_soft_invalid +(assert_invalid + (module (func $local-index (unreachable) (drop (get_local 0)))) + "unknown local" +) +(assert_invalid + (module (func $global-index (unreachable) (drop (get_global 0)))) + "unknown global" +) +(assert_invalid + (module (func $func-index (unreachable) (call 1))) + "unknown function" +) +(assert_invalid + (module (func $label-index (unreachable) (br 1))) + "unknown label" +) + +(assert_invalid (module (func $type-num-vs-num (unreachable) (drop (i64.eqz (i32.const 0)))) ) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-poly-num-vs-num (result i32) (unreachable) (i64.const 0) (i32.const 0) (select) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-poly-transitive-num-vs-num (result i32) (unreachable) (i64.const 0) (i32.const 0) (select) @@ -24,275 +38,275 @@ "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-unconsumed-const (unreachable) (i32.const 0))) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-unconsumed-result (unreachable) (i32.eqz))) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-unconsumed-result2 (unreachable) (i32.const 0) (i32.add) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-unconsumed-poly0 (unreachable) (select))) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-unconsumed-poly1 (unreachable) (i32.const 0) (select))) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-unconsumed-poly2 (unreachable) (i32.const 0) (i32.const 0) (select) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-unary-num-vs-void-after-break (block (br 0) (block (drop (i32.eqz (nop))))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-unary-num-vs-num-after-break (block (br 0) (drop (i32.eqz (f32.const 1)))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-binary-num-vs-void-after-break (block (br 0) (block (drop (f32.eq (i32.const 1))))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-binary-num-vs-num-after-break (block (br 0) (drop (f32.eq (i32.const 1) (f32.const 0)))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-num-vs-void-after-break (block (br 0) (i32.const 1)) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-num-vs-num-after-break (result i32) (block i32 (i32.const 1) (br 0) (f32.const 0)) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-loop-value-num-vs-void-after-break (block (loop (br 1) (i32.const 1))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-loop-value-num-vs-num-after-break (result i32) (loop i32 (br 1 (i32.const 1)) (f32.const 0)) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-func-value-num-vs-void-after-break (br 0) (i32.const 1) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-func-value-num-vs-num-after-break (result i32) (br 0 (i32.const 1)) (f32.const 0) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-unary-num-vs-void-after-return (return) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-unary-num-vs-num-after-return (return) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-binary-num-vs-void-after-return (return) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-binary-num-vs-num-after-return (return) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-num-vs-void-after-return (block (return) (i32.const 1)) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-num-vs-num-after-return (result i32) (block i32 (i32.const 1) (return (i32.const 0)) (f32.const 0)) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-loop-value-num-vs-void-after-return (block (loop (return) (i32.const 1))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-loop-value-num-vs-num-after-return (result i32) (loop i32 (return (i32.const 1)) (f32.const 0)) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-func-value-num-vs-void-after-return (return) (i32.const 1) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-func-value-num-vs-num-after-return (result i32) (return (i32.const 1)) (f32.const 0) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-unary-num-vs-void-after-unreachable (unreachable) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-unary-num-vs-num-after-unreachable (unreachable) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-binary-num-vs-void-after-unreachable (unreachable) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-binary-num-vs-num-after-unreachable (unreachable) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-num-vs-void-after-unreachable (block (unreachable) (i32.const 1)) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-num-vs-num-after-unreachable (result i32) (block i32 (i32.const 1) (unreachable) (f32.const 0)) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-loop-value-num-vs-void-after-unreachable (block (loop (unreachable) (i32.const 1))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-loop-value-num-vs-num-after-unreachable (result i32) (loop i32 (unreachable) (f32.const 0)) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-func-value-num-vs-void-after-unreachable (unreachable) (i32.const 1) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-func-value-num-vs-num-after-unreachable (result i32) (unreachable) (f32.const 0) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-unary-num-vs-void-after-nested-unreachable (block (unreachable)) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-unary-num-vs-num-after-nested-unreachable (block (unreachable)) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-binary-num-vs-void-after-nested-unreachable (block (unreachable)) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-binary-num-vs-num-after-nested-unreachable (block (unreachable)) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-num-vs-void-after-nested-unreachable (block (block (unreachable)) (i32.const 1)) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-num-vs-num-after-nested-unreachable (result i32) (block i32 (i32.const 1) (block (unreachable)) (f32.const 0)) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-loop-value-num-vs-void-after-nested-unreachable (block (loop (block (unreachable)) (i32.const 1))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-loop-value-num-vs-num-after-nested-unreachable (result i32) (loop i32 (block (unreachable)) (f32.const 0)) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-func-value-num-vs-void-after-nested-unreachable (block (unreachable)) (i32.const 1) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-func-value-num-vs-num-after-nested-unreachable (result i32) (block (unreachable)) (f32.const 0) @@ -300,243 +314,243 @@ "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-unary-num-vs-void-after-infinite-loop (loop (br 0)) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-unary-num-vs-num-after-infinite-loop (loop (br 0)) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-binary-num-vs-void-after-infinite-loop (loop (br 0)) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-binary-num-vs-num-after-infinite-loop (loop (br 0)) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-num-vs-void-after-infinite-loop (block (loop (br 0)) (i32.const 1)) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-num-vs-num-after-infinite-loop (result i32) (block i32 (i32.const 1) (loop (br 0)) (f32.const 0)) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-loop-value-num-vs-void-after-infinite-loop (block (loop (loop (br 0)) (i32.const 1))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-loop-value-num-vs-num-after-infinite-loop (result i32) (loop i32 (loop (br 0)) (f32.const 0)) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-func-value-num-vs-void-after-infinite-loop (loop (br 0)) (i32.const 1) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-func-value-num-vs-num-after-infinite-loop (result i32) (loop (br 0)) (f32.const 0) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-unary-num-vs-void-in-dead-body (if (i32.const 0) (then (drop (i32.eqz (nop))))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-unary-num-vs-num-in-dead-body (if (i32.const 0) (then (drop (i32.eqz (f32.const 1))))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-binary-num-vs-void-in-dead-body (if (i32.const 0) (then (drop (f32.eq (i32.const 1))))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-binary-num-vs-num-in-dead-body (if (i32.const 0) (then (drop (f32.eq (i32.const 1) (f32.const 0))))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-if-value-num-vs-void-in-dead-body (if (i32.const 0) (then (i32.const 1))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-if-value-num-vs-num-in-dead-body (result i32) (if i32 (i32.const 0) (then (f32.const 0))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-num-vs-void-in-dead-body (if (i32.const 0) (then (block (i32.const 1)))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-num-vs-num-in-dead-body (result i32) (if i32 (i32.const 0) (then (block i32 (f32.const 0)))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-num-vs-void-in-dead-body (if (i32.const 0) (then (loop (i32.const 1)))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-num-vs-num-in-dead-body (result i32) (if i32 (i32.const 0) (then (loop i32 (f32.const 0)))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-return-second-num-vs-num (result i32) (return (i32.const 1)) (return (f64.const 1)) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-br-second-num-vs-num (result i32) (block i32 (br 0 (i32.const 1)) (br 0 (f64.const 1))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-br_if-cond-num-vs-num-after-unreachable (block (br_if 0 (unreachable) (f32.const 0))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-br_table-num-vs-num-after-unreachable (block (br_table 0 (unreachable) (f32.const 1))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-nested-unreachable-num-vs-void (block (i32.const 3) (block (unreachable))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-nested-unreachable-void-vs-num (result i32) (block (block (unreachable))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-nested-unreachable-num-vs-num (result i32) (block i64 (i64.const 0) (block (unreachable))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-nested-unreachable-num2-vs-void (result i32) (block (i32.const 3) (block (i64.const 1) (unreachable))) (i32.const 9) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-nested-br-num-vs-void (block (i32.const 3) (block (br 1))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-nested-br-void-vs-num (result i32) (block i32 (block (br 1 (i32.const 0)))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-nested-br-num-vs-num (result i32) (block i32 (i64.const 0) (block (br 1 (i32.const 0)))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-nested2-br-num-vs-void (block (block (i32.const 3) (block (br 2)))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-nested2-br-void-vs-num (result i32) (block i32 (block (block (br 2 (i32.const 0))))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-nested2-br-num-vs-num (result i32) (block i32 (block i64 (i64.const 0) (block (br 2 (i32.const 0))))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-nested2-br-num2-vs-void (result i32) (block (i32.const 3) (block (i64.const 1) (br 1))) (i32.const 9) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-nested-return-num-vs-void (block (i32.const 3) (block (return))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-nested-return-void-vs-num (result i32) (block (block (return (i32.const 0)))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-nested-return-num-vs-num (result i32) (block i64 (i64.const 0) (block (return (i32.const 0)))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-block-value-nested-return-num2-vs-void (result i32) (block (i32.const 3) (block (i64.const 1) (return (i32.const 0)))) (i32.const 9) @@ -544,32 +558,32 @@ "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-loop-value-nested-unreachable-num-vs-void (loop (i32.const 3) (block (unreachable))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-loop-value-nested-unreachable-void-vs-num (result i32) (loop (block (unreachable))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-loop-value-nested-unreachable-num-vs-num (result i32) (loop i64 (i64.const 0) (block (unreachable))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-cont-last-void-vs-empty (result i32) (loop (br 0 (nop))) )) "type mismatch" ) -(assert_soft_invalid +(assert_invalid (module (func $type-cont-last-num-vs-empty (result i32) (loop (br 0 (i32.const 0))) ))