From fbdb13cfb02b320fbee061bcf58af885bd2847df Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Sat, 28 Dec 2019 21:13:21 +0900 Subject: [PATCH] Possibly fix an ICE on test --- clippy_lints/src/mut_key.rs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/clippy_lints/src/mut_key.rs b/clippy_lints/src/mut_key.rs index 03f9d522f0a..ef3ae45f181 100644 --- a/clippy_lints/src/mut_key.rs +++ b/clippy_lints/src/mut_key.rs @@ -103,18 +103,23 @@ fn check_ty<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, span: Span, ty: Ty<'tcx>) { .iter() .any(|path| match_def_path(cx, def.did, &**path)) { - let key_type = substs.type_at(0); - if is_concrete_type(key_type) && !key_type.is_freeze(cx.tcx, cx.param_env, span) { - span_lint(cx, MUTABLE_KEY_TYPE, span, "mutable key type"); + let key_type = concrete_type(Some(substs.type_at(0))); + if let Some(key_type) = key_type { + if !key_type.is_freeze(cx.tcx, cx.param_env, span) { + span_lint(cx, MUTABLE_KEY_TYPE, span, "mutable key type"); + } } } } } -fn is_concrete_type(ty: Ty<'_>) -> bool { - match ty.kind { - RawPtr(TypeAndMut { ty: inner_ty, .. }) | Ref(_, inner_ty, _) => is_concrete_type(inner_ty), - Dynamic(..) | Opaque(..) | Param(..) => false, - _ => true, +fn concrete_type(ty: Option>) -> Option> { + if let Some(ty) = ty { + match ty.kind { + RawPtr(TypeAndMut { ty: inner_ty, .. }) | Ref(_, inner_ty, _) => return concrete_type(Some(inner_ty)), + Dynamic(..) | Opaque(..) | Param(..) => return None, + _ => return Some(ty), + } } + None } -- 2.44.0