about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2020-03-10 10:37:51 +0000
committerbors <bors@rust-lang.org>2020-03-10 10:37:51 +0000
commit3aa8da3e072651d9c68a579dcf598609983d2234 (patch)
tree6b1f737951aa4aaea675237e1fd2ecd28f24b3f4
parent187bbf0e7bbc1c7da5902cd1a89f286aa063c5ff (diff)
parent8d2a3e0a61dbcf2ec6ce5a693c68e3da587991b9 (diff)
downloadrust-3aa8da3e072651d9c68a579dcf598609983d2234.tar.gz
rust-3aa8da3e072651d9c68a579dcf598609983d2234.zip
Auto merge of #5297 - JohnTitor:shadow, r=phansch
Use `node_type_opt` over `node_type`

Fix ICE reported in rust-lang/rust#69873.

changelog: Fix ICE in checking bindings
-rw-r--r--clippy_lints/src/shadow.rs12
-rw-r--r--tests/ui/crashes/shadow.rs6
2 files changed, 14 insertions, 4 deletions
diff --git a/clippy_lints/src/shadow.rs b/clippy_lints/src/shadow.rs
index 0dc2705550b..0ada65ec785 100644
--- a/clippy_lints/src/shadow.rs
+++ b/clippy_lints/src/shadow.rs
@@ -154,10 +154,14 @@ fn check_local<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, local: &'tcx Local<'_>, bin
 }
 
 fn is_binding(cx: &LateContext<'_, '_>, pat_id: HirId) -> bool {
-    let var_ty = cx.tables.node_type(pat_id);
-    match var_ty.kind {
-        ty::Adt(..) => false,
-        _ => true,
+    let var_ty = cx.tables.node_type_opt(pat_id);
+    if let Some(var_ty) = var_ty {
+        match var_ty.kind {
+            ty::Adt(..) => false,
+            _ => true,
+        }
+    } else {
+        false
     }
 }
 
diff --git a/tests/ui/crashes/shadow.rs b/tests/ui/crashes/shadow.rs
new file mode 100644
index 00000000000..843e8ef64dc
--- /dev/null
+++ b/tests/ui/crashes/shadow.rs
@@ -0,0 +1,6 @@
+fn main() {
+    let x: [i32; {
+        let u = 2;
+        4
+    }] = [2; { 4 }];
+}