We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
bytes::Bytes::from_static
futures::stream::unfold
Clippy crashes when calling bytes::Bytes::from_static with computed slice size and when the code is inside futures::stream::unfold.
Test case code that reproduces the issue with alternatives that work:
// src/lib.rs // // Cargo.toml // ``` // [package] // name = "clippy-crash" // version = "0.1.0" // edition = "2021" // // [dev-dependencies] // bytes = "1.5.0" // futures = "0.3.29" // ``` // // To see the crash, run // ``` // cargo clippy --tests // ``` #[cfg(test)] mod tests { use bytes::Bytes; #[test] fn clippy_ok_when_initializing_outside_async_block() { let _chunk = Bytes::from_static(&[0; 256 * 1024]); } #[test] fn clippy_ok_when_initializing_inside_async_block() { #[allow(clippy::let_underscore_future)] let _ = async move { Bytes::from_static(&[0; 256 * 1024]) }; } #[test] fn clippy_ok_when_initializing_bytes_from_static_with_const_size_inside_futures_stream_unfold() { const CHUNK_SIZE: usize = 256 * 1024; let _ = futures::stream::unfold(0, |counter| async move { if counter < 1 { let chunk = Bytes::from_static(&[0; CHUNK_SIZE]); Some((chunk, counter + 1)) } else { None } }); } #[test] fn clippy_ok_when_initializing_bytes_from_vec_inside_futures_stream_unfold() { let _ = futures::stream::unfold(0, |counter| async move { if counter < 1 { let chunk = Bytes::from(vec![0u8; 256]); Some((chunk, counter + 1)) } else { None } }); } #[test] fn clippy_crash_when_initializing_bytes_from_static_with_evaluated_size_inside_futures_stream_unfold() { let _ = futures::stream::unfold(0, |counter| async move { if counter < 1 { // The following will crash clippy at least with // `stable-x86_64-unknown-linux-gnu - rustc 1.74.0` // and // `stable-x86_64-unknown-linux-gnu - rustc 1.74.1` let chunk = Bytes::from_static(&[0; 256 * 1024]); Some((chunk, counter + 1)) } else { None } }); } }
rustc 1.74.1 (a28077b28 2023-12-04) binary: rustc commit-hash: a28077b28a02b92985b3a3faecf92813155f1ea1 commit-date: 2023-12-04 host: x86_64-unknown-linux-gnu release: 1.74.1 LLVM version: 17.0.4
error: internal compiler error: compiler/rustc_middle/src/ty/typeck_results.rs:308:13: node_type: no type for node HirId(DefId(0:33 ~ clippy_crash[aede]::tests::clippy_crash_when_initializing_bytes_from_static_with_evaluated_size_inside_futures_stream_unfold#1).32) (expr `256`) thread 'rustc' panicked at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/compiler/rustc_errors/src/lib.rs:1651:9: Box<dyn Any> stack backtrace: 0: std::panicking::begin_panic::<rustc_errors::ExplicitBug> 1: <rustc_errors::HandlerInner>::bug::<alloc::string::String> 2: <rustc_errors::Handler>::bug::<alloc::string::String> 3: rustc_middle::util::bug::opt_span_bug_fmt::<rustc_span::span_encoding::Span>::{closure#0} 4: rustc_middle::ty::context::tls::with_opt::<rustc_middle::util::bug::opt_span_bug_fmt<rustc_span::span_encoding::Span>::{closure#0}, !>::{closure#0} 5: rustc_middle::ty::context::tls::with_context_opt::<rustc_middle::ty::context::tls::with_opt<rustc_middle::util::bug::opt_span_bug_fmt<rustc_span::span_encoding::Span>::{closure#0}, !>::{closure#0}, !> 6: rustc_middle::util::bug::bug_fmt 7: <rustc_middle::ty::typeck_results::TypeckResults>::expr_ty 8: <clippy_utils::visitors::is_const_evaluatable::V as rustc_hir::intravisit::Visitor>::visit_expr 9: rustc_hir::intravisit::walk_expr::<clippy_utils::visitors::is_const_evaluatable::V> 10: rustc_hir::intravisit::walk_expr::<clippy_utils::visitors::is_const_evaluatable::V> 11: <clippy_utils::eager_or_lazy::expr_eagerness::V as rustc_hir::intravisit::Visitor>::visit_expr 12: rustc_hir::intravisit::walk_local::<clippy_utils::eager_or_lazy::expr_eagerness::V> 13: rustc_hir::intravisit::walk_expr::<clippy_utils::eager_or_lazy::expr_eagerness::V> 14: <clippy_utils::eager_or_lazy::expr_eagerness::V as rustc_hir::intravisit::Visitor>::visit_expr 15: rustc_hir::intravisit::walk_expr::<clippy_utils::eager_or_lazy::expr_eagerness::V> 16: <clippy_utils::eager_or_lazy::expr_eagerness::V as rustc_hir::intravisit::Visitor>::visit_expr 17: clippy_utils::eager_or_lazy::switch_to_eager_eval 18: <clippy_lints::if_then_some_else_none::IfThenSomeElseNone as rustc_lint::passes::LateLintPass>::check_expr 19: <rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass> as rustc_hir::intravisit::Visitor>::visit_expr::{closure#0} 20: <rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass> as rustc_hir::intravisit::Visitor>::visit_block 21: <rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass> as rustc_hir::intravisit::Visitor>::visit_expr::{closure#0} 22: <rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass> as rustc_hir::intravisit::Visitor>::visit_nested_body 23: <rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass> as rustc_hir::intravisit::Visitor>::visit_fn 24: rustc_hir::intravisit::walk_expr::<rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass>> 25: <rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass> as rustc_hir::intravisit::Visitor>::visit_expr::{closure#0} 26: <rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass> as rustc_hir::intravisit::Visitor>::visit_nested_body 27: <rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass> as rustc_hir::intravisit::Visitor>::visit_fn 28: rustc_hir::intravisit::walk_expr::<rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass>> 29: <rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass> as rustc_hir::intravisit::Visitor>::visit_expr::{closure#0} 30: rustc_hir::intravisit::walk_expr::<rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass>> 31: <rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass> as rustc_hir::intravisit::Visitor>::visit_expr::{closure#0} 32: rustc_hir::intravisit::walk_local::<rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass>> 33: <rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass> as rustc_hir::intravisit::Visitor>::visit_local 34: rustc_hir::intravisit::walk_block::<rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass>> 35: <rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass> as rustc_hir::intravisit::Visitor>::visit_block 36: <rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass> as rustc_hir::intravisit::Visitor>::visit_expr::{closure#0} 37: <rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass> as rustc_hir::intravisit::Visitor>::visit_nested_body 38: <rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass> as rustc_hir::intravisit::Visitor>::visit_fn 39: rustc_hir::intravisit::walk_item::<rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass>> 40: <rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass> as rustc_hir::intravisit::Visitor>::visit_nested_item 41: rustc_hir::intravisit::walk_mod::<rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass>> 42: <rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass> as rustc_hir::intravisit::Visitor>::visit_nested_item 43: rustc_hir::intravisit::walk_mod::<rustc_lint::late::LateContextAndPass<rustc_lint::late::RuntimeCombinedLateLintPass>> 44: rustc_lint::late::late_lint_crate 45: <rustc_session::session::Session>::time::<(), rustc_lint::late::check_crate::{closure#0}::{closure#0}> 46: <rustc_data_structures::sync::parallel::ParallelGuard>::run::<(), rustc_lint::late::check_crate::{closure#0}> 47: rustc_data_structures::sync::parallel::disabled::join::<rustc_lint::late::check_crate::{closure#0}, rustc_lint::late::check_crate::{closure#1}, (), ()> 48: <rustc_session::session::Session>::time::<(), rustc_interface::passes::analysis::{closure#6}::{closure#1}::{closure#0}::{closure#0}::{closure#2}::{closure#0}> 49: <rustc_data_structures::sync::parallel::ParallelGuard>::run::<(), rustc_interface::passes::analysis::{closure#6}::{closure#1}::{closure#0}::{closure#0}::{closure#2}> 50: <core::panic::unwind_safe::AssertUnwindSafe<rustc_interface::passes::analysis::{closure#6}::{closure#1}::{closure#0}> as core::ops::function::FnOnce<()>>::call_once 51: <rustc_session::session::Session>::time::<(), rustc_interface::passes::analysis::{closure#6}> 52: rustc_interface::passes::analysis [... omitted 2 frames ...] 53: <rustc_middle::ty::context::GlobalCtxt>::enter::<rustc_driver_impl::run_compiler::{closure#1}::{closure#2}::{closure#6}, core::result::Result<(), rustc_span::ErrorGuaranteed>> 54: rustc_span::set_source_map::<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}>::{closure#0}::{closure#0}>
The text was updated successfully, but these errors were encountered:
is_const_evaluatable
fff484d
Successfully merging a pull request may close this issue.
Summary
Clippy crashes when calling
bytes::Bytes::from_static
with computed slice size and when the code is insidefutures::stream::unfold
.Test case code that reproduces the issue with alternatives that work:
Version
Error output
Backtrace
The text was updated successfully, but these errors were encountered: