@@ -119,6 +119,7 @@ impl<'pat, 'tcx> MatchPair<'pat, 'tcx> {
119119 place_builder = place_builder. project ( ProjectionElem :: OpaqueCast ( pattern. ty ) ) ;
120120 }
121121
122+ let place = place_builder. try_to_place ( cx) ;
122123 let default_irrefutable = || TestCase :: Irrefutable { binding : None , ascription : None } ;
123124 let mut subpairs = Vec :: new ( ) ;
124125 let test_case = match pattern. kind {
@@ -143,13 +144,13 @@ impl<'pat, 'tcx> MatchPair<'pat, 'tcx> {
143144 ..
144145 } => {
145146 // Apply the type ascription to the value at `match_pair.place`
146- let ascription = place_builder . try_to_place ( cx ) . map ( |source| super :: Ascription {
147+ let ascription = place . map ( |source| super :: Ascription {
147148 annotation : annotation. clone ( ) ,
148149 source,
149150 variance,
150151 } ) ;
151152
152- subpairs. push ( MatchPair :: new ( place_builder. clone ( ) , subpattern, cx) ) ;
153+ subpairs. push ( MatchPair :: new ( place_builder, subpattern, cx) ) ;
153154 TestCase :: Irrefutable { ascription, binding : None }
154155 }
155156
@@ -162,7 +163,7 @@ impl<'pat, 'tcx> MatchPair<'pat, 'tcx> {
162163 ref subpattern,
163164 is_primary : _,
164165 } => {
165- let binding = place_builder . try_to_place ( cx ) . map ( |source| super :: Binding {
166+ let binding = place . map ( |source| super :: Binding {
166167 span : pattern. span ,
167168 source,
168169 var_id : var,
@@ -171,14 +172,14 @@ impl<'pat, 'tcx> MatchPair<'pat, 'tcx> {
171172
172173 if let Some ( subpattern) = subpattern. as_ref ( ) {
173174 // this is the `x @ P` case; have to keep matching against `P` now
174- subpairs. push ( MatchPair :: new ( place_builder. clone ( ) , subpattern, cx) ) ;
175+ subpairs. push ( MatchPair :: new ( place_builder, subpattern, cx) ) ;
175176 }
176177 TestCase :: Irrefutable { ascription : None , binding }
177178 }
178179
179180 PatKind :: InlineConstant { subpattern : ref pattern, def, .. } => {
180181 // Apply a type ascription for the inline constant to the value at `match_pair.place`
181- let ascription = place_builder . try_to_place ( cx ) . map ( |source| {
182+ let ascription = place . map ( |source| {
182183 let span = pattern. span ;
183184 let parent_id = cx. tcx . typeck_root_def_id ( cx. def_id . to_def_id ( ) ) ;
184185 let args = ty:: InlineConstArgs :: new (
@@ -204,7 +205,7 @@ impl<'pat, 'tcx> MatchPair<'pat, 'tcx> {
204205 super :: Ascription { annotation, source, variance : ty:: Contravariant }
205206 } ) ;
206207
207- subpairs. push ( MatchPair :: new ( place_builder. clone ( ) , pattern, cx) ) ;
208+ subpairs. push ( MatchPair :: new ( place_builder, pattern, cx) ) ;
208209 TestCase :: Irrefutable { ascription, binding : None }
209210 }
210211
@@ -226,7 +227,7 @@ impl<'pat, 'tcx> MatchPair<'pat, 'tcx> {
226227 }
227228
228229 PatKind :: Variant { adt_def, variant_index, args, ref subpatterns } => {
229- let downcast_place = place_builder. clone ( ) . downcast ( adt_def, variant_index) ; // `(x as Variant)`
230+ let downcast_place = place_builder. downcast ( adt_def, variant_index) ; // `(x as Variant)`
230231 subpairs = cx. field_match_pairs ( downcast_place, subpatterns) ;
231232
232233 let irrefutable = adt_def. variants ( ) . iter_enumerated ( ) . all ( |( i, v) | {
@@ -248,13 +249,12 @@ impl<'pat, 'tcx> MatchPair<'pat, 'tcx> {
248249 }
249250
250251 PatKind :: Leaf { ref subpatterns } => {
251- subpairs = cx. field_match_pairs ( place_builder. clone ( ) , subpatterns) ;
252+ subpairs = cx. field_match_pairs ( place_builder, subpatterns) ;
252253 default_irrefutable ( )
253254 }
254255
255256 PatKind :: Deref { ref subpattern } => {
256- let place_builder = place_builder. clone ( ) . deref ( ) ;
257- subpairs. push ( MatchPair :: new ( place_builder, subpattern, cx) ) ;
257+ subpairs. push ( MatchPair :: new ( place_builder. deref ( ) , subpattern, cx) ) ;
258258 default_irrefutable ( )
259259 }
260260
@@ -265,7 +265,7 @@ impl<'pat, 'tcx> MatchPair<'pat, 'tcx> {
265265 }
266266 } ;
267267
268- MatchPair { place : place_builder , test_case, subpairs, pattern }
268+ MatchPair { place, test_case, subpairs, pattern }
269269 }
270270}
271271
@@ -311,8 +311,8 @@ impl<'a, 'b, 'tcx> FakeBorrowCollector<'a, 'b, 'tcx> {
311311 }
312312 } else {
313313 // Insert a Shallow borrow of any place that is switched on.
314- if let Some ( resolved_place ) = match_pair. place . try_to_place ( self . cx ) {
315- self . fake_borrows . insert ( resolved_place ) ;
314+ if let Some ( place ) = match_pair. place {
315+ self . fake_borrows . insert ( place ) ;
316316 }
317317
318318 for subpair in & match_pair. subpairs {
0 commit comments