* tests/regression/jasmin/test_verify_fail_jsr_recursion_terminates.j:
authoredwin <none@none>
Tue, 10 Oct 2006 20:45:20 +0000 (20:45 +0000)
committeredwin <none@none>
Tue, 10 Oct 2006 20:45:20 +0000 (20:45 +0000)
New test.

* tests/regression/jasmin/Makefile.am: Added new test.

tests/regression/jasmin/Makefile.am
tests/regression/jasmin/test_verify_fail_jsr_recursion_terminates.j [new file with mode: 0644]

index 7d0dd2ac553d347b7b55032abc286cc0b602966d..889952b183709fde0ec0700c54d125be3aafd2a5 100644 (file)
@@ -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 (file)
index 0000000..8606c8d
--- /dev/null
@@ -0,0 +1,78 @@
+.class public test_verify_fail_jsr_recursion_terminates
+.super java/lang/Object
+
+; ======================================================================
+
+.method public <init>()V
+   aload_0
+   invokenonvirtual java/lang/Object/<init>()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
+