record Point: Copy { x: i32, y: i32 }

/// Address of a record local (aggregate) - value is already a pointer.
unsafe fn addressOfRecordLocal() -> *unsafe Point {
    let p = Point { x: 1, y: 2 };
    return &p;
}

/// Address of a scalar local - requires stack allocation.
unsafe fn addressOfScalarLocal() -> *unsafe i32 {
    let x: i32 = 42;
    return &x;
}

/// Address of dereference - should return the original pointer.
unsafe fn addressOfDeref(ptr: &i32) -> *unsafe i32 {
    return &(*ptr);
}
