@@ -59,8 +59,8 @@ use crate::traits::{
59
59
} ;
60
60
61
61
use rustc_data_structures:: fx:: { FxIndexMap , FxIndexSet } ;
62
+ use rustc_errors:: { error_code, Applicability , DiagnosticBuilder , DiagnosticStyledString } ;
62
63
use rustc_errors:: { pluralize, struct_span_err, Diagnostic , ErrorGuaranteed , IntoDiagnosticArg } ;
63
- use rustc_errors:: { Applicability , DiagnosticBuilder , DiagnosticStyledString } ;
64
64
use rustc_hir as hir;
65
65
use rustc_hir:: def:: DefKind ;
66
66
use rustc_hir:: def_id:: { DefId , LocalDefId } ;
@@ -2341,40 +2341,29 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
2341
2341
} ,
2342
2342
} ;
2343
2343
2344
- let mut err = match sub. kind ( ) {
2345
- ty:: ReEarlyBound ( _) | ty:: ReFree ( _) if sub. has_name ( ) => struct_span_err ! (
2346
- self . tcx. sess,
2347
- span,
2348
- E0309 ,
2349
- "{} may not live long enough" ,
2350
- labeled_user_string
2351
- ) ,
2352
- ty:: ReStatic => struct_span_err ! (
2353
- self . tcx. sess,
2354
- span,
2355
- E0310 ,
2356
- "{} may not live long enough" ,
2357
- labeled_user_string
2358
- ) ,
2359
- _ => {
2360
- let mut err = struct_span_err ! (
2361
- self . tcx. sess,
2362
- span,
2363
- E0311 ,
2364
- "{} may not live long enough" ,
2365
- labeled_user_string
2366
- ) ;
2367
- note_and_explain_region (
2368
- self . tcx ,
2369
- & mut err,
2370
- & format ! ( "{labeled_user_string} must be valid for " ) ,
2371
- sub,
2372
- "..." ,
2373
- None ,
2374
- ) ;
2375
- err
2344
+ let mut err = self . tcx . sess . struct_span_err_with_code (
2345
+ span,
2346
+ format ! ( "{labeled_user_string} may not live long enough" ) ,
2347
+ match sub. kind ( ) {
2348
+ ty:: ReEarlyBound ( _) | ty:: ReFree ( _) if sub. has_name ( ) => error_code ! ( E0309 ) ,
2349
+ ty:: ReStatic => error_code ! ( E0310 ) ,
2350
+ _ => error_code ! ( E0311 ) ,
2351
+ } ,
2352
+ ) ;
2353
+
2354
+ ' _explain: {
2355
+ let ( description, span) = match sub. kind ( ) {
2356
+ ty:: ReEarlyBound ( _) | ty:: ReFree ( _) | ty:: ReStatic => {
2357
+ msg_span_from_named_region ( self . tcx , sub, Some ( span) )
2358
+ }
2359
+ _ => ( format ! ( "lifetime `{sub}`" ) , Some ( span) ) ,
2360
+ } ;
2361
+ let prefix = format ! ( "{labeled_user_string} must be valid for " ) ;
2362
+ label_msg_span ( & mut err, & prefix, description, span, "..." ) ;
2363
+ if let Some ( origin) = origin {
2364
+ self . note_region_origin ( & mut err, & origin) ;
2376
2365
}
2377
- } ;
2366
+ }
2378
2367
2379
2368
' suggestion: {
2380
2369
let msg = "consider adding an explicit lifetime bound" ;
@@ -2450,9 +2439,6 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
2450
2439
) ;
2451
2440
}
2452
2441
2453
- if let Some ( origin) = origin {
2454
- self . note_region_origin ( & mut err, & origin) ;
2455
- }
2456
2442
err
2457
2443
}
2458
2444
0 commit comments