@@ -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 } ;
@@ -2351,40 +2351,29 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
2351
2351
} ,
2352
2352
} ;
2353
2353
2354
- let mut err = match sub. kind ( ) {
2355
- ty:: ReEarlyBound ( _) | ty:: ReFree ( _) if sub. has_name ( ) => struct_span_err ! (
2356
- self . tcx. sess,
2357
- span,
2358
- E0309 ,
2359
- "{} may not live long enough" ,
2360
- labeled_user_string
2361
- ) ,
2362
- ty:: ReStatic => struct_span_err ! (
2363
- self . tcx. sess,
2364
- span,
2365
- E0310 ,
2366
- "{} may not live long enough" ,
2367
- labeled_user_string
2368
- ) ,
2369
- _ => {
2370
- let mut err = struct_span_err ! (
2371
- self . tcx. sess,
2372
- span,
2373
- E0311 ,
2374
- "{} may not live long enough" ,
2375
- labeled_user_string
2376
- ) ;
2377
- note_and_explain_region (
2378
- self . tcx ,
2379
- & mut err,
2380
- & format ! ( "{labeled_user_string} must be valid for " ) ,
2381
- sub,
2382
- "..." ,
2383
- None ,
2384
- ) ;
2385
- err
2354
+ let mut err = self . tcx . sess . struct_span_err_with_code (
2355
+ span,
2356
+ format ! ( "{labeled_user_string} may not live long enough" ) ,
2357
+ match sub. kind ( ) {
2358
+ ty:: ReEarlyBound ( _) | ty:: ReFree ( _) if sub. has_name ( ) => error_code ! ( E0309 ) ,
2359
+ ty:: ReStatic => error_code ! ( E0310 ) ,
2360
+ _ => error_code ! ( E0311 ) ,
2361
+ } ,
2362
+ ) ;
2363
+
2364
+ ' _explain: {
2365
+ let ( description, span) = match sub. kind ( ) {
2366
+ ty:: ReEarlyBound ( _) | ty:: ReFree ( _) | ty:: ReStatic => {
2367
+ msg_span_from_named_region ( self . tcx , sub, Some ( span) )
2368
+ }
2369
+ _ => ( format ! ( "lifetime `{sub}`" ) , Some ( span) ) ,
2370
+ } ;
2371
+ let prefix = format ! ( "{labeled_user_string} must be valid for " ) ;
2372
+ label_msg_span ( & mut err, & prefix, description, span, "..." ) ;
2373
+ if let Some ( origin) = origin {
2374
+ self . note_region_origin ( & mut err, & origin) ;
2386
2375
}
2387
- } ;
2376
+ }
2388
2377
2389
2378
' suggestion: {
2390
2379
let msg = "consider adding an explicit lifetime bound" ;
@@ -2460,9 +2449,6 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
2460
2449
) ;
2461
2450
}
2462
2451
2463
- if let Some ( origin) = origin {
2464
- self . note_region_origin ( & mut err, & origin) ;
2465
- }
2466
2452
err
2467
2453
}
2468
2454
0 commit comments