.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