#![feature(custom_mir, core_intrinsics)]

extern crate core;
use core::intrinsics::mir::*;

// EMIT_MIR simple_assign.simple.built.after.mir
#[custom_mir(dialect = "built")]
pub fn simple(x: i32) -> i32 {
    mir!(
        let temp1: i32;
        let temp2: _;

        {
            StorageLive(temp1);
            temp1 = x;
            Goto(exit)
        }

        exit = {
            temp2 = Move(temp1);
            StorageDead(temp1);
            RET = temp2;
            Return()
        }
    )
}

// EMIT_MIR simple_assign.simple_ref.built.after.mir
#[custom_mir(dialect = "built")]
pub fn simple_ref(x: &mut i32) -> &mut i32 {
    mir!({
        RET = Move(x);
        Return()
    })
}

fn main() {
    assert_eq!(5, simple(5));
}
