From: edwin Date: Tue, 10 Oct 2006 20:45:20 +0000 (+0000) Subject: * tests/regression/jasmin/test_verify_fail_jsr_recursion_terminates.j: X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=ccb3097eb8581a4ee3e3b39edaaeec4c9a6bc9ef;p=cacao.git * tests/regression/jasmin/test_verify_fail_jsr_recursion_terminates.j: New test. * tests/regression/jasmin/Makefile.am: Added new test. --- diff --git a/tests/regression/jasmin/Makefile.am b/tests/regression/jasmin/Makefile.am index 7d0dd2ac5..889952b18 100644 --- a/tests/regression/jasmin/Makefile.am +++ b/tests/regression/jasmin/Makefile.am @@ -76,6 +76,7 @@ JASMIN_TESTS = \ $(srcdir)/test_verify_fail_jsr_merge_subroutines_via_stack.j \ $(srcdir)/test_verify_fail_jsr_polymorphic_pop.j \ $(srcdir)/test_verify_fail_jsr_recursion.j \ + $(srcdir)/test_verify_fail_jsr_recursion_terminates.j \ $(srcdir)/test_verify_fail_load_wrong_type.j \ $(srcdir)/test_verify_fail_load_wrong_type_within_block.j \ $(srcdir)/test_verify_fail_local_index.j \ diff --git a/tests/regression/jasmin/test_verify_fail_jsr_recursion_terminates.j b/tests/regression/jasmin/test_verify_fail_jsr_recursion_terminates.j new file mode 100644 index 000000000..8606c8dc0 --- /dev/null +++ b/tests/regression/jasmin/test_verify_fail_jsr_recursion_terminates.j @@ -0,0 +1,78 @@ +.class public test_verify_fail_jsr_recursion_terminates +.super java/lang/Object + +; ====================================================================== + +.method public ()V + aload_0 + invokenonvirtual java/lang/Object/()V + return +.end method + +; ====================================================================== + +.method public static check(I)V + .limit locals 1 + .limit stack 10 + getstatic java/lang/System/out Ljava/io/PrintStream; + iload_0 + invokevirtual java/io/PrintStream/println(I)V + return +.end method + +.method public static check(Ljava/lang/String;)V + .limit locals 1 + .limit stack 10 + getstatic java/lang/System/out Ljava/io/PrintStream; + aload_0 + invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V + return +.end method + +; ====================================================================== + +.method public static main([Ljava/lang/String;)V + .limit stack 2 + .limit locals 4 + + ldc 0 + istore 1 + + aload 0 + ifnull force_basic_block_boundary + + ; -------------------------------------------------- + + jsr sbr_1 + jsr sbr_1 + + ; -------------------------------------------------- + +force_basic_block_boundary: + + iload 1 + invokestatic test_verify_fail_jsr_recursion_terminates/check(I)V + + return + +sbr_1: + ldc "entry" + invokestatic test_verify_fail_jsr_recursion_terminates/check(Ljava/lang/String;)V + iload 1 + ifne second_time + + astore 2 + ldc "first" + invokestatic test_verify_fail_jsr_recursion_terminates/check(Ljava/lang/String;)V + iinc 1 1 + jsr sbr_1 + ret 2 + +second_time: + astore 3 + ldc "second" + invokestatic test_verify_fail_jsr_recursion_terminates/check(Ljava/lang/String;)V + ret 3 + +.end method +