about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJason Newcomb <jsnewcomb@pm.me>2021-07-17 19:01:19 -0400
committerJason Newcomb <jsnewcomb@pm.me>2021-07-17 19:01:19 -0400
commit5bfc2568a21148c5c2dd9455e1720e4fc9021ed2 (patch)
tree54ef496a6bc2045fe594296eb7b3890b5026ab27
parente9c3991d3081c79bd712d754e6f51f456e603c6c (diff)
downloadrust-5bfc2568a21148c5c2dd9455e1720e4fc9021ed2.tar.gz
rust-5bfc2568a21148c5c2dd9455e1720e4fc9021ed2.zip
Fix ICE in `is_integer_const` when the expression is inside an `AnonConst` body
-rw-r--r--clippy_utils/src/lib.rs8
-rw-r--r--tests/ui/crashes/ice-7340.rs6
2 files changed, 8 insertions, 6 deletions
diff --git a/clippy_utils/src/lib.rs b/clippy_utils/src/lib.rs
index 6db221ab0fd..9a9d6a20057 100644
--- a/clippy_utils/src/lib.rs
+++ b/clippy_utils/src/lib.rs
@@ -909,12 +909,8 @@ pub fn is_integer_const(cx: &LateContext<'_>, e: &Expr<'_>, value: u128) -> bool
     if is_integer_literal(e, value) {
         return true;
     }
-    let map = cx.tcx.hir();
-    let parent_item = map.get_parent_item(e.hir_id);
-    if let Some((Constant::Int(v), _)) = map
-        .maybe_body_owned_by(parent_item)
-        .and_then(|body_id| constant(cx, cx.tcx.typeck_body(body_id), e))
-    {
+    let enclosing_body = cx.tcx.hir().local_def_id(cx.tcx.hir().enclosing_body_owner(e.hir_id));
+    if let Some((Constant::Int(v), _)) = constant(cx, cx.tcx.typeck(enclosing_body), e) {
         value == v
     } else {
         false
diff --git a/tests/ui/crashes/ice-7340.rs b/tests/ui/crashes/ice-7340.rs
new file mode 100644
index 00000000000..7d2351d606f
--- /dev/null
+++ b/tests/ui/crashes/ice-7340.rs
@@ -0,0 +1,6 @@
+#![allow(clippy::no_effect)]
+
+fn main() {
+    const CONSTANT: usize = 8;
+    [1; 1 % CONSTANT];
+}