2020-03-12 10:58:34 -05:00
|
|
|
// check-pass
|
2018-11-04 04:23:34 -06:00
|
|
|
|
|
|
|
// Test that we can handle newtypes wrapping extern types
|
|
|
|
|
2019-08-29 19:01:04 -05:00
|
|
|
#![feature(extern_types)]
|
2018-11-04 04:23:34 -06:00
|
|
|
|
2018-11-04 07:43:05 -06:00
|
|
|
use std::marker::PhantomData;
|
|
|
|
|
2018-11-04 04:23:34 -06:00
|
|
|
extern "C" {
|
|
|
|
pub type ExternType;
|
|
|
|
}
|
|
|
|
unsafe impl Sync for ExternType {}
|
2018-11-04 07:43:05 -06:00
|
|
|
static MAGIC_FFI_STATIC: u8 = 42;
|
2018-11-04 04:23:34 -06:00
|
|
|
|
|
|
|
#[repr(transparent)]
|
|
|
|
pub struct Wrapper(ExternType);
|
|
|
|
pub static MAGIC_FFI_REF: &'static Wrapper = unsafe {
|
|
|
|
std::mem::transmute(&MAGIC_FFI_STATIC)
|
|
|
|
};
|
|
|
|
|
2018-11-04 07:43:05 -06:00
|
|
|
#[repr(transparent)]
|
|
|
|
pub struct Wrapper2(PhantomData<Vec<i32>>, ExternType);
|
|
|
|
pub static MAGIC_FFI_REF2: &'static Wrapper2 = unsafe {
|
|
|
|
std::mem::transmute(&MAGIC_FFI_STATIC)
|
|
|
|
};
|
|
|
|
|
2018-11-04 04:23:34 -06:00
|
|
|
fn main() {}
|