add Subroutine test to cover jsr and ret instructions

This commit is contained in:
Joel Dice 2008-11-12 10:07:30 -07:00
parent fae0ccfe96
commit 4dd1d1eec8
2 changed files with 37 additions and 0 deletions

View File

@ -336,6 +336,8 @@ $(test-dep): $(test-sources)
@mkdir -p $(dir $(@))
$(javac) -d $(dir $(@)) -bootclasspath $(classpath-build) \
$(shell $(MAKE) -s --no-print-directory $(test-classes))
$(javac) -source 1.2 -target 1.1 -XDjsrlimit=0 -d $(dir $(@)) \
test/Subroutine.java
@touch $(@)
define compile-object

35
test/Subroutine.java Normal file
View File

@ -0,0 +1,35 @@
public class Subroutine {
private static void expect(boolean v) {
if (! v) throw new RuntimeException();
}
// This test is intended to cover the jsr and ret instructions.
// However, recent Sun javac versions avoid generating these
// instructions by default, so we must compile this class using
// -source 1.2 -target 1.1 -XDjsrlimit=0.
//
// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4381996
//
private static void test(boolean throw_) {
int x = 42;
int y = 99;
int a = 0;
try {
try {
int z = x + y;
if (throw_) throw new DummyException();
Integer.valueOf(z).toString();
} finally {
a = x + y;
}
expect(a == x + y);
} catch (DummyException ignored) { }
}
public static void main(String[] args) {
test(false);
test(true);
}
private static class DummyException extends RuntimeException { }
}