@@ -124,11 +124,18 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
124124 top_pattern : & ' pat Pat < ' tcx > ,
125125 pattern : & ' pat [ Box < Pat < ' tcx > > ] ,
126126 ) -> impl Iterator < Item = MatchPairTree < ' pat , ' tcx > > + use < ' pat , ' tcx , ' a > {
127- self . find_const_groups ( pattern) . into_iter ( ) . map ( move |entry| {
127+ let entries = self . find_const_groups ( pattern) ;
128+ let solo = entries. len ( ) == 1 ;
129+
130+ let maybe_project = move |base : & PlaceBuilder < ' tcx > , elem| {
131+ if solo { base. clone_project ( elem) } else { base. clone ( ) }
132+ } ;
133+
134+ entries. into_iter ( ) . map ( move |entry| {
128135 let pattern_len = pattern. len ( ) as u64 ;
129136 let mut build_single = |idx| {
130137 let subpattern = & pattern[ idx as usize ] ;
131- let place = place . clone_project ( ProjectionElem :: ConstantIndex {
138+ let place = maybe_project ( place , ProjectionElem :: ConstantIndex {
132139 offset : idx,
133140 min_length : pattern_len,
134141 from_end : false ,
@@ -147,7 +154,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
147154 let subpattern = & pattern[ range. start as usize ..range. end as usize ] ;
148155 let elem_ty = subpattern[ 0 ] . ty ;
149156
150- let place = place . clone_project ( PlaceElem :: Subslice {
157+ let place = maybe_project ( place , PlaceElem :: Subslice {
151158 from : range. start ,
152159 to : pattern. len ( ) as u64 - range. end ,
153160 from_end : true ,
0 commit comments