| //@ compile-flags: -Zunpretty=thir-tree --crate-type=lib |
| //@ normalize-stdout: "DefId\([^ ]* ~ (\w*)\[....\]" -> "DefId($1" |
| //@ check-pass |
| |
| #![feature(offset_of_enum)] |
| |
| use std::marker::PhantomData; |
| use std::mem::offset_of; |
| |
| struct Alpha { |
| x: u8, |
| y: u16, |
| z: Beta, |
| } |
| |
| struct Beta(u8, u8); |
| |
| struct Gamma<T> { |
| x: u8, |
| y: u16, |
| _t: T, |
| } |
| |
| #[repr(C)] |
| struct Delta<T> { |
| _phantom: PhantomData<T>, |
| x: u8, |
| y: u16, |
| } |
| |
| enum Blah { |
| A, |
| B { x: u8, y: usize }, |
| } |
| |
| pub fn concrete() { |
| let x = offset_of!(Alpha, x); |
| let y = offset_of!(Alpha, y); |
| let h = offset_of!(Blah, B.y); |
| let z0 = offset_of!(Alpha, z.0); |
| let z1 = offset_of!(Alpha, z.1); |
| } |
| |
| pub fn generic<T>() { |
| let gx = offset_of!(Gamma<T>, x); |
| let gy = offset_of!(Gamma<T>, y); |
| let dx = offset_of!(Delta<T>, x); |
| let dy = offset_of!(Delta<T>, y); |
| } |