diff --git a/clippy_lints/src/casts/fn_to_numeric_cast_any.rs b/clippy_lints/src/casts/fn_to_numeric_cast_any.rs index b22e8f4ee891..6e8347a54db6 100644 --- a/clippy_lints/src/casts/fn_to_numeric_cast_any.rs +++ b/clippy_lints/src/casts/fn_to_numeric_cast_any.rs @@ -8,12 +8,7 @@ use rustc_middle::ty::{self, Ty}; use super::FN_TO_NUMERIC_CAST_ANY; pub(super) fn check(cx: &LateContext<'_>, expr: &Expr<'_>, cast_expr: &Expr<'_>, cast_from: Ty<'_>, cast_to: Ty<'_>) { - // We allow casts from any function type to any function type. - match cast_to.kind() { - ty::FnDef(..) | ty::FnPtr(..) => return, - _ => { /* continue to checks */ }, - } - + assert!(cast_to.is_numeric()); if let ty::FnDef(..) | ty::FnPtr(..) = cast_from.kind() { let mut applicability = Applicability::MaybeIncorrect; let from_snippet = snippet_with_applicability(cx, cast_expr.span, "..", &mut applicability); diff --git a/clippy_lints/src/casts/mod.rs b/clippy_lints/src/casts/mod.rs index d90cf124fe42..0d194b20971d 100644 --- a/clippy_lints/src/casts/mod.rs +++ b/clippy_lints/src/casts/mod.rs @@ -815,9 +815,6 @@ impl<'tcx> LateLintPass<'tcx> for Casts { cast_slice_from_raw_parts::check(cx, expr, cast_from_expr, cast_to, &self.msrv); ptr_cast_constness::check(cx, expr, cast_from_expr, cast_from, cast_to, &self.msrv); as_ptr_cast_mut::check(cx, expr, cast_from_expr, cast_to); - fn_to_numeric_cast_any::check(cx, expr, cast_from_expr, cast_from, cast_to); - fn_to_numeric_cast::check(cx, expr, cast_from_expr, cast_from, cast_to); - fn_to_numeric_cast_with_truncation::check(cx, expr, cast_from_expr, cast_from, cast_to); zero_ptr::check(cx, expr, cast_from_expr, cast_to_hir); if cast_to.is_numeric() { @@ -831,6 +828,9 @@ impl<'tcx> LateLintPass<'tcx> for Casts { } cast_lossless::check(cx, expr, cast_from_expr, cast_from, cast_to, cast_to_hir, &self.msrv); cast_enum_constructor::check(cx, expr, cast_from_expr, cast_from); + fn_to_numeric_cast_any::check(cx, expr, cast_from_expr, cast_from, cast_to); + fn_to_numeric_cast::check(cx, expr, cast_from_expr, cast_from, cast_to); + fn_to_numeric_cast_with_truncation::check(cx, expr, cast_from_expr, cast_from, cast_to); } as_underscore::check(cx, expr, cast_to_hir); diff --git a/tests/ui/fn_to_numeric_cast_any.rs b/tests/ui/fn_to_numeric_cast_any.rs index 95abc0ac68dd..d199cb019778 100644 --- a/tests/ui/fn_to_numeric_cast_any.rs +++ b/tests/ui/fn_to_numeric_cast_any.rs @@ -72,7 +72,7 @@ fn closure_to_fn_to_integer() { fn fn_to_raw_ptr() { let _ = foo as *const (); - //~^ ERROR: casting function pointer `foo` to `*const ()` + let _ = foo as *mut (); } fn cast_fn_to_self() { diff --git a/tests/ui/fn_to_numeric_cast_any.stderr b/tests/ui/fn_to_numeric_cast_any.stderr index a05b7138bc99..1f8c6f2b970b 100644 --- a/tests/ui/fn_to_numeric_cast_any.stderr +++ b/tests/ui/fn_to_numeric_cast_any.stderr @@ -176,16 +176,5 @@ help: did you mean to invoke the function? LL | let _ = (clos as fn(u32) -> u32)() as usize; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -error: casting function pointer `foo` to `*const ()` - --> tests/ui/fn_to_numeric_cast_any.rs:74:13 - | -LL | let _ = foo as *const (); - | ^^^^^^^^^^^^^^^^ - | -help: did you mean to invoke the function? - | -LL | let _ = foo() as *const (); - | ~~~~~~~~~~~~~~~~~~ - -error: aborting due to 17 previous errors +error: aborting due to 16 previous errors