Browse Source

[jvm] deal with `return return`

closes #10743
Simon Krajewski 3 years ago
parent
commit
ecb470e13c
2 changed files with 20 additions and 4 deletions
  1. 6 4
      src/generators/genjvm.ml
  2. 14 0
      tests/unit/src/unit/issues/Issue10743.hx

+ 6 - 4
src/generators/genjvm.ml

@@ -1999,10 +1999,12 @@ class texpr_to_jvm
 			jm#return;
 		| TReturn (Some e1) ->
 			self#texpr rvalue_any e1;
-			let jsig = Option.get return_type in
-			jm#cast jsig;
-			self#emit_block_exits false;
-			jm#return;
+			if not (jm#is_terminated) then begin
+				let jsig = Option.get return_type in
+				jm#cast jsig;
+				self#emit_block_exits false;
+				jm#return;
+			end
 		| TFunction tf ->
 			self#tfunction ret e tf
 		| TArrayDecl el when not (need_val ret) ->

+ 14 - 0
tests/unit/src/unit/issues/Issue10743.hx

@@ -0,0 +1,14 @@
+package unit.issues;
+
+@:keep
+private class C {
+	var o = () -> {
+		return 28;
+	};
+}
+
+class Issue10743 extends Test {
+	function test() {
+		utest.Assert.pass();
+	}
+}