Skip to content

Commit 7b11879

Browse files
committed
expand unaligned_references test
1 parent 783139b commit 7b11879

File tree

2 files changed

+34
-11
lines changed

2 files changed

+34
-11
lines changed

src/test/ui/lint/unaligned_references.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,27 @@
22

33
#[repr(packed)]
44
pub struct Good {
5-
data: &'static u32,
6-
data2: [&'static u32; 2],
5+
data: u64,
6+
ptr: &'static u64,
7+
data2: [u64; 2],
78
aligned: [u8; 32],
89
}
910

1011
fn main() {
1112
unsafe {
12-
let good = Good { data: &0, data2: [&0, &0], aligned: [0; 32] };
13+
let good = Good { data: 0, ptr: &0, data2: [0, 0], aligned: [0; 32] };
1314

15+
let _ = &good.ptr; //~ ERROR reference to packed field
1416
let _ = &good.data; //~ ERROR reference to packed field
17+
// Error even when turned into raw pointer immediately.
1518
let _ = &good.data as *const _; //~ ERROR reference to packed field
1619
let _: *const _ = &good.data; //~ ERROR reference to packed field
20+
// Error on method call.
21+
let _ = good.data.clone(); //~ ERROR reference to packed field
22+
// Error for nested fields.
1723
let _ = &good.data2[0]; //~ ERROR reference to packed field
18-
let _ = &*good.data; // ok, behind a pointer
24+
25+
let _ = &*good.ptr; // ok, behind a pointer
1926
let _ = &good.aligned; // ok, has align 1
2027
let _ = &good.aligned[2]; // ok, has align 1
2128
}
Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
error: reference to packed field is unaligned
2-
--> $DIR/unaligned_references.rs:14:17
2+
--> $DIR/unaligned_references.rs:15:17
33
|
4-
LL | let _ = &good.data;
5-
| ^^^^^^^^^^
4+
LL | let _ = &good.ptr;
5+
| ^^^^^^^^^
66
|
77
note: the lint level is defined here
88
--> $DIR/unaligned_references.rs:1:9
@@ -12,28 +12,44 @@ LL | #![deny(unaligned_references)]
1212
= note: fields of packed structs are not properly aligned, and creating a misaligned reference is undefined behavior (even if that reference is never dereferenced)
1313

1414
error: reference to packed field is unaligned
15-
--> $DIR/unaligned_references.rs:15:17
15+
--> $DIR/unaligned_references.rs:16:17
16+
|
17+
LL | let _ = &good.data;
18+
| ^^^^^^^^^^
19+
|
20+
= note: fields of packed structs are not properly aligned, and creating a misaligned reference is undefined behavior (even if that reference is never dereferenced)
21+
22+
error: reference to packed field is unaligned
23+
--> $DIR/unaligned_references.rs:18:17
1624
|
1725
LL | let _ = &good.data as *const _;
1826
| ^^^^^^^^^^
1927
|
2028
= note: fields of packed structs are not properly aligned, and creating a misaligned reference is undefined behavior (even if that reference is never dereferenced)
2129

2230
error: reference to packed field is unaligned
23-
--> $DIR/unaligned_references.rs:16:27
31+
--> $DIR/unaligned_references.rs:19:27
2432
|
2533
LL | let _: *const _ = &good.data;
2634
| ^^^^^^^^^^
2735
|
2836
= note: fields of packed structs are not properly aligned, and creating a misaligned reference is undefined behavior (even if that reference is never dereferenced)
2937

3038
error: reference to packed field is unaligned
31-
--> $DIR/unaligned_references.rs:17:17
39+
--> $DIR/unaligned_references.rs:21:17
40+
|
41+
LL | let _ = good.data.clone();
42+
| ^^^^^^^^^
43+
|
44+
= note: fields of packed structs are not properly aligned, and creating a misaligned reference is undefined behavior (even if that reference is never dereferenced)
45+
46+
error: reference to packed field is unaligned
47+
--> $DIR/unaligned_references.rs:23:17
3248
|
3349
LL | let _ = &good.data2[0];
3450
| ^^^^^^^^^^^^^^
3551
|
3652
= note: fields of packed structs are not properly aligned, and creating a misaligned reference is undefined behavior (even if that reference is never dereferenced)
3753

38-
error: aborting due to 4 previous errors
54+
error: aborting due to 6 previous errors
3955

0 commit comments

Comments
 (0)