diff options
| author | bors <bors@rust-lang.org> | 2022-09-25 08:09:02 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-09-25 08:09:02 +0000 |
| commit | 5bd3b569dc282e3cf78aeec3cecb0bca64280140 (patch) | |
| tree | a81bd14261a7d0b8e3b0e4303ecc12eaed6e8ce9 | |
| parent | 8b1ad17e5c9931097240b659e9f596985ad5ba45 (diff) | |
| parent | 1141c553d8b443bdebc95e2fc13b04bd02031733 (diff) | |
| download | rust-5bd3b569dc282e3cf78aeec3cecb0bca64280140.tar.gz rust-5bd3b569dc282e3cf78aeec3cecb0bca64280140.zip | |
Auto merge of #9531 - Jarcho:ice_9459, r=llogiq
Fix ICE in `needless_pass_by_value` with unsized `dyn Fn` fixes #9459 Not really sure why a query for a type implementing `FnOnce` even works since the trait if `FnOnce<T>`, but it seems to. I would have expected it to crash like it does when passing `dyn FnOnce()` as the type. changelog: [`needless_pass_by_value`](https://rust-lang.github.io/rust-clippy/master/#needless_pass_by_value) Fix ICE in with unsized `dyn Fn` argument
| -rw-r--r-- | clippy_lints/src/needless_pass_by_value.rs | 3 | ||||
| -rw-r--r-- | tests/ui/crashes/ice-9459.rs | 5 |
2 files changed, 7 insertions, 1 deletions
diff --git a/clippy_lints/src/needless_pass_by_value.rs b/clippy_lints/src/needless_pass_by_value.rs index d7e6e7de2cc..924d4f91970 100644 --- a/clippy_lints/src/needless_pass_by_value.rs +++ b/clippy_lints/src/needless_pass_by_value.rs @@ -18,7 +18,7 @@ use rustc_middle::mir::FakeReadCause; use rustc_middle::ty::{self, TypeVisitable}; use rustc_session::{declare_lint_pass, declare_tool_lint}; use rustc_span::symbol::kw; -use rustc_span::{sym, Span}; +use rustc_span::{sym, Span, DUMMY_SP}; use rustc_target::spec::abi::Abi; use rustc_trait_selection::traits; use rustc_trait_selection::traits::misc::can_type_implement_copy; @@ -186,6 +186,7 @@ impl<'tcx> LateLintPass<'tcx> for NeedlessPassByValue { if !is_self(arg); if !ty.is_mutable_ptr(); if !is_copy(cx, ty); + if ty.is_sized(cx.tcx.at(DUMMY_SP), cx.param_env); if !allowed_traits.iter().any(|&t| implements_trait(cx, ty, t, &[])); if !implements_borrow_trait; if !all_borrowable_trait; diff --git a/tests/ui/crashes/ice-9459.rs b/tests/ui/crashes/ice-9459.rs new file mode 100644 index 00000000000..55615124fcf --- /dev/null +++ b/tests/ui/crashes/ice-9459.rs @@ -0,0 +1,5 @@ +#![feature(unsized_fn_params)] + +pub fn f0(_f: dyn FnOnce()) {} + +fn main() {} |
