blob: 5e68ad70035e3d46765fb83c55da171c02373243 [file] [log] [blame]
.class LTestSync;
.super Ljava/lang/Object;
.source "Main.java"
# direct methods
.method constructor <init>()V
.registers 1
.prologue
.line 6
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static run()V
# v0-v2 were generated by javac+dx for the original src code, keeping them.
# v10..v19 are for tracking, aliasing and manipulating the first lock.
# v20..v29 are for tracking, aliasing and manipulating the second lock.
.registers 30
.prologue
.line 8
const-string v1, "First"
.line 9
const-string v2, "Second"
move-object v10, v1
const v1, 0x1
.line 10
monitor-enter v10
# Introduce a range of dead copies.
move-object v11, v10
move-object v12, v10
move-object v13, v10
move-object v14, v10
move-object v15, v10
move-object/16 v16, v10
move-object/16 v17, v10
move-object/16 v18, v10
# Introduce a copy that we'll use for unlock.
move-object/16 v19, v10
# Clobber the original alias.
const v10, 0x3
move-object/16 v20, v2
const v2, 0x2
.line 11
:try_start_b
monitor-enter v20
:try_end_c
# Introduce a range of dead copies.
move-object/16 v21, v20
move-object/16 v22, v20
move-object/16 v23, v20
move-object/16 v24, v20
move-object/16 v25, v20
move-object/16 v26, v20
move-object/16 v27, v20
# Introduce another copy that we will hold live.
move-object/16 v28, v20
# Clobber the original alias.
const v20, 0x5
# Introduce another copy that we'll use for unlock.
move-object/16 v29, v28
.catchall {:try_start_b .. :try_end_c} :catchall_15
.line 12
:try_start_c
invoke-static/range { v28 }, LMain;->run(Ljava/lang/Object;)V
.line 13
monitor-exit v29
:try_end_10
.catchall {:try_start_c .. :try_end_10} :catchall_12
.line 14
:try_start_10
monitor-exit v19
:try_end_11
.catchall {:try_start_10 .. :try_end_11} :catchall_15
.line 15
return-void
.line 13
:catchall_12
move-exception v0
:try_start_13
monitor-exit v29
:try_end_14
.catchall {:try_start_13 .. :try_end_14} :catchall_12
:try_start_14
throw v0
.line 14
:catchall_15
move-exception v0
monitor-exit v19
:try_end_17
.catchall {:try_start_14 .. :try_end_17} :catchall_15
throw v0
.end method