@@ -8,8 +8,9 @@ use rustc_span::source_map::Spanned;
8
8
use rustc_span:: { ErrorGuaranteed , Span , Symbol } ;
9
9
10
10
use super :: InterpCx ;
11
- use crate :: errors:: { self , FrameNote , ReportErrorExt } ;
11
+ use crate :: errors:: { self , FrameNote } ;
12
12
use crate :: interpret:: { ErrorHandled , InterpError , InterpErrorInfo , Machine , MachineStopType } ;
13
+ use crate :: InterpErrorExt ;
13
14
14
15
/// The CTFE machine has some custom error kinds.
15
16
#[ derive( Clone , Debug ) ]
@@ -125,7 +126,7 @@ pub(super) fn report<'tcx, C, F, E>(
125
126
error : InterpError < ' tcx > ,
126
127
span : Option < Span > ,
127
128
get_span_and_frames : C ,
128
- mk : F ,
129
+ _mk : F ,
129
130
) -> ErrorHandled
130
131
where
131
132
C : FnOnce ( ) -> ( Span , Vec < FrameNote > ) ,
@@ -162,15 +163,18 @@ where
162
163
// Report as hard error.
163
164
let ( our_span, frames) = get_span_and_frames ( ) ;
164
165
let span = span. unwrap_or ( our_span) ;
165
- let err = mk ( span, frames) ;
166
- let mut err = tcx. sess . create_err ( err) ;
166
+ let err = tcx. sess . create_err ( Spanned { span, node : InterpErrorExt ( error) } ) ;
167
167
168
- let msg = error. diagnostic_message ( ) ;
169
- error. add_args ( & tcx. sess . parse_sess . span_diagnostic , & mut err) ;
168
+ let Some ( ( mut err, handler) ) = err. into_diagnostic ( ) else {
169
+ panic ! ( "did not emit diag" ) ;
170
+ } ;
171
+
172
+ for frame in frames {
173
+ err. eager_subdiagnostic ( handler, frame) ;
174
+ }
170
175
171
176
// Use *our* span to label the interp error
172
- err. span_label ( our_span, msg) ;
173
- ErrorHandled :: Reported ( err. emit ( ) . into ( ) )
177
+ ErrorHandled :: Reported ( handler. emit_diagnostic ( & mut err) . unwrap ( ) . into ( ) )
174
178
}
175
179
}
176
180
}
0 commit comments