@@ -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 {
@@ -146,13 +147,13 @@ impl<'pat, 'tcx> MatchPair<'pat, 'tcx> {
146147 ..
147148 } => {
148149 // Apply the type ascription to the value at `match_pair.place`
149- let ascription = place_builder . try_to_place ( cx ) . map ( |source| super :: Ascription {
150+ let ascription = place . map ( |source| super :: Ascription {
150151 annotation : annotation. clone ( ) ,
151152 source,
152153 variance,
153154 } ) ;
154155
155- subpairs. push ( MatchPair :: new ( place_builder. clone ( ) , subpattern, cx) ) ;
156+ subpairs. push ( MatchPair :: new ( place_builder, subpattern, cx) ) ;
156157 TestCase :: Irrefutable { ascription, binding : None }
157158 }
158159
@@ -165,7 +166,7 @@ impl<'pat, 'tcx> MatchPair<'pat, 'tcx> {
165166 ref subpattern,
166167 is_primary : _,
167168 } => {
168- let binding = place_builder . try_to_place ( cx ) . map ( |source| super :: Binding {
169+ let binding = place . map ( |source| super :: Binding {
169170 span : pattern. span ,
170171 source,
171172 var_id : var,
@@ -174,14 +175,14 @@ impl<'pat, 'tcx> MatchPair<'pat, 'tcx> {
174175
175176 if let Some ( subpattern) = subpattern. as_ref ( ) {
176177 // this is the `x @ P` case; have to keep matching against `P` now
177- subpairs. push ( MatchPair :: new ( place_builder. clone ( ) , subpattern, cx) ) ;
178+ subpairs. push ( MatchPair :: new ( place_builder, subpattern, cx) ) ;
178179 }
179180 TestCase :: Irrefutable { ascription : None , binding }
180181 }
181182
182183 PatKind :: InlineConstant { subpattern : ref pattern, def, .. } => {
183184 // Apply a type ascription for the inline constant to the value at `match_pair.place`
184- let ascription = place_builder . try_to_place ( cx ) . map ( |source| {
185+ let ascription = place . map ( |source| {
185186 let span = pattern. span ;
186187 let parent_id = cx. tcx . typeck_root_def_id ( cx. def_id . to_def_id ( ) ) ;
187188 let args = ty:: InlineConstArgs :: new (
@@ -207,7 +208,7 @@ impl<'pat, 'tcx> MatchPair<'pat, 'tcx> {
207208 super :: Ascription { annotation, source, variance : ty:: Contravariant }
208209 } ) ;
209210
210- subpairs. push ( MatchPair :: new ( place_builder. clone ( ) , pattern, cx) ) ;
211+ subpairs. push ( MatchPair :: new ( place_builder, pattern, cx) ) ;
211212 TestCase :: Irrefutable { ascription, binding : None }
212213 }
213214
@@ -229,7 +230,7 @@ impl<'pat, 'tcx> MatchPair<'pat, 'tcx> {
229230 }
230231
231232 PatKind :: Variant { adt_def, variant_index, args, ref subpatterns } => {
232- let downcast_place = place_builder. clone ( ) . downcast ( adt_def, variant_index) ; // `(x as Variant)`
233+ let downcast_place = place_builder. downcast ( adt_def, variant_index) ; // `(x as Variant)`
233234 subpairs = cx. field_match_pairs ( downcast_place, subpatterns) ;
234235
235236 let irrefutable = adt_def. variants ( ) . iter_enumerated ( ) . all ( |( i, v) | {
@@ -251,18 +252,17 @@ impl<'pat, 'tcx> MatchPair<'pat, 'tcx> {
251252 }
252253
253254 PatKind :: Leaf { ref subpatterns } => {
254- subpairs = cx. field_match_pairs ( place_builder. clone ( ) , subpatterns) ;
255+ subpairs = cx. field_match_pairs ( place_builder, subpatterns) ;
255256 default_irrefutable ( )
256257 }
257258
258259 PatKind :: Deref { ref subpattern } => {
259- let place_builder = place_builder. clone ( ) . deref ( ) ;
260- subpairs. push ( MatchPair :: new ( place_builder, subpattern, cx) ) ;
260+ subpairs. push ( MatchPair :: new ( place_builder. deref ( ) , subpattern, cx) ) ;
261261 default_irrefutable ( )
262262 }
263263 } ;
264264
265- MatchPair { place : place_builder , test_case, subpairs, pattern }
265+ MatchPair { place, test_case, subpairs, pattern }
266266 }
267267
268268 /// Whether this recursively contains no bindings or ascriptions.
@@ -314,8 +314,8 @@ impl<'a, 'b, 'tcx> FakeBorrowCollector<'a, 'b, 'tcx> {
314314 }
315315 } else {
316316 // Insert a Shallow borrow of any place that is switched on.
317- if let Some ( resolved_place ) = match_pair. place . try_to_place ( self . cx ) {
318- self . fake_borrows . insert ( resolved_place ) ;
317+ if let Some ( place ) = match_pair. place {
318+ self . fake_borrows . insert ( place ) ;
319319 }
320320
321321 for subpair in & match_pair. subpairs {
0 commit comments