diff options
| author | Mark Rousskov <mark.simulacrum@gmail.com> | 2019-08-11 15:18:38 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-08-11 15:18:38 -0400 |
| commit | 88629778e6faeda18409ffaa9a00291e3605bae3 (patch) | |
| tree | 79be04b2c4142de3325abb0c070ecfb930d0f1a3 /src/libstd/sys_common | |
| parent | 8a068699a24de306334a1f66b9a83552766d853c (diff) | |
| parent | 740f8db85572aef58d0734fc60bc2b54862ebbb0 (diff) | |
| download | rust-88629778e6faeda18409ffaa9a00291e3605bae3.tar.gz rust-88629778e6faeda18409ffaa9a00291e3605bae3.zip | |
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).
Diffstat (limited to 'src/libstd/sys_common')
| -rw-r--r-- | src/libstd/sys_common/os_str_bytes.rs | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/libstd/sys_common/os_str_bytes.rs b/src/libstd/sys_common/os_str_bytes.rs index a4961974d89..d734f412bf8 100644 --- a/src/libstd/sys_common/os_str_bytes.rs +++ b/src/libstd/sys_common/os_str_bytes.rs @@ -18,6 +18,12 @@ pub(crate) struct Buf { pub inner: Vec<u8> } +// FIXME: +// `Buf::as_slice` current implementation relies +// on `Slice` being layout-compatible with `[u8]`. +// When attribute privacy is implemented, `Slice` should be annotated as `#[repr(transparent)]`. +// Anyway, `Slice` representation and layout are considered implementation detail, are +// not documented and must not be relied upon. pub(crate) struct Slice { pub inner: [u8] } |
