@@ -1208,6 +1208,7 @@ pub struct CguMessage;
12081208// - `is_lint`: lints aren't relevant during codegen.
12091209// - `emitted_at`: not used for codegen diagnostics.
12101210struct Diagnostic {
1211+ span : Vec < SpanData > ,
12111212 level : Level ,
12121213 messages : Vec < ( DiagMessage , Style ) > ,
12131214 code : Option < ErrCode > ,
@@ -1218,7 +1219,7 @@ struct Diagnostic {
12181219// A cut-down version of `rustc_errors::Subdiag` that impls `Send`. It's
12191220// missing the following fields from `rustc_errors::Subdiag`.
12201221// - `span`: it doesn't impl `Send`.
1221- pub ( crate ) struct Subdiagnostic {
1222+ struct Subdiagnostic {
12221223 level : Level ,
12231224 messages : Vec < ( DiagMessage , Style ) > ,
12241225}
@@ -1941,7 +1942,7 @@ impl Emitter for SharedEmitter {
19411942 ) {
19421943 // Check that we aren't missing anything interesting when converting to
19431944 // the cut-down local `DiagInner`.
1944- assert_eq ! ( diag. span, MultiSpan :: new ( ) ) ;
1945+ assert ! ( ! diag. span. has_span_labels ( ) ) ;
19451946 assert_eq ! ( diag. suggestions, Suggestions :: Enabled ( vec![ ] ) ) ;
19461947 assert_eq ! ( diag. sort_span, rustc_span:: DUMMY_SP ) ;
19471948 assert_eq ! ( diag. is_lint, None ) ;
@@ -1950,6 +1951,7 @@ impl Emitter for SharedEmitter {
19501951 let args = mem:: replace ( & mut diag. args , DiagArgMap :: default ( ) ) ;
19511952 drop (
19521953 self . sender . send ( SharedEmitterMessage :: Diagnostic ( Diagnostic {
1954+ span : diag. span . primary_spans ( ) . iter ( ) . map ( |span| span. data ( ) ) . collect :: < Vec < _ > > ( ) ,
19531955 level : diag. level ( ) ,
19541956 messages : diag. messages ,
19551957 code : diag. code ,
@@ -1994,6 +1996,9 @@ impl SharedEmitterMain {
19941996 let dcx = sess. dcx ( ) ;
19951997 let mut d =
19961998 rustc_errors:: DiagInner :: new_with_messages ( diag. level , diag. messages ) ;
1999+ d. span = MultiSpan :: from_spans (
2000+ diag. span . into_iter ( ) . map ( |span| span. span ( ) ) . collect ( ) ,
2001+ ) ;
19972002 d. code = diag. code ; // may be `None`, that's ok
19982003 d. children = diag
19992004 . children
0 commit comments