diff --git a/library/std/src/io/stdio.rs b/library/std/src/io/stdio.rs index e3b62894d0f22..1b33d94ad1808 100644 --- a/library/std/src/io/stdio.rs +++ b/library/std/src/io/stdio.rs @@ -437,6 +437,29 @@ impl Read for Stdin { } } + +#[stable(feature = "rust1", since = "1.0.0")] +impl Read for &Stdin { + fn read(&mut self, buf: &mut [u8]) -> io::Result { + self.lock().read(buf) + } + fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> io::Result { + self.lock().read_vectored(bufs) + } + #[inline] + fn is_read_vectored(&self) -> bool { + self.lock().is_read_vectored() + } + fn read_to_end(&mut self, buf: &mut Vec) -> io::Result { + self.lock().read_to_end(buf) + } + fn read_to_string(&mut self, buf: &mut String) -> io::Result { + self.lock().read_to_string(buf) + } + fn read_exact(&mut self, buf: &mut [u8]) -> io::Result<()> { + self.lock().read_exact(buf) + } +} // only used by platform-dependent io::copy specializations, i.e. unused on some platforms #[cfg(any(target_os = "linux", target_os = "android"))] impl StdinLock<'_> { diff --git a/src/test/ui/stdlib-unit-tests/issue-95622.rs b/src/test/ui/stdlib-unit-tests/issue-95622.rs new file mode 100644 index 0000000000000..301dcd5a43e80 --- /dev/null +++ b/src/test/ui/stdlib-unit-tests/issue-95622.rs @@ -0,0 +1,9 @@ +// check-pass +use std::io::{self, Read}; + +fn main() { + let x = io::stdin(); + foo(&x); +} + +fn foo(t: T) {}