Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions library/std/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -450,6 +450,19 @@
since = "1.90.0"
)]

// Macro used when rendering with `rustdoc` to replace code with `loop {}`.
#[allow(unused_macros)]
macro_rules! no_code {
($($code:tt)*) => {
#[cfg(not(doc))]
{
$($code)*
}
#[cfg(doc)]
loop {}
}
}
Comment on lines +454 to +464

@kpreid kpreid Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Couldn’t this macro be done more efficiently by cfging its definition, not its body?

Suggested change
#[allow(unused_macros)]
macro_rules! no_code {
($($code:tt)*) => {
#[cfg(not(doc))]
{
$($code)*
}
#[cfg(doc)]
loop {}
}
}
cfg_select! {
doc => {
#[allow(unused_macros)]
macro_rules! no_code {
($($code:tt)*) => { loop {} }
}
}
_ => {
#[allow(unused_macros)]
macro_rules! no_code {
($($code:tt)*) => { $($code)* }
}
}
}

View changes since the review


// The Rust prelude
// The compiler expects the prelude definition to be defined before its use statement.
pub mod prelude;
Expand Down
94 changes: 70 additions & 24 deletions library/std/src/os/darwin/fs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,70 +89,114 @@ impl MetadataExt for Metadata {
#[allow(deprecated)]
#[cfg(any(doc, target_os = "macos", target_os = "ios"))]
fn as_raw_stat(&self) -> &super::raw::stat {
unsafe { &*(self.as_inner().as_inner() as *const libc::stat as *const super::raw::stat) }
no_code! {
unsafe { &*(self.as_inner().as_inner() as *const libc::stat as *const super::raw::stat) }
}
}
fn st_dev(&self) -> u64 {
self.as_inner().as_inner().st_dev as u64
no_code! {
self.as_inner().as_inner().st_dev as u64
}
}
fn st_ino(&self) -> u64 {
self.as_inner().as_inner().st_ino as u64
no_code! {
self.as_inner().as_inner().st_ino as u64
}
}
fn st_mode(&self) -> u32 {
self.as_inner().as_inner().st_mode as u32
no_code! {
self.as_inner().as_inner().st_mode as u32
}
}
fn st_nlink(&self) -> u64 {
self.as_inner().as_inner().st_nlink as u64
no_code! {
self.as_inner().as_inner().st_nlink as u64
}
}
fn st_uid(&self) -> u32 {
self.as_inner().as_inner().st_uid as u32
no_code! {
self.as_inner().as_inner().st_uid as u32
}
}
fn st_gid(&self) -> u32 {
self.as_inner().as_inner().st_gid as u32
no_code! {
self.as_inner().as_inner().st_gid as u32
}
}
fn st_rdev(&self) -> u64 {
self.as_inner().as_inner().st_rdev as u64
no_code! {
self.as_inner().as_inner().st_rdev as u64
}
}
fn st_size(&self) -> u64 {
self.as_inner().as_inner().st_size as u64
no_code! {
self.as_inner().as_inner().st_size as u64
}
}
fn st_atime(&self) -> i64 {
self.as_inner().as_inner().st_atime as i64
no_code! {
self.as_inner().as_inner().st_atime as i64
}
}
fn st_atime_nsec(&self) -> i64 {
self.as_inner().as_inner().st_atime_nsec as i64
no_code! {
self.as_inner().as_inner().st_atime_nsec as i64
}
}
fn st_mtime(&self) -> i64 {
self.as_inner().as_inner().st_mtime as i64
no_code! {
self.as_inner().as_inner().st_mtime as i64
}
}
fn st_mtime_nsec(&self) -> i64 {
self.as_inner().as_inner().st_mtime_nsec as i64
no_code! {
self.as_inner().as_inner().st_mtime_nsec as i64
}
}
fn st_ctime(&self) -> i64 {
self.as_inner().as_inner().st_ctime as i64
no_code! {
self.as_inner().as_inner().st_ctime as i64
}
}
fn st_ctime_nsec(&self) -> i64 {
self.as_inner().as_inner().st_ctime_nsec as i64
no_code! {
self.as_inner().as_inner().st_ctime_nsec as i64
}
}
fn st_birthtime(&self) -> i64 {
self.as_inner().as_inner().st_birthtime as i64
no_code! {
self.as_inner().as_inner().st_birthtime as i64
}
}
fn st_birthtime_nsec(&self) -> i64 {
self.as_inner().as_inner().st_birthtime_nsec as i64
no_code! {
self.as_inner().as_inner().st_birthtime_nsec as i64
}
}
fn st_blksize(&self) -> u64 {
self.as_inner().as_inner().st_blksize as u64
no_code! {
self.as_inner().as_inner().st_blksize as u64
}
}
fn st_blocks(&self) -> u64 {
self.as_inner().as_inner().st_blocks as u64
no_code! {
self.as_inner().as_inner().st_blocks as u64
}
}
fn st_gen(&self) -> u32 {
self.as_inner().as_inner().st_gen as u32
no_code! {
self.as_inner().as_inner().st_gen as u32
}
}
fn st_flags(&self) -> u32 {
self.as_inner().as_inner().st_flags as u32
no_code! {
self.as_inner().as_inner().st_flags as u32
}
}
fn st_lspare(&self) -> u32 {
self.as_inner().as_inner().st_lspare as u32
no_code! {
self.as_inner().as_inner().st_lspare as u32
}
}
#[cfg(target_os = "macos")]
fn st_qspare(&self) -> [u64; 2] {
Expand All @@ -172,7 +216,9 @@ pub impl(self) trait FileTimesExt {
#[stable(feature = "file_set_times", since = "1.75.0")]
impl FileTimesExt for fs::FileTimes {
fn set_created(mut self, t: SystemTime) -> Self {
self.as_inner_mut().set_created(t.into_inner());
self
no_code! {
self.as_inner_mut().set_created(t.into_inner());
self
}
}
}
36 changes: 27 additions & 9 deletions library/std/src/os/linux/process.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,9 @@ impl PidFd {
///
/// [`Child::kill`]: process::Child::kill
pub fn kill(&self) -> Result<()> {
self.inner.kill()
no_code! {
self.inner.kill()
}
}

/// Waits for the child to exit completely, returning the status that it exited with.
Expand All @@ -75,7 +77,9 @@ impl PidFd {
///
/// [`Child::wait`]: process::Child::wait
pub fn wait(&self) -> Result<ExitStatus> {
self.inner.wait().map(FromInner::from_inner)
no_code! {
self.inner.wait().map(FromInner::from_inner)
}
}

/// Attempts to collect the exit status of the child if it has already exited.
Expand All @@ -85,7 +89,9 @@ impl PidFd {
///
/// [`Child::try_wait`]: process::Child::try_wait
pub fn try_wait(&self) -> Result<Option<ExitStatus>> {
Ok(self.inner.try_wait()?.map(FromInner::from_inner))
no_code! {
Ok(self.inner.try_wait()?.map(FromInner::from_inner))
}
}
}

Expand All @@ -111,37 +117,49 @@ impl IntoInner<InnerPidFd> for PidFd {
impl AsRawFd for PidFd {
#[inline]
fn as_raw_fd(&self) -> RawFd {
self.as_inner().as_inner().as_raw_fd()
no_code! {
self.as_inner().as_inner().as_raw_fd()
}
}
}

impl FromRawFd for PidFd {
unsafe fn from_raw_fd(fd: RawFd) -> Self {
Self::from_inner(InnerPidFd::from_raw_fd(fd))
no_code! {
Self::from_inner(InnerPidFd::from_raw_fd(fd))
}
}
}

impl IntoRawFd for PidFd {
fn into_raw_fd(self) -> RawFd {
self.into_inner().into_inner().into_raw_fd()
no_code! {
self.into_inner().into_inner().into_raw_fd()
}
}
}

impl AsFd for PidFd {
fn as_fd(&self) -> BorrowedFd<'_> {
self.as_inner().as_inner().as_fd()
no_code! {
self.as_inner().as_inner().as_fd()
}
}
}

impl From<OwnedFd> for PidFd {
fn from(fd: OwnedFd) -> Self {
Self::from_inner(InnerPidFd::from_inner(FileDesc::from_inner(fd)))
no_code! {
Self::from_inner(InnerPidFd::from_inner(FileDesc::from_inner(fd)))
}
}
}

impl From<PidFd> for OwnedFd {
fn from(pid_fd: PidFd) -> Self {
pid_fd.into_inner().into_inner().into_inner()
no_code! {
pid_fd.into_inner().into_inner().into_inner()
}
}
}

Expand Down
24 changes: 18 additions & 6 deletions library/std/src/os/wasi/fs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -334,13 +334,19 @@ pub trait MetadataExt {

impl MetadataExt for fs::Metadata {
fn dev(&self) -> u64 {
self.as_inner().as_inner().st_dev
no_code! {
self.as_inner().as_inner().st_dev
}
}
fn ino(&self) -> u64 {
self.as_inner().as_inner().st_ino
no_code! {
self.as_inner().as_inner().st_ino
}
}
fn nlink(&self) -> u64 {
self.as_inner().as_inner().st_nlink
no_code! {
self.as_inner().as_inner().st_nlink
}
}
}

Expand All @@ -359,13 +365,19 @@ pub trait FileTypeExt {

impl FileTypeExt for fs::FileType {
fn is_block_device(&self) -> bool {
self.as_inner().is(libc::S_IFBLK)
no_code! {
self.as_inner().is(libc::S_IFBLK)
}
}
fn is_char_device(&self) -> bool {
self.as_inner().is(libc::S_IFCHR)
no_code! {
self.as_inner().is(libc::S_IFCHR)
}
}
fn is_socket(&self) -> bool {
self.as_inner().is(libc::S_IFSOCK)
no_code! {
self.as_inner().is(libc::S_IFSOCK)
}
}
}

Expand Down
8 changes: 6 additions & 2 deletions library/std/src/os/windows/ffi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,9 @@ pub impl(self) trait OsStringExt {
#[stable(feature = "rust1", since = "1.0.0")]
impl OsStringExt for OsString {
fn from_wide(wide: &[u16]) -> OsString {
FromInner::from_inner(Buf { inner: Wtf8Buf::from_wide(wide) })
no_code! {
FromInner::from_inner(Buf { inner: Wtf8Buf::from_wide(wide) })
}
}
}

Expand Down Expand Up @@ -126,7 +128,9 @@ pub impl(self) trait OsStrExt {
impl OsStrExt for OsStr {
#[inline]
fn encode_wide(&self) -> EncodeWide<'_> {
EncodeWide { inner: self.as_inner().inner.encode_wide() }
no_code! {
EncodeWide { inner: self.as_inner().inner.encode_wide() }
}
}
}

Expand Down
Loading
Loading