about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--clippy_lints/src/matches.rs22
-rw-r--r--clippy_lints/src/utils/author.rs8
-rw-r--r--clippy_lints/src/utils/hir_utils.rs5
-rw-r--r--clippy_lints/src/utils/inspector.rs8
4 files changed, 28 insertions, 15 deletions
diff --git a/clippy_lints/src/matches.rs b/clippy_lints/src/matches.rs
index 6b5b4e4c4f0..5aed9770d2e 100644
--- a/clippy_lints/src/matches.rs
+++ b/clippy_lints/src/matches.rs
@@ -713,16 +713,18 @@ fn all_ranges<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, arms: &'tcx [Arm<'_>]) -> Ve
             } = *arm
             {
                 if let PatKind::Range(ref lhs, ref rhs, ref range_end) = pat.kind {
-                    let lhs = constant(cx, cx.tables, lhs)?.0;
-                    let rhs = constant(cx, cx.tables, rhs)?.0;
-                    let rhs = match *range_end {
-                        RangeEnd::Included => Bound::Included(rhs),
-                        RangeEnd::Excluded => Bound::Excluded(rhs),
-                    };
-                    return Some(SpannedRange {
-                        span: pat.span,
-                        node: (lhs, rhs),
-                    });
+                    if let (Some(l), Some(r)) = (lhs, rhs) {
+                        let lhs = constant(cx, cx.tables, l)?.0;
+                        let rhs = constant(cx, cx.tables, r)?.0;
+                        let rhs = match *range_end {
+                            RangeEnd::Included => Bound::Included(rhs),
+                            RangeEnd::Excluded => Bound::Excluded(rhs),
+                        };
+                        return Some(SpannedRange {
+                            span: pat.span,
+                            node: (lhs, rhs),
+                        });
+                    }
                 }
 
                 if let PatKind::Lit(ref value) = pat.kind {
diff --git a/clippy_lints/src/utils/author.rs b/clippy_lints/src/utils/author.rs
index 902c3e2b7e7..b9f11f79a37 100644
--- a/clippy_lints/src/utils/author.rs
+++ b/clippy_lints/src/utils/author.rs
@@ -617,9 +617,13 @@ impl<'tcx> Visitor<'tcx> for PrintVisitor {
                     start_pat, end_pat, end_kind, current
                 );
                 self.current = start_pat;
-                self.visit_expr(start);
+                if let Some(expr) = start {
+                    self.visit_expr(expr);
+                }
                 self.current = end_pat;
-                self.visit_expr(end);
+                if let Some(expr) = end {
+                    self.visit_expr(expr);
+                }
             },
             PatKind::Slice(ref start, ref middle, ref end) => {
                 let start_pat = self.next("start");
diff --git a/clippy_lints/src/utils/hir_utils.rs b/clippy_lints/src/utils/hir_utils.rs
index 13ea90cff59..00baad72e6d 100644
--- a/clippy_lints/src/utils/hir_utils.rs
+++ b/clippy_lints/src/utils/hir_utils.rs
@@ -195,7 +195,10 @@ impl<'a, 'tcx> SpanlessEq<'a, 'tcx> {
                 ls == rs && over(l, r, |l, r| self.eq_pat(l, r))
             },
             (&PatKind::Range(ref ls, ref le, ref li), &PatKind::Range(ref rs, ref re, ref ri)) => {
-                self.eq_expr(ls, rs) && self.eq_expr(le, re) && (*li == *ri)
+                if let (Some(ls), Some(rs), Some(le), Some(re)) = (ls, rs, le, re) {
+                    return self.eq_expr(ls, rs) && self.eq_expr(le, re) && (*li == *ri);
+                }
+                false
             },
             (&PatKind::Ref(ref le, ref lm), &PatKind::Ref(ref re, ref rm)) => lm == rm && self.eq_pat(le, re),
             (&PatKind::Slice(ref ls, ref li, ref le), &PatKind::Slice(ref rs, ref ri, ref re)) => {
diff --git a/clippy_lints/src/utils/inspector.rs b/clippy_lints/src/utils/inspector.rs
index 38bf6ee5239..eb889ccc75c 100644
--- a/clippy_lints/src/utils/inspector.rs
+++ b/clippy_lints/src/utils/inspector.rs
@@ -483,8 +483,12 @@ fn print_pat(cx: &LateContext<'_, '_>, pat: &hir::Pat<'_>, indent: usize) {
         },
         hir::PatKind::Range(ref l, ref r, ref range_end) => {
             println!("{}Range", ind);
-            print_expr(cx, l, indent + 1);
-            print_expr(cx, r, indent + 1);
+            if let Some(expr) = l {
+                print_expr(cx, expr, indent + 1);
+            }
+            if let Some(expr) = r {
+                print_expr(cx, expr, indent + 1);
+            }
             match *range_end {
                 hir::RangeEnd::Included => println!("{} end included", ind),
                 hir::RangeEnd::Excluded => println!("{} end excluded", ind),