about summary refs log tree commit diff
diff options
context:
space:
mode:
authorWesley Wiser <wesleywiser@microsoft.com>2021-09-23 22:15:12 -0400
committerWesley Wiser <wesleywiser@microsoft.com>2021-09-23 22:15:12 -0400
commit389365631d3e6d2f533f896635e7768f26359575 (patch)
treedbb18cbb921cf2dae0cbd78637223e57f2708a43
parentab8aef40b1e3a7151daebe7acea2c8b0117a8c9f (diff)
downloadrust-389365631d3e6d2f533f896635e7768f26359575.tar.gz
rust-389365631d3e6d2f533f896635e7768f26359575.zip
Fix tidy and respond to some feedback
-rw-r--r--compiler/rustc_typeck/src/check/upvar.rs33
-rw-r--r--src/test/ui/closures/2229_closure_analysis/preserve_field_drop_order.rs2
-rw-r--r--src/test/ui/closures/2229_closure_analysis/preserve_field_drop_order2.rs2
3 files changed, 34 insertions, 3 deletions
diff --git a/compiler/rustc_typeck/src/check/upvar.rs b/compiler/rustc_typeck/src/check/upvar.rs
index 036e1037383..917bf4ecd8c 100644
--- a/compiler/rustc_typeck/src/check/upvar.rs
+++ b/compiler/rustc_typeck/src/check/upvar.rs
@@ -617,6 +617,10 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
         for (_, captures) in &mut root_var_min_capture_list {
             captures.sort_by(|capture1, capture2| {
                 for (p1, p2) in capture1.place.projections.iter().zip(&capture2.place.projections) {
+                    // We do not need to look at the `Projection.ty` fields here because at each
+                    // step of the iteration, the projections will either be the same and therefore
+                    // the types must be as well or the current projection will be different and
+                    // we will return the result of comparing the field indexes.
                     match (p1.kind, p2.kind) {
                         // Paths are the same, continue to next loop.
                         (ProjectionKind::Deref, ProjectionKind::Deref) => {}
@@ -628,7 +632,34 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
                             return i1.cmp(&i2);
                         }
 
-                        (l, r) => bug!("ProjectionKinds were different: ({:?}, {:?})", l, r),
+                        // We should have either a pair of `Deref`s or a pair of `Field`s.
+                        // Anything else is a bug.
+                        (
+                            l @ (ProjectionKind::Deref | ProjectionKind::Field(..)),
+                            r @ (ProjectionKind::Deref | ProjectionKind::Field(..)),
+                        ) => bug!(
+                            "ProjectionKinds Deref and Field were mismatched: ({:?}, {:?})",
+                            l,
+                            r
+                        ),
+                        (
+                            l
+                            @
+                            (ProjectionKind::Index
+                            | ProjectionKind::Subslice
+                            | ProjectionKind::Deref
+                            | ProjectionKind::Field(..)),
+                            r
+                            @
+                            (ProjectionKind::Index
+                            | ProjectionKind::Subslice
+                            | ProjectionKind::Deref
+                            | ProjectionKind::Field(..)),
+                        ) => bug!(
+                            "ProjectionKinds Index or Subslice were unexpected: ({:?}, {:?})",
+                            l,
+                            r
+                        ),
                     }
                 }
 
diff --git a/src/test/ui/closures/2229_closure_analysis/preserve_field_drop_order.rs b/src/test/ui/closures/2229_closure_analysis/preserve_field_drop_order.rs
index ecc265208c5..ca3bfff2cf3 100644
--- a/src/test/ui/closures/2229_closure_analysis/preserve_field_drop_order.rs
+++ b/src/test/ui/closures/2229_closure_analysis/preserve_field_drop_order.rs
@@ -94,5 +94,5 @@ fn test_three() {
 fn main() {
     test_one();
     test_two();
-    test_three(); 
+    test_three();
 }
diff --git a/src/test/ui/closures/2229_closure_analysis/preserve_field_drop_order2.rs b/src/test/ui/closures/2229_closure_analysis/preserve_field_drop_order2.rs
index bc5c92122c6..3d39cb7ed48 100644
--- a/src/test/ui/closures/2229_closure_analysis/preserve_field_drop_order2.rs
+++ b/src/test/ui/closures/2229_closure_analysis/preserve_field_drop_order2.rs
@@ -23,6 +23,6 @@ fn main() {
     let a = A { x: Dropable(format!("x")), y: Dropable(format!("y")) };
 
     let c = move || println!("{:?} {:?}", a.y, a.x);
-    
+
     c();
 }