2020-03-12 16:58:34 +01:00
|
|
|
// check-pass
|
2018-11-04 11:23:34 +01:00
|
|
|
|
|
|
|
// Test that we can handle newtypes wrapping extern types
|
|
|
|
|
2019-08-30 02:01:04 +02:00
|
|
|
#![feature(extern_types)]
|
2018-11-04 11:23:34 +01:00
|
|
|
|
2018-11-04 14:43:05 +01:00
|
|
|
use std::marker::PhantomData;
|
|
|
|
|
2018-11-04 11:23:34 +01:00
|
|
|
extern "C" {
|
|
|
|
pub type ExternType;
|
|
|
|
}
|
|
|
|
unsafe impl Sync for ExternType {}
|
2018-11-04 14:43:05 +01:00
|
|
|
static MAGIC_FFI_STATIC: u8 = 42;
|
2018-11-04 11:23:34 +01:00
|
|
|
|
|
|
|
#[repr(transparent)]
|
|
|
|
pub struct Wrapper(ExternType);
|
|
|
|
pub static MAGIC_FFI_REF: &'static Wrapper = unsafe {
|
|
|
|
std::mem::transmute(&MAGIC_FFI_STATIC)
|
|
|
|
};
|
|
|
|
|
2018-11-04 14:43:05 +01: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 11:23:34 +01:00
|
|
|
fn main() {}
|