#![feature(custom_mir, core_intrinsics)] extern crate core; use core::intrinsics::mir::*; // EMIT_MIR aggregate_exprs.tuple.built.after.mir #[custom_mir(dialect = "built")] fn tuple() -> (i32, bool) { mir!( { RET = (1, true); Return() } ) } // EMIT_MIR aggregate_exprs.array.built.after.mir #[custom_mir(dialect = "built")] fn array() -> [i32; 2] { mir!( let x: [i32; 2]; let one: i32; { x = [42, 43]; one = 1; x = [one, 2]; RET = Move(x); Return() } ) } struct Foo { a: i32, b: i32, } enum Bar { Foo(Foo, i32), } union Onion { neon: i32, noun: f32, } // EMIT_MIR aggregate_exprs.adt.built.after.mir #[custom_mir(dialect = "built")] fn adt() -> Onion { mir!( let one: i32; let x: Foo; let y: Bar; { one = 1; x = Foo { a: 1, b: 2, }; y = Bar::Foo(Move(x), one); RET = Onion { neon: Field(Variant(y, 0), 1) }; Return() } ) } fn main() { assert_eq!(tuple(), (1, true)); assert_eq!(array(), [1, 2]); assert_eq!(unsafe { adt().neon }, 1); }