diff --git a/test/fail/branch-before-define.as b/test/fail/branch-before-define.as new file mode 100644 index 00000000000..1c8938e942b --- /dev/null +++ b/test/fail/branch-before-define.as @@ -0,0 +1,15 @@ +func f():() -> Int { + { label exit : (() -> Int) { + func g() : Int = x; // reference x + break exit (func() : Int{ g(); }); // early exit omits definition of x + let x:Int = 666; + func():Int{777;}; + } + }; +}; + +print "1\n"; +let h = f(); + +print "2\n"; +let wrong = h(); diff --git a/test/fail/ok/branch-before-define.run-ir.ok b/test/fail/ok/branch-before-define.run-ir.ok new file mode 100644 index 00000000000..ae73b42b320 --- /dev/null +++ b/test/fail/ok/branch-before-define.run-ir.ok @@ -0,0 +1,3 @@ +1 +2 +branch-before-define.as:3.24-3.25: execution error, accessing identifier before its definition diff --git a/test/fail/ok/branch-before-define.run-low.ok b/test/fail/ok/branch-before-define.run-low.ok new file mode 100644 index 00000000000..ae73b42b320 --- /dev/null +++ b/test/fail/ok/branch-before-define.run-low.ok @@ -0,0 +1,3 @@ +1 +2 +branch-before-define.as:3.24-3.25: execution error, accessing identifier before its definition diff --git a/test/fail/ok/branch-before-define.run.ok b/test/fail/ok/branch-before-define.run.ok new file mode 100644 index 00000000000..ae73b42b320 --- /dev/null +++ b/test/fail/ok/branch-before-define.run.ok @@ -0,0 +1,3 @@ +1 +2 +branch-before-define.as:3.24-3.25: execution error, accessing identifier before its definition diff --git a/test/fail/ok/branch-before-define.wasm-run.ok b/test/fail/ok/branch-before-define.wasm-run.ok new file mode 100644 index 00000000000..c755631f4da --- /dev/null +++ b/test/fail/ok/branch-before-define.wasm-run.ok @@ -0,0 +1 @@ +_out/branch-before-define.wasm:0x___: runtime trap: unreachable executed diff --git a/test/fail/ok/return-before-define.run-ir.ok b/test/fail/ok/return-before-define.run-ir.ok new file mode 100644 index 00000000000..ebeee2de382 --- /dev/null +++ b/test/fail/ok/return-before-define.run-ir.ok @@ -0,0 +1,3 @@ +1 +2 +return-before-define.as:2.22-2.23: execution error, accessing identifier before its definition diff --git a/test/fail/ok/return-before-define.run-low.ok b/test/fail/ok/return-before-define.run-low.ok new file mode 100644 index 00000000000..ebeee2de382 --- /dev/null +++ b/test/fail/ok/return-before-define.run-low.ok @@ -0,0 +1,3 @@ +1 +2 +return-before-define.as:2.22-2.23: execution error, accessing identifier before its definition diff --git a/test/fail/ok/return-before-define.run.ok b/test/fail/ok/return-before-define.run.ok new file mode 100644 index 00000000000..ebeee2de382 --- /dev/null +++ b/test/fail/ok/return-before-define.run.ok @@ -0,0 +1,3 @@ +1 +2 +return-before-define.as:2.22-2.23: execution error, accessing identifier before its definition diff --git a/test/fail/ok/return-before-define.wasm-run.ok b/test/fail/ok/return-before-define.wasm-run.ok new file mode 100644 index 00000000000..790d3f8183b --- /dev/null +++ b/test/fail/ok/return-before-define.wasm-run.ok @@ -0,0 +1 @@ +_out/return-before-define.wasm:0x___: runtime trap: unreachable executed diff --git a/test/fail/return-before-define.as b/test/fail/return-before-define.as new file mode 100644 index 00000000000..b9fcdf53efc --- /dev/null +++ b/test/fail/return-before-define.as @@ -0,0 +1,13 @@ +func f():() -> Int { + { func g() : Int = x; // reference x + return (func() : Int{ g(); }); // early exit omits definition of x + let x:Int = 666; + func():Int{777;}; + }; +}; + +print "1\n"; +let h = f(); + +print "2\n"; +let wrong = h();