2018-10-02 12:17:30 -05:00
|
|
|
#![feature(const_transmute)]
|
2018-11-01 08:14:51 -05:00
|
|
|
#![allow(const_err)] // make sure we cannot allow away the errors tested here
|
2018-10-02 12:17:30 -05:00
|
|
|
|
|
|
|
use std::mem;
|
2018-06-04 11:32:06 -05:00
|
|
|
|
|
|
|
#[derive(Copy, Clone)]
|
|
|
|
enum Bar {}
|
|
|
|
|
2018-10-18 10:58:10 -05:00
|
|
|
union TransmuteUnion<A: Clone + Copy, B: Clone + Copy> {
|
|
|
|
a: A,
|
|
|
|
b: B,
|
|
|
|
}
|
|
|
|
|
|
|
|
const BAD_BAD_BAD: Bar = unsafe { (TransmuteUnion::<(), Bar> { a: () }).b };
|
|
|
|
//~^ ERROR this constant likely exhibits undefined behavior
|
2018-10-02 12:17:30 -05:00
|
|
|
|
|
|
|
const BAD_BAD_REF: &Bar = unsafe { mem::transmute(1usize) };
|
2018-10-01 05:52:47 -05:00
|
|
|
//~^ ERROR it is undefined behavior to use this value
|
2018-10-02 10:02:58 -05:00
|
|
|
|
2018-10-18 10:58:10 -05:00
|
|
|
const BAD_BAD_ARRAY: [Bar; 1] = unsafe { (TransmuteUnion::<(), [Bar; 1]> { a: () }).b };
|
|
|
|
//~^ ERROR this constant likely exhibits undefined behavior
|
2018-06-04 11:32:06 -05:00
|
|
|
|
2018-10-18 10:58:10 -05:00
|
|
|
fn main() {}
|