merge packed_static and packed_struct
This commit is contained in:
parent
974f9c3023
commit
3e3613f2e2
2 changed files with 53 additions and 47 deletions
|
|
@ -1,10 +0,0 @@
|
|||
#[repr(packed)]
|
||||
struct Foo {
|
||||
i: i32
|
||||
}
|
||||
|
||||
fn main() {
|
||||
assert_eq!({FOO.i}, 42);
|
||||
}
|
||||
|
||||
static FOO: Foo = Foo { i: 42 };
|
||||
|
|
@ -1,28 +1,48 @@
|
|||
#![feature(unsize, coerce_unsized)]
|
||||
|
||||
#[repr(packed)]
|
||||
struct S {
|
||||
a: i32,
|
||||
b: i64,
|
||||
}
|
||||
|
||||
#[repr(packed)]
|
||||
#[allow(dead_code)]
|
||||
struct Test1<'a> {
|
||||
x: u8,
|
||||
other: &'a u32,
|
||||
}
|
||||
fn test_basic() {
|
||||
#[repr(packed)]
|
||||
struct S {
|
||||
a: i32,
|
||||
b: i64,
|
||||
}
|
||||
|
||||
#[repr(packed)]
|
||||
#[allow(dead_code)]
|
||||
struct Test2<'a> {
|
||||
x: u8,
|
||||
other: &'a Test1<'a>,
|
||||
}
|
||||
#[repr(packed)]
|
||||
#[allow(dead_code)]
|
||||
struct Test1<'a> {
|
||||
x: u8,
|
||||
other: &'a u32,
|
||||
}
|
||||
|
||||
fn test(t: Test2) {
|
||||
let x = *t.other.other;
|
||||
assert_eq!(x, 42);
|
||||
#[repr(packed)]
|
||||
#[allow(dead_code)]
|
||||
struct Test2<'a> {
|
||||
x: u8,
|
||||
other: &'a Test1<'a>,
|
||||
}
|
||||
|
||||
fn test(t: Test2) {
|
||||
let x = *t.other.other;
|
||||
assert_eq!(x, 42);
|
||||
}
|
||||
|
||||
let mut x = S {
|
||||
a: 42,
|
||||
b: 99,
|
||||
};
|
||||
let a = x.a;
|
||||
let b = x.b;
|
||||
assert_eq!(a, 42);
|
||||
assert_eq!(b, 99);
|
||||
// can't do `assert_eq!(x.a, 42)`, because `assert_eq!` takes a reference
|
||||
assert_eq!({x.a}, 42);
|
||||
assert_eq!({x.b}, 99);
|
||||
|
||||
x.b = 77;
|
||||
assert_eq!({x.b}, 77);
|
||||
|
||||
test(Test2 { x: 0, other: &Test1 { x: 0, other: &42 }});
|
||||
}
|
||||
|
||||
fn test_unsizing() {
|
||||
|
|
@ -83,25 +103,21 @@ fn test_inner_packed() {
|
|||
let _o2 = o.clone();
|
||||
}
|
||||
|
||||
fn test_static() {
|
||||
#[repr(packed)]
|
||||
struct Foo {
|
||||
i: i32
|
||||
}
|
||||
|
||||
static FOO: Foo = Foo { i: 42 };
|
||||
|
||||
assert_eq!({FOO.i}, 42);
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut x = S {
|
||||
a: 42,
|
||||
b: 99,
|
||||
};
|
||||
let a = x.a;
|
||||
let b = x.b;
|
||||
assert_eq!(a, 42);
|
||||
assert_eq!(b, 99);
|
||||
// can't do `assert_eq!(x.a, 42)`, because `assert_eq!` takes a reference
|
||||
assert_eq!({x.a}, 42);
|
||||
assert_eq!({x.b}, 99);
|
||||
|
||||
x.b = 77;
|
||||
assert_eq!({x.b}, 77);
|
||||
|
||||
test(Test2 { x: 0, other: &Test1 { x: 0, other: &42 }});
|
||||
|
||||
test_basic();
|
||||
test_unsizing();
|
||||
test_drop();
|
||||
test_inner_packed();
|
||||
test_static();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue