diff --git a/library/core/src/fmt/mod.rs b/library/core/src/fmt/mod.rs index e1b7b46a1ed2f..b24ef32711d4a 100644 --- a/library/core/src/fmt/mod.rs +++ b/library/core/src/fmt/mod.rs @@ -201,6 +201,11 @@ pub trait Write { impl SpecWriteFmt for &mut W { #[inline] default fn spec_write_fmt(mut self, args: Arguments<'_>) -> Result { + if unsafe { core::intrinsics::is_val_statically_known(args) } { + if let Some(s) = args.as_str() { + return self.write_str(s); + } + } write(&mut self, args) } } @@ -208,6 +213,11 @@ pub trait Write { impl SpecWriteFmt for &mut W { #[inline] fn spec_write_fmt(self, args: Arguments<'_>) -> Result { + if unsafe { core::intrinsics::is_val_statically_known(args) } { + if let Some(s) = args.as_str() { + return self.write_str(s); + } + } write(self, args) } } @@ -1582,7 +1592,13 @@ impl<'a> Formatter<'a> { /// assert_eq!(format!("{:0>8}", Foo(2)), "Foo 2"); /// ``` #[stable(feature = "rust1", since = "1.0.0")] + #[inline] pub fn write_fmt(&mut self, fmt: Arguments<'_>) -> Result { + if unsafe { core::intrinsics::is_val_statically_known(fmt) } { + if let Some(s) = fmt.as_str() { + return self.write_str(s); + } + } write(self.buf, fmt) } @@ -2272,7 +2288,13 @@ impl Write for Formatter<'_> { self.buf.write_char(c) } + #[inline] fn write_fmt(&mut self, args: Arguments<'_>) -> Result { + if unsafe { core::intrinsics::is_val_statically_known(args) } { + if let Some(s) = args.as_str() { + return self.write_str(s); + } + } write(self.buf, args) } }