@@ -134,12 +134,12 @@ impl<'tcx> FunctionCoverage<'tcx> {
134134 self . source_hash
135135 }
136136
137- /// Generate an array of CounterExpressions, and an iterator over all `Counter`s and their
138- /// associated `Regions` ( from which the LLVM-specific `CoverageMapGenerator` will create
139- /// `CounterMappingRegion`s.
137+ /// Generate an array of CounterExpressions, and an array of all `Counter`s and their
138+ /// associated `Regions` sorted by `Region`, from which the LLVM-specific
139+ /// `CoverageMapGenerator` will create ` CounterMappingRegion`s.
140140 pub fn get_expressions_and_counter_regions (
141141 & self ,
142- ) -> ( Vec < CounterExpression > , impl Iterator < Item = ( Counter , & CodeRegion ) > ) {
142+ ) -> ( Vec < CounterExpression > , Vec < ( Counter , & CodeRegion ) > ) {
143143 assert ! (
144144 self . source_hash != 0 || !self . is_used,
145145 "No counters provided the source_hash for used function: {:?}" ,
@@ -150,9 +150,12 @@ impl<'tcx> FunctionCoverage<'tcx> {
150150 let ( counter_expressions, expression_regions) = self . expressions_with_regions ( ) ;
151151 let unreachable_regions = self . unreachable_regions ( ) ;
152152
153- let counter_regions =
154- counter_regions. chain ( expression_regions. into_iter ( ) . chain ( unreachable_regions) ) ;
155- ( counter_expressions, counter_regions)
153+ let mut collected_counter_regions = expression_regions;
154+ collected_counter_regions. extend ( counter_regions) ;
155+ collected_counter_regions. extend ( unreachable_regions) ;
156+ collected_counter_regions. sort_unstable_by_key ( |( _counter, region) | * region) ;
157+
158+ ( counter_expressions, collected_counter_regions)
156159 }
157160
158161 fn counter_regions ( & self ) -> impl Iterator < Item = ( Counter , & CodeRegion ) > {
@@ -165,7 +168,7 @@ impl<'tcx> FunctionCoverage<'tcx> {
165168
166169 fn expressions_with_regions (
167170 & self ,
168- ) -> ( Vec < CounterExpression > , impl Iterator < Item = ( Counter , & CodeRegion ) > ) {
171+ ) -> ( Vec < CounterExpression > , Vec < ( Counter , & CodeRegion ) > ) {
169172 let mut counter_expressions = Vec :: with_capacity ( self . expressions . len ( ) ) ;
170173 let mut expression_regions = Vec :: with_capacity ( self . expressions . len ( ) ) ;
171174 let mut new_indexes = IndexVec :: from_elem_n ( None , self . expressions . len ( ) ) ;
@@ -302,7 +305,7 @@ impl<'tcx> FunctionCoverage<'tcx> {
302305 ) ;
303306 }
304307 }
305- ( counter_expressions, expression_regions. into_iter ( ) )
308+ ( counter_expressions, expression_regions)
306309 }
307310
308311 fn unreachable_regions ( & self ) -> impl Iterator < Item = ( Counter , & CodeRegion ) > {
0 commit comments