mirror of https://github.com/rust-lang/rust
32 lines
660 B
Rust
32 lines
660 B
Rust
//@ run-pass
|
|
#![allow(dead_code)]
|
|
// Test that pointers to extern types can be cast from/to usize,
|
|
// despite being !Sized.
|
|
#![feature(extern_types)]
|
|
|
|
extern "C" {
|
|
type A;
|
|
}
|
|
|
|
struct Foo {
|
|
x: u8,
|
|
tail: A,
|
|
}
|
|
|
|
struct Bar<T: ?Sized> {
|
|
x: u8,
|
|
tail: T,
|
|
}
|
|
|
|
#[cfg(target_pointer_width = "32")]
|
|
const MAGIC: usize = 0xdeadbeef;
|
|
#[cfg(target_pointer_width = "64")]
|
|
const MAGIC: usize = 0x12345678deadbeef;
|
|
|
|
fn main() {
|
|
assert_eq!((MAGIC as *const A) as usize, MAGIC);
|
|
assert_eq!((MAGIC as *const Foo) as usize, MAGIC);
|
|
assert_eq!((MAGIC as *const Bar<A>) as usize, MAGIC);
|
|
assert_eq!((MAGIC as *const Bar<Bar<A>>) as usize, MAGIC);
|
|
}
|