@@ -242,6 +242,13 @@ pub fn eval_main<'a, 'tcx: 'a>(
242242 }
243243 }
244244 Err ( mut e) => {
245+ // Special treatment for some error kinds
246+ let msg = match e. kind {
247+ InterpError :: Exit ( code) => std:: process:: exit ( code) ,
248+ InterpError :: NoMirFor ( ..) =>
249+ format ! ( "{}. Did you set `MIRI_SYSROOT` to a Miri-enabled sysroot? You can prepare one with `cargo miri setup`." , e) ,
250+ _ => e. to_string ( )
251+ } ;
245252 e. print_backtrace ( ) ;
246253 if let Some ( frame) = ecx. stack ( ) . last ( ) {
247254 let block = & frame. mir . basic_blocks ( ) [ frame. block ] ;
@@ -251,11 +258,10 @@ pub fn eval_main<'a, 'tcx: 'a>(
251258 block. terminator ( ) . source_info . span
252259 } ;
253260
254- let e = e. to_string ( ) ;
255- let msg = format ! ( "constant evaluation error: {}" , e) ;
261+ let msg = format ! ( "Miri evaluation error: {}" , msg) ;
256262 let mut err = struct_error ( ecx. tcx . tcx . at ( span) , msg. as_str ( ) ) ;
257263 let frames = ecx. generate_stacktrace ( None ) ;
258- err. span_label ( span, e ) ;
264+ err. span_label ( span, msg ) ;
259265 // We iterate with indices because we need to look at the next frame (the caller).
260266 for idx in 0 ..frames. len ( ) {
261267 let frame_info = & frames[ idx] ;
@@ -269,7 +275,7 @@ pub fn eval_main<'a, 'tcx: 'a>(
269275 }
270276 err. emit ( ) ;
271277 } else {
272- ecx. tcx . sess . err ( & e . to_string ( ) ) ;
278+ ecx. tcx . sess . err ( & msg ) ;
273279 }
274280
275281 for ( i, frame) in ecx. stack ( ) . iter ( ) . enumerate ( ) {
0 commit comments