1.class public LCatchHandlerOnEntry;
2
3.super Ljava/lang/Object;
4
5# Test we can execute a method starting with a catch handler (without
6# move-exception instruction). This method must be called with parameter
7# initialized to 0.
8#
9# We execute the catch handler (Label1) for the first time with p0 == 0.
10# We save its value in v0, increment p0 to 1 and execute the div-int
11# instruction (Label2) which throws an ArithmeticException (division by zero).
12# That exception is caught by the catch handler so we execute it a second time.
13# Now p0 == 1. When we we execute the div-int instruction, it succeeds and we
14# return its result: this is the initial value of v1 because "v1 = v1 / 1".
15.method public static catchHandlerOnEntry(I)I
16.registers 4
17:Label1
18       const v1, 100
19       move v0, p0
20       add-int/lit8 p0, p0, 1
21
22:Label2
23       invoke-static {v0}, LCatchHandlerOnEntryHelper;->throwExceptionDuringDeopt(I)V
24
25:Label3
26       return v1
27
28.catchall {:Label2 .. :Label3} :Label1
29.end method
30