@@ -183,50 +183,14 @@ pub struct EvalError<'tcx> {
183183impl < ' tcx > EvalError < ' tcx > {
184184 pub fn print_backtrace ( & mut self ) {
185185 if let Some ( ref mut backtrace) = self . backtrace {
186- eprintln ! ( "{}" , print_backtrace( & mut * backtrace) ) ;
186+ print_backtrace ( & mut * backtrace) ;
187187 }
188188 }
189189}
190190
191- fn print_backtrace ( backtrace : & mut Backtrace ) -> String {
192- use std:: fmt:: Write ;
193-
191+ fn print_backtrace ( backtrace : & mut Backtrace ) {
194192 backtrace. resolve ( ) ;
195-
196- let mut trace_text = "\n \n An error occurred in miri:\n " . to_string ( ) ;
197- write ! ( trace_text, "backtrace frames: {}\n " , backtrace. frames( ) . len( ) ) . unwrap ( ) ;
198- ' frames: for ( i, frame) in backtrace. frames ( ) . iter ( ) . enumerate ( ) {
199- if frame. symbols ( ) . is_empty ( ) {
200- write ! ( trace_text, " {}: no symbols\n " , i) . unwrap ( ) ;
201- }
202- let mut first = true ;
203- for symbol in frame. symbols ( ) {
204- if first {
205- write ! ( trace_text, " {}: " , i) . unwrap ( ) ;
206- first = false ;
207- } else {
208- let len = i. to_string ( ) . len ( ) ;
209- write ! ( trace_text, " {} " , " " . repeat( len) ) . unwrap ( ) ;
210- }
211- if let Some ( name) = symbol. name ( ) {
212- write ! ( trace_text, "{}\n " , name) . unwrap ( ) ;
213- } else {
214- write ! ( trace_text, "<unknown>\n " ) . unwrap ( ) ;
215- }
216- write ! ( trace_text, " at " ) . unwrap ( ) ;
217- if let Some ( file_path) = symbol. filename ( ) {
218- write ! ( trace_text, "{}" , file_path. display( ) ) . unwrap ( ) ;
219- } else {
220- write ! ( trace_text, "<unknown_file>" ) . unwrap ( ) ;
221- }
222- if let Some ( line) = symbol. lineno ( ) {
223- write ! ( trace_text, ":{}\n " , line) . unwrap ( ) ;
224- } else {
225- write ! ( trace_text, "\n " ) . unwrap ( ) ;
226- }
227- }
228- }
229- trace_text
193+ eprintln ! ( "\n \n An error occurred in miri:\n {:?}" , backtrace) ;
230194}
231195
232196impl < ' tcx > From < EvalErrorKind < ' tcx , u64 > > for EvalError < ' tcx > {
@@ -238,7 +202,7 @@ impl<'tcx> From<EvalErrorKind<'tcx, u64>> for EvalError<'tcx> {
238202
239203 if val == "immediate" {
240204 // Print it now
241- eprintln ! ( "{}" , print_backtrace( & mut backtrace) ) ;
205+ print_backtrace ( & mut backtrace) ;
242206 None
243207 } else {
244208 Some ( Box :: new ( backtrace) )
0 commit comments