@@ -161,45 +161,45 @@ fn msg_span_from_early_bound_and_free_regions<'tcx>(
161
161
{
162
162
sp = param. span ;
163
163
}
164
- let text = if br. name == kw:: UnderscoreLifetime {
165
- format ! ( "the anonymous lifetime as defined here" )
166
- } else {
164
+ let text = if br. has_name ( ) {
167
165
format ! ( "the lifetime `{}` as defined here" , br. name)
166
+ } else {
167
+ format ! ( "the anonymous lifetime as defined here" )
168
168
} ;
169
169
( text, sp)
170
170
}
171
- ty:: ReFree ( ty:: FreeRegion {
172
- bound_region : ty:: BoundRegionKind :: BrNamed ( _, name) , ..
173
- } ) => {
174
- let mut sp = sm. guess_head_span ( tcx. def_span ( scope) ) ;
175
- if let Some ( param) =
176
- tcx. hir ( ) . get_generics ( scope) . and_then ( |generics| generics. get_named ( name) )
171
+ ty:: ReFree ( ref fr) => {
172
+ if !fr. bound_region . is_named ( )
173
+ && let Some ( ( ty, _) ) = find_anon_type ( tcx, region, & fr. bound_region )
177
174
{
178
- sp = param. span ;
179
- }
180
- let text = if name == kw:: UnderscoreLifetime {
181
- format ! ( "the anonymous lifetime as defined here" )
175
+ ( "the anonymous lifetime defined here" . to_string ( ) , ty. span )
182
176
} else {
183
- format ! ( "the lifetime `{}` as defined here" , name)
184
- } ;
185
- ( text, sp)
186
- }
187
- ty:: ReFree ( ref fr) => match fr. bound_region {
188
- ty:: BrAnon ( idx) => {
189
- if let Some ( ( ty, _) ) = find_anon_type ( tcx, region, & fr. bound_region ) {
190
- ( "the anonymous lifetime defined here" . to_string ( ) , ty. span )
191
- } else {
192
- (
177
+ match fr. bound_region {
178
+ ty:: BoundRegionKind :: BrNamed ( _, name) => {
179
+ let mut sp = sm. guess_head_span ( tcx. def_span ( scope) ) ;
180
+ if let Some ( param) =
181
+ tcx. hir ( ) . get_generics ( scope) . and_then ( |generics| generics. get_named ( name) )
182
+ {
183
+ sp = param. span ;
184
+ }
185
+ let text = if name == kw:: UnderscoreLifetime {
186
+ format ! ( "the anonymous lifetime as defined here" )
187
+ } else {
188
+ format ! ( "the lifetime `{}` as defined here" , name)
189
+ } ;
190
+ ( text, sp)
191
+ }
192
+ ty:: BrAnon ( idx) => (
193
193
format ! ( "the anonymous lifetime #{} defined here" , idx + 1 ) ,
194
- tcx. def_span ( scope) ,
195
- )
194
+ tcx. def_span ( scope)
195
+ ) ,
196
+ _ => (
197
+ format ! ( "the lifetime `{}` as defined here" , region) ,
198
+ sm. guess_head_span ( tcx. def_span ( scope) ) ,
199
+ ) ,
196
200
}
197
201
}
198
- _ => (
199
- format ! ( "the lifetime `{}` as defined here" , region) ,
200
- sm. guess_head_span ( tcx. def_span ( scope) ) ,
201
- ) ,
202
- } ,
202
+ }
203
203
_ => bug ! ( ) ,
204
204
}
205
205
}
@@ -2555,7 +2555,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
2555
2555
ty:: ReEarlyBound ( ty:: EarlyBoundRegion { name, .. } )
2556
2556
| ty:: ReFree ( ty:: FreeRegion { bound_region : ty:: BrNamed ( _, name) , .. } ) ,
2557
2557
_,
2558
- ) => {
2558
+ ) if name != kw :: UnderscoreLifetime => {
2559
2559
// Does the required lifetime have a nice name we can print?
2560
2560
let mut err = struct_span_err ! (
2561
2561
self . tcx. sess,
0 commit comments