@@ -322,37 +322,39 @@ impl<'tcx> RegionInferenceContext<'tcx> {
322322 fn check_free_region (
323323 & self ,
324324 infcx : & InferCtxt < ' _ , ' _ , ' tcx > ,
325- fr : RegionVid ,
326- fr_definition : & RegionDefinition < ' tcx > ,
325+ longer_fr : RegionVid ,
326+ longer_definition : & RegionDefinition < ' tcx > ,
327327 ) {
328328 let inferred_values = self . inferred_values . as_ref ( ) . unwrap ( ) ;
329- let fr_name = fr_definition. name . unwrap ( ) ;
330- let fr_value = inferred_values. iter ( fr. index ( ) ) ;
329+ let longer_name = longer_definition. name . unwrap ( ) ;
330+ let longer_value = inferred_values. iter ( longer_fr. index ( ) ) ;
331+
332+ // Find every region `shorter` such that `longer: shorter`
333+ // (because `longer` includes `end(shorter)`).
334+ for shorter_fr in longer_value. take_while ( |& i| i < self . num_universal_regions ) {
335+ let shorter_fr = RegionVid :: new ( shorter_fr) ;
331336
332- // Find every region `o` such that `fr: o`
333- // (because `fr` includes `end(o)`).
334- for outlived_fr in fr_value. take_while ( |& i| i < self . num_universal_regions ) {
335337 // `fr` includes `end(fr)`, that's not especially
336338 // interesting.
337- if fr . index ( ) == outlived_fr {
339+ if longer_fr == shorter_fr {
338340 continue ;
339341 }
340342
341- let outlived_fr_definition = & self . definitions [ RegionVid :: new ( outlived_fr ) ] ;
342- let outlived_fr_name = outlived_fr_definition . name . unwrap ( ) ;
343+ let shorter_definition = & self . definitions [ shorter_fr ] ;
344+ let shorter_name = shorter_definition . name . unwrap ( ) ;
343345
344346 // Check that `o <= fr`. If not, report an error.
345347 if !self . free_region_map
346- . sub_free_regions ( outlived_fr_name , fr_name )
348+ . sub_free_regions ( shorter_name , longer_name )
347349 {
348350 // FIXME: worst error msg ever
349- let blame_span = self . blame_span ( fr , RegionVid :: new ( outlived_fr ) ) ;
351+ let blame_span = self . blame_span ( longer_fr , shorter_fr ) ;
350352 infcx. tcx . sess . span_err (
351353 blame_span,
352354 & format ! (
353355 "free region `{}` does not outlive `{}`" ,
354- fr_name ,
355- outlived_fr_name
356+ longer_name ,
357+ shorter_name
356358 ) ,
357359 ) ;
358360 }
0 commit comments