Skip to content

Commit

Permalink
Rollup merge of #67635 - Mark-Simulacrum:path-doc-unsafe, r=dtolnay
Browse files Browse the repository at this point in the history
Document safety of Path casting

I would personally feel more comfortable making the relevant (internal anyway) types repr(transparent) and then documenting that we can make these casts because of that, but I believe this is a more minimal PR, so posting it first.

Resolves #45910.
  • Loading branch information
Mark-Simulacrum committed Dec 26, 2019
2 parents 6a827fb + 9c0f3f7 commit bcb7553
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/libstd/path.rs
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,13 @@ where
}

// See note at the top of this module to understand why these are used:
//
// These casts are safe as OsStr is internally a wrapper around [u8] on all
// platforms.
//
// Note that currently this relies on the special knowledge that libstd has;
// these types are single-element structs but are not marked repr(transparent)
// or repr(C) which would make these casts allowable outside std.
fn os_str_as_u8_slice(s: &OsStr) -> &[u8] {
unsafe { &*(s as *const OsStr as *const [u8]) }
}
Expand Down

0 comments on commit bcb7553

Please sign in to comment.