summaryrefslogtreecommitdiffstats
path: root/src/tools/clippy/clippy_utils/src/ty.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/clippy/clippy_utils/src/ty.rs')
-rw-r--r--src/tools/clippy/clippy_utils/src/ty.rs44
1 files changed, 27 insertions, 17 deletions
diff --git a/src/tools/clippy/clippy_utils/src/ty.rs b/src/tools/clippy/clippy_utils/src/ty.rs
index 604dc7691..842a206f9 100644
--- a/src/tools/clippy/clippy_utils/src/ty.rs
+++ b/src/tools/clippy/clippy_utils/src/ty.rs
@@ -31,7 +31,7 @@ use rustc_trait_selection::traits::{Obligation, ObligationCause};
use std::assert_matches::debug_assert_matches;
use std::iter;
-use crate::{match_def_path, path_res, paths};
+use crate::{match_def_path, path_res};
mod type_certainty;
pub use type_certainty::expr_type_is_certain;
@@ -461,10 +461,8 @@ pub fn needs_ordered_drop<'tcx>(cx: &LateContext<'tcx>, ty: Ty<'tcx>) -> bool {
else if is_type_lang_item(cx, ty, LangItem::OwnedBox)
|| matches!(
get_type_diagnostic_name(cx, ty),
- Some(sym::HashSet | sym::Rc | sym::Arc | sym::cstring_type)
+ Some(sym::HashSet | sym::Rc | sym::Arc | sym::cstring_type | sym::RcWeak | sym::ArcWeak)
)
- || match_type(cx, ty, &paths::WEAK_RC)
- || match_type(cx, ty, &paths::WEAK_ARC)
{
// Check all of the generic arguments.
if let ty::Adt(_, subs) = ty.kind() {
@@ -892,7 +890,9 @@ pub fn for_each_top_level_late_bound_region<B>(
impl<'tcx, B, F: FnMut(BoundRegion) -> ControlFlow<B>> TypeVisitor<TyCtxt<'tcx>> for V<F> {
type BreakTy = B;
fn visit_region(&mut self, r: Region<'tcx>) -> ControlFlow<Self::BreakTy> {
- if let RegionKind::ReLateBound(idx, bound) = r.kind() && idx.as_u32() == self.index {
+ if let RegionKind::ReLateBound(idx, bound) = r.kind()
+ && idx.as_u32() == self.index
+ {
(self.f)(bound)
} else {
ControlFlow::Continue(())
@@ -986,16 +986,16 @@ pub fn ty_is_fn_once_param<'tcx>(tcx: TyCtxt<'_>, ty: Ty<'tcx>, predicates: &'tc
.iter()
.try_fold(false, |found, p| {
if let ty::ClauseKind::Trait(p) = p.kind().skip_binder()
- && let ty::Param(self_ty) = p.trait_ref.self_ty().kind()
- && ty.index == self_ty.index
- {
- // This should use `super_traits_of`, but that's a private function.
- if p.trait_ref.def_id == fn_once_id {
- return Some(true);
- } else if p.trait_ref.def_id == fn_mut_id || p.trait_ref.def_id == fn_id {
- return None;
+ && let ty::Param(self_ty) = p.trait_ref.self_ty().kind()
+ && ty.index == self_ty.index
+ {
+ // This should use `super_traits_of`, but that's a private function.
+ if p.trait_ref.def_id == fn_once_id {
+ return Some(true);
+ } else if p.trait_ref.def_id == fn_mut_id || p.trait_ref.def_id == fn_id {
+ return None;
+ }
}
- }
Some(found)
})
.unwrap_or(false)
@@ -1135,7 +1135,7 @@ pub fn make_projection<'tcx>(
#[cfg(debug_assertions)]
assert_generic_args_match(tcx, assoc_item.def_id, args);
- Some(tcx.mk_alias_ty(assoc_item.def_id, args))
+ Some(ty::AliasTy::new(tcx, assoc_item.def_id, args))
}
helper(
tcx,
@@ -1160,7 +1160,12 @@ pub fn make_normalized_projection<'tcx>(
) -> Option<Ty<'tcx>> {
fn helper<'tcx>(tcx: TyCtxt<'tcx>, param_env: ParamEnv<'tcx>, ty: AliasTy<'tcx>) -> Option<Ty<'tcx>> {
#[cfg(debug_assertions)]
- if let Some((i, arg)) = ty.args.iter().enumerate().find(|(_, arg)| arg.has_late_bound_regions()) {
+ if let Some((i, arg)) = ty
+ .args
+ .iter()
+ .enumerate()
+ .find(|(_, arg)| arg.has_escaping_bound_vars())
+ {
debug_assert!(
false,
"args contain late-bound region at index `{i}` which can't be normalized.\n\
@@ -1233,7 +1238,12 @@ pub fn make_normalized_projection_with_regions<'tcx>(
) -> Option<Ty<'tcx>> {
fn helper<'tcx>(tcx: TyCtxt<'tcx>, param_env: ParamEnv<'tcx>, ty: AliasTy<'tcx>) -> Option<Ty<'tcx>> {
#[cfg(debug_assertions)]
- if let Some((i, arg)) = ty.args.iter().enumerate().find(|(_, arg)| arg.has_late_bound_regions()) {
+ if let Some((i, arg)) = ty
+ .args
+ .iter()
+ .enumerate()
+ .find(|(_, arg)| arg.has_escaping_bound_vars())
+ {
debug_assert!(
false,
"args contain late-bound region at index `{i}` which can't be normalized.\n\