From 3c74d02319ea8ebbfd16f70f3154ce0aef87ae5c Mon Sep 17 00:00:00 2001 From: Scott McMurray Date: Mon, 10 Mar 2025 18:22:28 -0700 Subject: [PATCH] debug-assert that the size_hint is well-formed in `collect` --- library/core/src/iter/traits/iterator.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/library/core/src/iter/traits/iterator.rs b/library/core/src/iter/traits/iterator.rs index 42886e90f997d..25cb4795b4da6 100644 --- a/library/core/src/iter/traits/iterator.rs +++ b/library/core/src/iter/traits/iterator.rs @@ -1968,6 +1968,15 @@ pub trait Iterator { where Self: Sized, { + // This is too aggressive to turn on for everything all the time, but PR#137908 + // accidentally noticed that some rustc iterators had malformed `size_hint`s, + // so this will help catch such things in debug-assertions-std runners, + // even if users won't actually ever see it. + if cfg!(debug_assertions) { + let hint = self.size_hint(); + assert!(hint.1.is_none_or(|high| high >= hint.0), "Malformed size_hint {hint:?}"); + } + FromIterator::from_iter(self) }