brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.8 KiB · 8139336 Raw
162 lines · rust
1#![feature(repr128)]2#![feature(rustc_attrs)]3#![feature(const_option)]4 5use core::num::{NonZeroI128, NonZeroU32};6 7/// This file was manually compiled with rustc as object file8/// obj2yaml tool was used to convert this to main.yaml9/// This is done in order to make the test portable since LLVM codebase tests don't have setup to compile Rust programs10/// no_std , no_main is used in order to make the object file as small as possible eliminating extra symbols from standard library11/// static global variables are used because they can be inspected on object file without starting the process12 13/// Command:14/// rustc -g --emit=obj --crate-type=bin -C panic=abort -C link-arg=-nostdlib main.rs && obj2yaml main.o -o main.yaml15use core::ptr::NonNull;16 17pub enum CLikeEnumDefault {18    A = 2,19    B = 10,20}21 22#[repr(u8)]23pub enum CLikeEnumReprU8 {24    VariantA,25    VariantB,26    VariantC,27}28 29#[repr(u32)]30pub enum CLikeEnumReprU32 {31    VariantA = 1,32    VariantB = 2,33    VariantC = 3,34}35 36pub enum EnumWithTuples {37    A(u8),38    B(u16),39    C(u32),40    D(usize),41    AA(u8, u8),42    BB(u16, u16),43    BC(u16, u32),44    CC(u32, u32),45    // no DD on purpose to have D = CC in size46}47 48pub enum EnumWithStructs {49    A(Struct1),50    B(Struct2),51}52 53#[repr(usize)]54pub enum MixedEnum {55    A,56    B(i32),57    C(u8, i32),58    D(Option<Struct2>),59    E(EnumWithStructs),60}61 62pub struct Struct1 {63    field: i32,64}65 66pub struct Struct2 {67    field: u32,68    inner: Struct1,69}70 71pub struct NonNullHolder {72    inner: Option<NonNull<u64>>,73}74 75pub enum NicheLayoutEnum {76    Tag1,77    Data { my_data: CLikeEnumDefault },78    Tag2,79}80 81// The following three types will use a niche layout once82pub enum NicheLayoutWithFields1<'a> {83    A(&'a u8, u32),84    B(u32),85}86 87pub enum NicheLayoutWithFields2 {88    A(NonZeroU32, u64),89    B(u64),90}91 92pub enum NicheLayoutWithFields3 {93    A(u8, bool),94    B(u8),95    C(bool),96    D(u8),97    E(u8),98    F,99}100 101#[repr(i128)]102enum DirectTag128 {103    A(u32),104    B(u32),105}106 107static CLIKE_DEFAULT_A: CLikeEnumDefault = CLikeEnumDefault::A;108static CLIKE_DEFAULT_B: CLikeEnumDefault = CLikeEnumDefault::B;109 110static CLIKE_U8_A: CLikeEnumReprU8 = CLikeEnumReprU8::VariantA;111static CLIKE_U8_B: CLikeEnumReprU8 = CLikeEnumReprU8::VariantB;112static CLIKE_U8_C: CLikeEnumReprU8 = CLikeEnumReprU8::VariantC;113 114static CLIKE_U32_A: CLikeEnumReprU32 = CLikeEnumReprU32::VariantA;115static CLIKE_U32_B: CLikeEnumReprU32 = CLikeEnumReprU32::VariantB;116static CLIKE_U32_C: CLikeEnumReprU32 = CLikeEnumReprU32::VariantC;117 118static ENUM_WITH_TUPLES_A: EnumWithTuples = EnumWithTuples::A(13);119static ENUM_WITH_TUPLES_AA: EnumWithTuples = EnumWithTuples::AA(13, 37);120static ENUM_WITH_TUPLES_B: EnumWithTuples = EnumWithTuples::B(37);121static ENUM_WITH_TUPLES_BB: EnumWithTuples = EnumWithTuples::BB(37, 5535);122static ENUM_WITH_TUPLES_BC: EnumWithTuples = EnumWithTuples::BC(65000, 165000);123static ENUM_WITH_TUPLES_C: EnumWithTuples = EnumWithTuples::C(31337);124static ENUM_WITH_TUPLES_CC: EnumWithTuples = EnumWithTuples::CC(31337, 87236);125static ENUM_WITH_TUPLES_D: EnumWithTuples = EnumWithTuples::D(123456789012345678);126 127static MIXED_ENUM_A: MixedEnum = MixedEnum::A;128static MIXED_ENUM_B: MixedEnum = MixedEnum::B(-10);129static MIXED_ENUM_C: MixedEnum = MixedEnum::C(254, -254);130static MIXED_ENUM_D_NONE: MixedEnum = MixedEnum::D(None);131static MIXED_ENUM_D_SOME: MixedEnum = MixedEnum::D(Some(Struct2 {132    field: 123456,133    inner: Struct1 { field: 123 },134}));135 136static NICHE_W_FIELDS_1_A: NicheLayoutWithFields1 = NicheLayoutWithFields1::A(&77, 7);137static NICHE_W_FIELDS_1_B: NicheLayoutWithFields1 = NicheLayoutWithFields1::B(99);138static NICHE_W_FIELDS_2_A: NicheLayoutWithFields2 =139    NicheLayoutWithFields2::A(NonZeroU32::new(800).unwrap(), 900);140static NICHE_W_FIELDS_2_B: NicheLayoutWithFields2 = NicheLayoutWithFields2::B(1000);141static NICHE_W_FIELDS_3_A: NicheLayoutWithFields3 = NicheLayoutWithFields3::A(137, true);142static NICHE_W_FIELDS_3_B: NicheLayoutWithFields3 = NicheLayoutWithFields3::B(12);143static NICHE_W_FIELDS_3_C: NicheLayoutWithFields3 = NicheLayoutWithFields3::C(false);144static NICHE_W_FIELDS_3_D: NicheLayoutWithFields3 = NicheLayoutWithFields3::D(34);145static NICHE_W_FIELDS_3_E: NicheLayoutWithFields3 = NicheLayoutWithFields3::E(56);146static NICHE_W_FIELDS_3_F: NicheLayoutWithFields3 = NicheLayoutWithFields3::F;147 148static DIRECT_TAG_128_A: DirectTag128 = DirectTag128::A(12345);149static DIRECT_TAG_128_B: DirectTag128 = DirectTag128::B(6789);150 151pub fn main() {152    let niche_w_fields_1_a: NicheLayoutWithFields1 = NicheLayoutWithFields1::A(&77, 7);153    let niche_w_fields_1_b: NicheLayoutWithFields1 = NicheLayoutWithFields1::B(99);154    let direct_tag_128_a: DirectTag128 = DirectTag128::A(0xF1F2);155    let direct_tag_128_b: DirectTag128 = DirectTag128::B(0xF3F4);156    let non_null = unsafe {157        NonNullHolder {158            inner: NonNull::new(12345 as *mut u64),159        }160    };161}162