rust-lang / rust-lang/rust-clippy
ICE: useless_conversion lint panics in StyledBuffer::replace when suggesting removal of .into_iter()
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 13.5k
- Forks
- 2.2k
- Avg merge
- 2d 10h
- Merged PRs (30d)
- 32
Description
Summary
Version: Version clippy 0.1.95 (59807616e1 2026-04-14)
Problem: When running cargo clippy --all-targets --all-features -- -D warnings on a project with pyo3 bindings I got the attached error.
Trigger: I had code in the following style (simplified example):
// inside a TryFrom impl in src/intravascular/binding/classes.rs
for c in &py_in.lumen {
let rust_contour = c.to_rust_contour().map_err(|e| {
anyhow!(
"failed to convert lumen PyContour(id={}) to Contour: {:?}",
c.id,
e
)
})?;
lumen_points.extend(rust_contour.points.into_iter());
}
// and this pattern in a closure:
let rust_contour = c.to_rust_contour().map_err(|e| {
anyhow!(
"failed to convert PyContour(id={}) to Contour: {:?}",
c.id,
e
)
})?;
acc.extend(rust_contour.points.into_iter());
}
// and this in another function:
if std == 0.0 {
points_inside
} else {
points_inside
.into_iter()
.zip(dists.into_iter())
.filter(|(_p, d)| (d - mean).abs() <= 2.0 * std)
.map(|(p, _d)| p)
.collect()
}
The simplified example above may not reproduce alone -> the ICE occurred inside impl blocks and closures in a larger file.
Resolving: removing the useless conversion fixed the error.
Hypothesis: The panic occurs in annotate_snippets::renderer::styled_buffer::StyledBuffer::replace (frame 12) called from useless_conversion::UselessConversion::check_expr (frame 25), suggesting the lint is computing an inverted span (starts at 16, ends at 15) when building the suggestion to remove .into_iter().
Version
rustc 1.95.0 (59807616e 2026-04-14)
binary: rustc
commit-hash: 59807616e1fa2540724bfbac14d7976d7e4a3860
commit-date: 2026-04-14
host: x86_64-unknown-linux-gnu
release: 1.95.0
LLVM version: 22.1.2
Error output
thread 'rustc' (1699355) panicked at /rustc-dev/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/slice/index.rs:1031:55:
slice index starts at 16 but ends at 15
stack backtrace:
0: 0x7fe08a59314b - <<std[e28293b1aa0f68bd]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[c1f1a4ba060b9bfa]::fmt::Display>::fmt
1: 0x7fe08ac1f408 - core[c1f1a4ba060b9bfa]::fmt::write
2: 0x7fe08c1683b6 - <std[e28293b1aa0f68bd]::sys::stdio::unix::Stderr as std[e28293b1aa0f68bd]::io::Write>::write_fmt
3: 0x7fe08a569238 - std[e28293b1aa0f68bd]::panicking::default_hook::{closure#0}
4: 0x7fe08a5865b3 - std[e28293b1aa0f68bd]::panicking::default_hook
5: 0x7fe08955cc30 - std[e28293b1aa0f68bd]::panicking::update_hook::<alloc[fdfd2bd8633a6659]::boxed::Box<rustc_driver_impl[e4ca9dd5dd6cf2a8]::install_ice_hook::{closure#1}>>::{closure#0}
6: 0x7fe08a586892 - std[e28293b1aa0f68bd]::panicking::panic_with_hook
7: 0x7fe08a5692f8 - std[e28293b1aa0f68bd]::panicking::panic_handler::{closure#0}
8: 0x7fe08a560029 - std[e28293b1aa0f68bd]::sys::backtrace::__rust_end_short_backtrace::<std[e28293b1aa0f68bd]::panicking::panic_handler::{closure#0}, !>
9: 0x7fe08a56ad5d - __rustc[b7974e8690430dd9]::rust_begin_unwind
10: 0x7fe0872de82c - core[c1f1a4ba060b9bfa]::panicking::panic_fmt
11: 0x7fe08830875d - core[c1f1a4ba060b9bfa]::slice::index::slice_index_fail
12: 0x7fe088e7fae5 - <annotate_snippets[7d52211d2f32161f]::renderer::styled_buffer::StyledBuffer>::replace
13: 0x7fe08bf337b7 - annotate_snippets[7d52211d2f32161f]::renderer::render::render
14: 0x7fe08c181e06 - <rustc_errors[795cd5cf46ddce51]::annotate_snippet_emitter_writer::AnnotateSnippetEmitter>::emit_messages_default
15: 0x7fe08c179420 - <rustc_errors[795cd5cf46ddce51]::annotate_snippet_emitter_writer::AnnotateSnippetEmitter as rustc_errors[795cd5cf46ddce51]::emitter::Emitter>::emit_diagnostic
16: 0x7fe08c17c976 - <rustc_errors[795cd5cf46ddce51]::json::Diagnostic>::from_errors_diagnostic
17: 0x7fe08c17c0ef - <rustc_errors[795cd5cf46ddce51]::json::JsonEmitter as rustc_errors[795cd5cf46ddce51]::emitter::Emitter>::emit_diagnostic
18: 0x7fe08c171661 - <rustc_errors[795cd5cf46ddce51]::DiagCtxtInner>::emit_diagnostic::{closure#3}
19: 0x7fe08c16f440 - rustc_interface[c8170c4b7b680ee8]::callbacks::track_diagnostic::<core[c1f1a4ba060b9bfa]::option::Option<rustc_span[e3c9a1967c4921fd]::ErrorGuaranteed>>
20: 0x7fe08c16e4ee - <rustc_errors[795cd5cf46ddce51]::DiagCtxtInner>::emit_diagnostic
21: 0x7fe08c16e39d - <rustc_errors[795cd5cf46ddce51]::DiagCtxtHandle>::emit_diagnostic
22: 0x7fe08c16e25b - <() as rustc_errors[795cd5cf46ddce51]::diagnostic::EmissionGuarantee>::emit_producing_guarantee
23: 0x7fe08bc7f229 - rustc_middle[9956b31dc9b62104]::lint::lint_level::lint_level_impl
24: 0x56041191f9ec - <rustc_lint[754bcbf59f34f28d]::context::LateContext as rustc_lint[754bcbf59f34f28d]::context::LintContext>::opt_span_lint::<rustc_span[e3c9a1967c4921fd]::span_encoding::Span, clippy_utils[5cfafd3c36323ad7]::diagnostics::span_lint_and_then<rustc_lint[754bcbf59f34f28d]::context::LateContext, rustc_span[e3c9a1967c4921fd]::span_encoding::Span, &str, <clippy_lints[2bd58402bd437290]::useless_conversion::UselessConversion as rustc_lint[754bcbf59f34f28d]::passes::LateLintPass>::check_expr::{closure#4}>::{closure#0}>
25: 0x560411bd88c7 - <clippy_lints[2bd58402bd437290]::useless_conversion::UselessConversion as rustc_lint[754bcbf59f34f28d]::passes::LateLintPass>::check_expr
26: 0x7fe089a423f0 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
27: 0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
28: 0x7fe089a426b4 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
29: 0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
30: 0x7fe089a4269c - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
31: 0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
32: 0x7fe089a4269c - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
33: 0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
34: 0x7fe089a4269c - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
35: 0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
36: 0x7fe089ac3a51 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_block
37: 0x7fe089a4283c - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
38: 0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
39: 0x7fe089a425c7 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
40: 0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
41: 0x7fe089ac3a51 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_block
42: 0x7fe089a4283c - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
43: 0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
44: 0x7fe089a425c7 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
45: 0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
46: 0x7fe089ac3842 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_block
47: 0x7fe089a4283c - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
48: 0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
49: 0x7fe089a428e4 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
50: 0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
51: 0x7fe089ac36c9 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_block
52: 0x7fe089a4283c - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
53: 0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
54: 0x7fe089a428e4 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
55: 0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
56: 0x7fe089a425c7 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
57: 0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
58: 0x7fe089ac36c9 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_block
59: 0x7fe089a4283c - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
60: 0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
61: 0x7fe089ac3ce1 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_nested_body
62: 0x7fe089ac431e - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_fn
63: 0x7fe089ad9aac - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_nested_item
64: 0x7fe089a5fe09 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass>>::process_mod
65: 0x7fe089ad8f5f - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_nested_item
66: 0x7fe089a5fe09 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass>>::process_mod
67: 0x7fe089ad8f5f - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_nested_item
68: 0x7fe089a5fe09 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass>>::process_mod
69: 0x7fe089ad8f5f - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_nested_item
70: 0x7fe089a5fe09 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass>>::process_mod
71: 0x7fe08ba4cab7 - rustc_lint[754bcbf59f34f28d]::late::check_crate::{closure#0}
72: 0x7fe08ba4bdbf - rustc_lint[754bcbf59f34f28d]::late::check_crate
73: 0x7fe08ba490f6 - rustc_interface[c8170c4b7b680ee8]::passes::analysis::{closure#0}::{closure#0}::{closure#2}
74: 0x7fe08ba48ed7 - rustc_data_structures[2c167692117eb14d]::sync::parallel::par_fns
75: 0x7fe08ba48e66 - rustc_interface[c8170c4b7b680ee8]::passes::analysis::{closure#0}::{closure#0}
76: 0x7fe08ba48ed7 - rustc_data_structures[2c167692117eb14d]::sync::parallel::par_fns
77: 0x7fe08ad36ad7 - rustc_interface[c8170c4b7b680ee8]::passes::analysis
78: 0x7fe08c1ec447 - rustc_query_impl[b21371cac9e22a84]::execution::try_execute_query::<rustc_middle[9956b31dc9b62104]::query::caches::SingleCache<rustc_middle[9956b31dc9b62104]::query::erase::ErasedData<[u8; 0usize]>>, true>
79: 0x7fe08c1ebdb4 - rustc_query_impl[b21371cac9e22a84]::query_impl::analysis::execute_query_incr::__rust_end_short_backtrace
80: 0x7fe08be5632d - rustc_interface[c8170c4b7b680ee8]::interface::run_compiler::<(), rustc_driver_impl[e4ca9dd5dd6cf2a8]::run_compiler::{closure#0}>::{closure#1}
81: 0x7fe08be2663e - std[e28293b1aa0f68bd]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[c8170c4b7b680ee8]::util::run_in_thread_with_globals<rustc_interface[c8170c4b7b680ee8]::util::run_in_thread_pool_with_globals<rustc_interface[c8170c4b7b680ee8]::interface::run_compiler<(), rustc_driver_impl[e4ca9dd5dd6cf2a8]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
82: 0x7fe08be26ca0 - <std[e28293b1aa0f68bd]::thread::lifecycle::spawn_unchecked<rustc_interface[c8170c4b7b680ee8]::util::run_in_thread_with_globals<rustc_interface[c8170c4b7b680ee8]::util::run_in_thread_pool_with_globals<rustc_interface[c8170c4b7b680ee8]::interface::run_compiler<(), rustc_driver_impl[e4ca9dd5dd6cf2a8]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core[c1f1a4ba060b9bfa]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
83: 0x7fe08be27b2c - <std[e28293b1aa0f68bd]::sys::thread::unix::Thread>::new::thread_start
84: 0x7fe08588aaa4 - <unknown>
85: 0x7fe085917c6c - <unknown>
86: 0x0 - <unknown>
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start at clippy_lints/useless_conversion.rs, especially UselessConversion::check_expr, and compare its suggestion span with annotate_snippets::renderer::styled_buffer::StyledBuffer::replace. Reproduce with the shown .into_iter() patterns in impl blocks and closures; done means cargo clippy no longer panics and the useless_conversion suggestion remains valid.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100