]> git.lizzy.rs Git - rust.git/blob - src/test/ui/issues/issue-11004.rs
Auto merge of #54624 - arielb1:evaluate-outlives, r=nikomatsakis
[rust.git] / src / test / ui / issues / issue-11004.rs
1 // Copyright 2016 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 use std::mem;
12
13 struct A { x: i32, y: f64 }
14
15 #[cfg(not(works))]
16 unsafe fn access(n:*mut A) -> (i32, f64) {
17     let x : i32 = n.x; //~ no field `x` on type `*mut A`
18     let y : f64 = n.y; //~ no field `y` on type `*mut A`
19     (x, y)
20 }
21
22 #[cfg(works)]
23 unsafe fn access(n:*mut A) -> (i32, f64) {
24     let x : i32 = (*n).x;
25     let y : f64 = (*n).y;
26     (x, y)
27 }
28
29 fn main() {
30     let a :  A = A { x: 3, y: 3.14 };
31     let p : &A = &a;
32     let (x,y) = unsafe {
33         let n : *mut A = mem::transmute(p);
34         access(n)
35     };
36     println!("x: {}, y: {}", x, y);
37 }