Skip to content

Commit

Permalink
Merge #317
Browse files Browse the repository at this point in the history
317: Fix use of unaligned references in example r=eldruin a=adamgreig

A recent change in Rust to deny unaligned reference by default (rust-lang/rust#95372) caused the upstream rust build of this book to break: rust-lang/rust#96108 (comment)

This PR removes the unaligned references, instead using `addr_of!()` to get a raw pointer to print.

Co-authored-by: Adam Greig <[email protected]>
  • Loading branch information
bors[bot] and adamgreig authored Apr 20, 2022
2 parents 0d73660 + 058141f commit f7cefbb
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions src/c-tips/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -357,8 +357,13 @@ struct Foo {

fn main() {
let v = Foo { x: 0, y: 0, z: 0 };
// Unsafe is required to borrow a field of a packed struct.
unsafe { println!("{:p} {:p} {:p}", &v.x, &v.y, &v.z) };
// References must always be aligned, so to check the addresses of the
// struct's fields, we use `std::ptr::addr_of!()` to get a raw pointer
// instead of just printing `&v.x`.
let px = std::ptr::addr_of!(v.x);
let py = std::ptr::addr_of!(v.y);
let pz = std::ptr::addr_of!(v.z);
println!("{:p} {:p} {:p}", px, py, pz);
}

// 0x7ffd33598490 0x7ffd33598492 0x7ffd33598493
Expand Down

0 comments on commit f7cefbb

Please sign in to comment.