about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAaron Hill <aa1ronham@gmail.com>2020-11-25 16:03:10 -0500
committerAaron Hill <aa1ronham@gmail.com>2020-11-25 18:41:10 -0500
commit0b64110b10c9ef5f971aab4b05975dee922a7bc3 (patch)
tree6a0333a6e221f04eff0a4b73009329c7e35de2ce
parentdb79d2f63780613e700cb58b4339c48287555ae0 (diff)
downloadrust-0b64110b10c9ef5f971aab4b05975dee922a7bc3.tar.gz
rust-0b64110b10c9ef5f971aab4b05975dee922a7bc3.zip
Resolve inference variables before trying to remove overloaded indexing
Fixes #79152

This code was already set up to handle indexing an array. However, it
appears that we never end up with an inference variable for the slice
case, so the missing call to `resolve_vars_if_possible` had no effect
until now.
-rw-r--r--compiler/rustc_typeck/src/check/writeback.rs4
-rw-r--r--src/test/ui/consts/issue-79152-const-array-index.rs11
2 files changed, 14 insertions, 1 deletions
diff --git a/compiler/rustc_typeck/src/check/writeback.rs b/compiler/rustc_typeck/src/check/writeback.rs
index 335f2cc2716..d1ada123c0d 100644
--- a/compiler/rustc_typeck/src/check/writeback.rs
+++ b/compiler/rustc_typeck/src/check/writeback.rs
@@ -194,7 +194,9 @@ impl<'cx, 'tcx> WritebackCx<'cx, 'tcx> {
             let mut typeck_results = self.fcx.typeck_results.borrow_mut();
 
             // All valid indexing looks like this; might encounter non-valid indexes at this point.
-            let base_ty = typeck_results.expr_ty_adjusted_opt(&base).map(|t| t.kind());
+            let base_ty = typeck_results
+                .expr_ty_adjusted_opt(&base)
+                .map(|t| self.fcx.resolve_vars_if_possible(t).kind());
             if base_ty.is_none() {
                 // When encountering `return [0][0]` outside of a `fn` body we can encounter a base
                 // that isn't in the type table. We assume more relevant errors have already been
diff --git a/src/test/ui/consts/issue-79152-const-array-index.rs b/src/test/ui/consts/issue-79152-const-array-index.rs
new file mode 100644
index 00000000000..95518e1bbdb
--- /dev/null
+++ b/src/test/ui/consts/issue-79152-const-array-index.rs
@@ -0,0 +1,11 @@
+// check-pass
+// Regression test for issue #79152
+//
+// Tests that we can index an array in a const function
+
+const fn foo() {
+    let mut array = [[0; 1]; 1];
+    array[0][0] = 1;
+}
+
+fn main() {}