about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--clippy_lints/src/question_mark.rs4
-rw-r--r--tests/ui/crashes/ice-9242.rs8
2 files changed, 10 insertions, 2 deletions
diff --git a/clippy_lints/src/question_mark.rs b/clippy_lints/src/question_mark.rs
index f0155ed6051..fd0a53839e6 100644
--- a/clippy_lints/src/question_mark.rs
+++ b/clippy_lints/src/question_mark.rs
@@ -123,8 +123,8 @@ fn check_if_let_some_or_err_and_early_return<'tcx>(cx: &LateContext<'tcx>, expr:
     if_chain! {
         if let Some(higher::IfLet { let_pat, let_expr, if_then, if_else }) = higher::IfLet::hir(cx, expr);
         if !is_else_clause(cx.tcx, expr);
-        if let PatKind::TupleStruct(ref path1, fields, None) = let_pat.kind;
-        if let PatKind::Binding(annot, bind_id, ident, _) = fields[0].kind;
+        if let PatKind::TupleStruct(ref path1, [field], None) = let_pat.kind;
+        if let PatKind::Binding(annot, bind_id, ident, _) = field.kind;
         let caller_ty = cx.typeck_results().expr_ty(let_expr);
         let if_block = IfBlockType::IfLet(path1, caller_ty, ident.name, let_expr, if_then, if_else);
         if (is_early_return(sym::Option, cx, &if_block) && path_to_local_id(peel_blocks(if_then), bind_id))
diff --git a/tests/ui/crashes/ice-9242.rs b/tests/ui/crashes/ice-9242.rs
new file mode 100644
index 00000000000..0099e6e2f34
--- /dev/null
+++ b/tests/ui/crashes/ice-9242.rs
@@ -0,0 +1,8 @@
+enum E {
+    X(),
+    Y,
+}
+
+fn main() {
+    let _ = if let E::X() = E::X() { 1 } else { 2 };
+}