about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2024-05-23 17:11:11 +0000
committerbors <bors@rust-lang.org>2024-05-23 17:11:11 +0000
commit606afbb617a2949a4e35c4b0258ff94c980b9451 (patch)
treed452daae426b51b96851723e537458a204015593
parent9c8a58fdb895204cb19eeb97472a78caa1c57c19 (diff)
parent75f3cef756afa4ae5d8b9c9e6b52124701c2285b (diff)
Auto merge of #117804 - saethlin:no-recursive-panics, r=joboet
Panic directly in Arguments::new* instead of recursing

This has been bothering me because it looks very silly in MIR.
-rw-r--r--library/core/src/fmt/mod.rs7
1 files changed, 5 insertions, 2 deletions
diff --git a/library/core/src/fmt/mod.rs b/library/core/src/fmt/mod.rs
index 9b372eac524..60a27863413 100644
--- a/library/core/src/fmt/mod.rs
+++ b/library/core/src/fmt/mod.rs
@@ -340,7 +340,9 @@ impl<'a> Arguments<'a> {
     #[rustc_const_unstable(feature = "const_fmt_arguments_new", issue = "none")]
     pub const fn new_const(pieces: &'a [&'static str]) -> Self {
         if pieces.len() > 1 {
-            panic!("invalid args");
+            // Since panic!() expands to panic_fmt(format_args!()), using panic! here is both a
+            // bit silly and also significantly increases the amount of MIR generated by panics.
+            crate::panicking::panic_nounwind("invalid args");
         }
         Arguments { pieces, fmt: None, args: &[] }
     }
@@ -350,7 +352,8 @@ impl<'a> Arguments<'a> {
     #[inline]
     pub fn new_v1(pieces: &'a [&'static str], args: &'a [rt::Argument<'a>]) -> Arguments<'a> {
         if pieces.len() < args.len() || pieces.len() > args.len() + 1 {
-            panic!("invalid args");
+            // See Arguments::new_const for why we don't use panic!.
+            crate::panicking::panic_nounwind("invalid args");
         }
         Arguments { pieces, fmt: None, args }
     }