From 9c0f3f7f2ae2492542fea99338fac13242cfe25e Mon Sep 17 00:00:00 2001 From: Mark Rousskov Date: Thu, 26 Dec 2019 12:12:42 -0500 Subject: [PATCH] Document safety of Path casting --- src/libstd/path.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/libstd/path.rs b/src/libstd/path.rs index 580ff1610ac..5278959b784 100644 --- a/src/libstd/path.rs +++ b/src/libstd/path.rs @@ -296,6 +296,13 @@ fn iter_after<'a, 'b, I, J>(mut iter: I, mut prefix: J) -> Option } // 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]) } } -- 2.44.0