about summary refs log tree commit diff
path: root/compiler
diff options
context:
space:
mode:
authorMichael Goulet <michael@errs.io>2022-12-04 18:53:50 +0000
committerMichael Goulet <michael@errs.io>2022-12-04 18:53:50 +0000
commitd442c015d6d688460a182947e797f4bf69876044 (patch)
tree21114349ca0ebd3f9497869960a0f547a1af1612 /compiler
parent26b24cd7558c02c433ef9f621894cb6a2f31898d (diff)
downloadrust-d442c015d6d688460a182947e797f4bf69876044.tar.gz
rust-d442c015d6d688460a182947e797f4bf69876044.zip
Don't ICE in ExprUseVisitor on FRU for non-existent struct
Diffstat (limited to 'compiler')
-rw-r--r--compiler/rustc_hir_typeck/src/expr_use_visitor.rs7
1 files changed, 6 insertions, 1 deletions
diff --git a/compiler/rustc_hir_typeck/src/expr_use_visitor.rs b/compiler/rustc_hir_typeck/src/expr_use_visitor.rs
index 4f06ad8a018..03b174c7795 100644
--- a/compiler/rustc_hir_typeck/src/expr_use_visitor.rs
+++ b/compiler/rustc_hir_typeck/src/expr_use_visitor.rs
@@ -523,6 +523,11 @@ impl<'a, 'tcx> ExprUseVisitor<'a, 'tcx> {
         // Consume the expressions supplying values for each field.
         for field in fields {
             self.consume_expr(field.expr);
+
+            // The struct path probably didn't resolve
+            if self.mc.typeck_results.opt_field_index(field.hir_id).is_none() {
+                self.tcx().sess.delay_span_bug(field.span, "couldn't resolve index for field");
+            }
         }
 
         let with_expr = match *opt_with {
@@ -542,7 +547,7 @@ impl<'a, 'tcx> ExprUseVisitor<'a, 'tcx> {
                 for (f_index, with_field) in adt.non_enum_variant().fields.iter().enumerate() {
                     let is_mentioned = fields
                         .iter()
-                        .any(|f| self.mc.typeck_results.field_index(f.hir_id) == f_index);
+                        .any(|f| self.mc.typeck_results.opt_field_index(f.hir_id) == Some(f_index));
                     if !is_mentioned {
                         let field_place = self.mc.cat_projection(
                             &*with_expr,