/// Packed records use opaque storage because the current Cangjie FFI cannot
/// declare packed field layout directly.
struct AlignedToOne {
    int i;
} __attribute__ ((packed,aligned(1)));

/// The opaque storage must preserve the explicit two-byte alignment.
struct AlignedToTwo {
    int i;
} __attribute__ ((packed,aligned(2)));

#pragma pack(1)

/// The translation unit reports the effective one-byte alignment even though
/// the packing directive is not attached to the record cursor.
struct PackedToOne {
    int x;
    int y;
};

#pragma pack()

#pragma pack(2)

/// The opaque storage must preserve the two-byte alignment introduced by the
/// packing directive.
struct PackedToTwo {
    int x;
    int y;
};

#pragma pack()