Rollup merge of #61969 - MikailBag:master, r=Centril
Add #[repr(transparent)] for several types In some functions, types mentioned in this PR are transmuted into their inner value. Example for `PathBuf`: https://github.com/rust-lang/rust/blob/master/src/libstd/path.rs#L1132. This PR adds `#[repr(transparent)]` to those types, so their correct behavior doesn't depend on compiler details. (As far as I understand, currently that line, converting `PathBuf` to `Vec<u8>`, is UB).
This commit is contained in:
commit
88629778e6
4 changed files with 30 additions and 0 deletions
|
@ -1123,6 +1123,12 @@ impl FusedIterator for Ancestors<'_> {}
|
|||
/// Which method works best depends on what kind of situation you're in.
|
||||
#[derive(Clone)]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
// FIXME:
|
||||
// `PathBuf::as_mut_vec` current implementation relies
|
||||
// on `PathBuf` being layout-compatible with `Vec<u8>`.
|
||||
// When attribute privacy is implemented, `PathBuf` should be annotated as `#[repr(transparent)]`.
|
||||
// Anyway, `PathBuf` representation and layout are considered implementation detail, are
|
||||
// not documented and must not be relied upon.
|
||||
pub struct PathBuf {
|
||||
inner: OsString,
|
||||
}
|
||||
|
@ -1745,6 +1751,12 @@ impl AsRef<OsStr> for PathBuf {
|
|||
/// assert_eq!(extension, Some(OsStr::new("txt")));
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
// FIXME:
|
||||
// `Path::new` current implementation relies
|
||||
// on `Path` being layout-compatible with `OsStr`.
|
||||
// When attribute privacy is implemented, `Path` should be annotated as `#[repr(transparent)]`.
|
||||
// Anyway, `Path` representation and layout are considered implementation detail, are
|
||||
// not documented and must not be relied upon.
|
||||
pub struct Path {
|
||||
inner: OsStr,
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue