| // skip-filecheck |
| #![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); |
| } |