]> git.lizzy.rs Git - rust.git/blob - src/test/ui/issues/issue-27060.rs
Auto merge of #54720 - davidtwco:issue-51191, r=nikomatsakis
[rust.git] / src / test / ui / issues / issue-27060.rs
1 // Copyright 2017 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 #[repr(packed)]
12 pub struct Good {
13     data: &'static u32,
14     data2: [&'static u32; 2],
15     aligned: [u8; 32],
16 }
17
18 #[repr(packed)]
19 pub struct JustArray {
20     array: [u32]
21 }
22
23 #[deny(safe_packed_borrows)]
24 fn main() {
25     let good = Good {
26         data: &0,
27         data2: [&0, &0],
28         aligned: [0; 32]
29     };
30
31     unsafe {
32         let _ = &good.data; // ok
33         let _ = &good.data2[0]; // ok
34     }
35
36     let _ = &good.data; //~ ERROR borrow of packed field is unsafe
37                         //~| hard error
38     let _ = &good.data2[0]; //~ ERROR borrow of packed field is unsafe
39                             //~| hard error
40     let _ = &*good.data; // ok, behind a pointer
41     let _ = &good.aligned; // ok, has align 1
42     let _ = &good.aligned[2]; // ok, has align 1
43 }