@@ -59,8 +59,8 @@ use crate::traits::{
5959} ;
6060
6161use rustc_data_structures:: fx:: { FxIndexMap , FxIndexSet } ;
62+ use rustc_errors:: { error_code, Applicability , DiagnosticBuilder , DiagnosticStyledString } ;
6263use rustc_errors:: { pluralize, struct_span_err, Diagnostic , ErrorGuaranteed , IntoDiagnosticArg } ;
63- use rustc_errors:: { Applicability , DiagnosticBuilder , DiagnosticStyledString } ;
6464use rustc_hir as hir;
6565use rustc_hir:: def:: DefKind ;
6666use rustc_hir:: def_id:: { DefId , LocalDefId } ;
@@ -2341,40 +2341,29 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
23412341 } ,
23422342 } ;
23432343
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) ;
23762365 }
2377- } ;
2366+ }
23782367
23792368 ' suggestion: {
23802369 let msg = "consider adding an explicit lifetime bound" ;
@@ -2450,9 +2439,6 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
24502439 ) ;
24512440 }
24522441
2453- if let Some ( origin) = origin {
2454- self . note_region_origin ( & mut err, & origin) ;
2455- }
24562442 err
24572443 }
24582444
0 commit comments