blob: eca6d908b448b5dcf47502b521e7ed57371e2f9b [file] [log] [blame]
#![feature(core_intrinsics)]
#![feature(custom_mir)]
use std::intrinsics::mir::*;
use std::num::NonZero;
// We define our own option type so that we can control the variant indices.
#[allow(unused)]
enum Option<T> {
None, // variant 0
Some(T), // variant 1
}
use Option::*;
#[custom_mir(dialect = "runtime", phase = "optimized")]
fn set_discriminant(ptr: &mut Option<NonZero<i32>>) {
mir! {
{
// We set the discriminant to `Some`, which is a NOP since this is the niched variant.
// However, the enum is actually encoding `None` currently! That's not good...
SetDiscriminant(*ptr, 1);
//~^ ERROR: trying to set discriminant of a Option<std::num::NonZero<i32>> to the niched variant, but the value does not match
Return()
}
}
}
pub fn main() {
let mut v = None;
set_discriminant(&mut v);
}