# RUN: %python -m artiq.compiler.testbench.jit %s >%t.1
# RUN: OutputCheck %s --file-to-check=%t.1
# RUN: %python %s >%t.2
# RUN: OutputCheck %s --file-to-check=%t.2
# REQUIRES: exceptions

def f():
    while True:
        try:
            print("f-try")
            break
        finally:
            print("f-finally")
    print("f-out")

def g():
    x = True
    while x:
        try:
            print("g-try")
            x = False
            continue
        finally:
            print("g-finally")
    print("g-out")

def h():
    try:
        print("h-try")
        return 10
    finally:
        print("h-finally")
    print("h-out")
    return 20

def i():
    try:
        print("i-try")
        return 10
    finally:
        print("i-finally")
        return 30
    print("i-out")
    return 20

def j():
    try:
        print("j-try")
    finally:
        print("j-finally")
    print("j-out")

# CHECK-L: f-try
# CHECK-L: f-finally
# CHECK-L: f-out
f()

# CHECK-L: g-try
# CHECK-L: g-finally
# CHECK-L: g-out
g()

# CHECK-L: h-try
# CHECK-L: h-finally
# CHECK-NOT-L: h-out
# CHECK-L: h 10
print("h", h())

# CHECK-L: i-try
# CHECK-L: i-finally
# CHECK-NOT-L: i-out
# CHECK-L: i 30
print("i", i())

# CHECK-L: j-try
# CHECK-L: j-finally
# CHECK-L: j-out
print("j", j())