2023-05-25 13:48:12 -05:00
|
|
|
//@ edition: 2018
|
|
|
|
|
|
|
|
// tests that the pointee type of a raw pointer must be known to call methods on it
|
|
|
|
// see also: `tests/ui/editions/edition-raw-pointer-method-2018.rs`
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let val = 1_u32;
|
|
|
|
let ptr = &val as *const u32;
|
|
|
|
unsafe {
|
|
|
|
let _a: i32 = (ptr as *const _).read();
|
2024-03-20 05:25:13 -05:00
|
|
|
//~^ ERROR type annotations needed
|
2023-05-25 13:48:12 -05:00
|
|
|
let b = ptr as *const _;
|
2024-03-20 05:25:13 -05:00
|
|
|
//~^ ERROR type annotations needed
|
2023-05-25 13:48:12 -05:00
|
|
|
let _b: u8 = b.read();
|
|
|
|
let _c = (ptr as *const u8).read(); // we know the type here
|
|
|
|
}
|
|
|
|
|
|
|
|
let mut val = 2_u32;
|
|
|
|
let ptr = &mut val as *mut u32;
|
|
|
|
unsafe {
|
|
|
|
let _a: i32 = (ptr as *mut _).read();
|
2024-03-20 05:25:13 -05:00
|
|
|
//~^ ERROR type annotations needed
|
2023-05-25 13:48:12 -05:00
|
|
|
let b = ptr as *mut _;
|
2024-03-20 05:25:13 -05:00
|
|
|
//~^ ERROR type annotations needed
|
2023-05-25 13:48:12 -05:00
|
|
|
b.write(10);
|
|
|
|
(ptr as *mut i32).write(1000); // we know the type here
|
|
|
|
}
|
|
|
|
}
|