38 lines
632 B
Rust
38 lines
632 B
Rust
//@ revisions: current next
|
|
//@ ignore-compare-mode-next-solver (explicit revisions)
|
|
//@[next] compile-flags: -Znext-solver
|
|
//@ run-pass
|
|
|
|
#![feature(offset_of_slice)]
|
|
|
|
use std::mem::offset_of;
|
|
|
|
trait Mirror {
|
|
type Assoc: ?Sized;
|
|
}
|
|
impl<T: ?Sized> Mirror for T {
|
|
type Assoc = T;
|
|
}
|
|
|
|
#[repr(C)]
|
|
struct S {
|
|
a: u8,
|
|
b: (u8, u8),
|
|
c: <[i32] as Mirror>::Assoc,
|
|
}
|
|
|
|
#[repr(C)]
|
|
struct T {
|
|
x: i8,
|
|
y: S,
|
|
}
|
|
|
|
type Tup = (i16, <[i32] as Mirror>::Assoc);
|
|
|
|
fn main() {
|
|
assert_eq!(offset_of!(S, c), 4);
|
|
assert_eq!(offset_of!(T, y), 4);
|
|
assert_eq!(offset_of!(T, y.c), 8);
|
|
assert_eq!(offset_of!(Tup, 1), 4);
|
|
}
|