/// OptionalLift: assign i32 literal to ?i32 variable.
fn optionalLiftLiteral() -> i32 {
    let x: ?i32 = 42;
    let v = x else { return 0; };
    return v;
}

/// OptionalLift: assign i32 variable to ?i32 variable.
fn optionalLiftVar(v: i32) -> i32 {
    let x: ?i32 = v;
    let r = x else { return 0; };
    return r;
}

/// OptionalLift: return i32 from ?i32 function.
fn optionalLiftReturn(v: i32) -> ?i32 {
    return v;
}

/// NumericCast: explicit u8 to u32 cast.
fn numericU8ToU32(v: u8) -> u32 {
    let x: u32 = v as u32;
    return x;
}

/// NumericCast: explicit i8 to i32 cast.
fn numericI8ToI32(v: i8) -> i32 {
    let x: i32 = v as i32;
    return x;
}

/// NumericCast: explicit u16 to u32 cast.
fn numericU16ToU32(v: u16) -> u32 {
    let x: u32 = v as u32;
    return x;
}

/// NumericCast: explicit i16 to i32 cast.
fn numericI16ToI32(v: i16) -> i32 {
    let x: i32 = v as i32;
    return x;
}
