@@ -240,33 +240,39 @@ impl Config {
240240            status,  stdout_utf8,  stderr_utf8
241241        ) ; 
242242
243-         // for commit message: 
244-         // no text but 101 https://github.com/rust-lang/rust/issues/21599 
245-         // no text, signal https://github.com/rust-lang/rust/issues/13368 
243+         let  saw_ice = || -> bool  {  stderr_utf8. contains ( "error: internal compiler error" )  } ; 
246244
247-         const  SUCCESS :  Option < i32 >  = Some ( 0 ) ; 
248-         const  ICE :  Option < i32 >  = Some ( 101 ) ; 
249- 
250-         let  input = ( self . output_processing_mode ( ) ,  status. code ( ) ) ; 
245+         let  input = ( self . output_processing_mode ( ) ,  status. success ( ) ) ; 
251246        let  result = match  input { 
252-             ( OutputProcessingMode :: RegressOnErrorStatus ,  SUCCESS )  => TestOutcome :: Baseline , 
253-             ( OutputProcessingMode :: RegressOnErrorStatus ,  _)  => TestOutcome :: Regressed , 
254- 
255-             ( OutputProcessingMode :: RegressOnSuccessStatus ,  SUCCESS )  => TestOutcome :: Regressed , 
256-             ( OutputProcessingMode :: RegressOnSuccessStatus ,  _)  => TestOutcome :: Baseline , 
247+             ( OutputProcessingMode :: RegressOnErrorStatus ,  true )  => TestOutcome :: Baseline , 
248+             ( OutputProcessingMode :: RegressOnErrorStatus ,  false )  => TestOutcome :: Regressed , 
257249
258-             ( OutputProcessingMode :: RegressOnIceAlone ,  ICE )  => TestOutcome :: Regressed , 
259-             ( OutputProcessingMode :: RegressOnIceAlone ,  None )  => TestOutcome :: Regressed , 
260-             ( OutputProcessingMode :: RegressOnIceAlone ,  _)  => TestOutcome :: Baseline , 
250+             ( OutputProcessingMode :: RegressOnSuccessStatus ,  true )  => TestOutcome :: Regressed , 
251+             ( OutputProcessingMode :: RegressOnSuccessStatus ,  false )  => TestOutcome :: Baseline , 
261252
262-             ( OutputProcessingMode :: RegressOnNotIce ,  ICE )  => TestOutcome :: Baseline , 
263-             ( OutputProcessingMode :: RegressOnNotIce ,  None )  => TestOutcome :: Baseline , 
264-             ( OutputProcessingMode :: RegressOnNotIce ,  _)  => TestOutcome :: Regressed , 
253+             ( OutputProcessingMode :: RegressOnIceAlone ,  _)  => { 
254+                 if  saw_ice ( )  { 
255+                     TestOutcome :: Regressed 
256+                 }  else  { 
257+                     TestOutcome :: Baseline 
258+                 } 
259+             } 
260+             ( OutputProcessingMode :: RegressOnNotIce ,  _)  => { 
261+                 if  saw_ice ( )  { 
262+                     TestOutcome :: Baseline 
263+                 }  else  { 
264+                     TestOutcome :: Regressed 
265+                 } 
266+             } 
265267
266-             ( OutputProcessingMode :: RegressOnNonCleanError ,  SUCCESS )  => TestOutcome :: Regressed , 
267-             ( OutputProcessingMode :: RegressOnNonCleanError ,  ICE )  => TestOutcome :: Regressed , 
268-             ( OutputProcessingMode :: RegressOnNonCleanError ,  None )  => TestOutcome :: Regressed , 
269-             ( OutputProcessingMode :: RegressOnNonCleanError ,  _)  => TestOutcome :: Baseline , 
268+             ( OutputProcessingMode :: RegressOnNonCleanError ,  true )  => TestOutcome :: Regressed , 
269+             ( OutputProcessingMode :: RegressOnNonCleanError ,  false )  => { 
270+                 if  saw_ice ( )  { 
271+                     TestOutcome :: Regressed 
272+                 }  else  { 
273+                     TestOutcome :: Baseline 
274+                 } 
275+             } 
270276        } ; 
271277        debug ! ( 
272278            "default_outcome_of_output: input: {:?} result: {:?}" , 
@@ -311,27 +317,27 @@ enum OutputProcessingMode {
311317RegressOnSuccessStatus , 
312318
313319    /// `RegressOnIceAlone`: Marks test outcome as `Regressed` if and only if 
314- /// the `rustc` process crashes or reports an interal compiler error (ICE)  
315- /// has  occurred. This covers the use case for when you want to bisect to  
316- /// see when an ICE was introduced pon a codebase that is meant to produce a  
317- /// clean error. 
320+ /// the `rustc` process issues a diagnostic indicating that an internal  
321+ /// compiler error (ICE)  occurred. This covers the use case for when you 
322+ /// want to bisect to  see when an ICE was introduced pon a codebase that is 
323+ /// meant to produce a  clean error. 
318324/// 
319325/// You explicitly opt into this seting via `--regress=ice`. 
320326RegressOnIceAlone , 
321327
322328    /// `RegressOnNotIce`: Marks test outcome as `Regressed` if and only if 
323- /// the `rustc` process does not crash or report  that an internal compiler  
324- /// error (ICE) has  occurred. This covers the use case for when you want to  
325- /// bisect to see when an ICE was fixed. 
329+ /// the `rustc` process does not issue a diagnostic indicating  that an 
330+ /// internal compiler  error (ICE) occurred. This covers the use case for 
331+ /// when you want to  bisect to see when an ICE was fixed. 
326332/// 
327333/// You explicitly opt into this setting via `--regress=non-ice` 
328334RegressOnNotIce , 
329335
330336    /// `RegressOnNonCleanError`: Marks test outcome as `Baseline` if and only 
331- /// if the `rustc` process reports error status that is  not an internal  
332- /// compiler error (ICE). This is the use case if the regression is a case  
333- /// where an ill-formed program has stopped being properly rejected by the  
334- /// compiler. 
337+ /// if the `rustc` process reports error status and does  not issue any  
338+ /// diagnostic indicating that an internal  compiler error (ICE) occurred.  
339+ /// This is the use case if the regression is a case where an ill-formed  
340+ /// program has stopped being properly rejected by the  compiler. 
335341/// 
336342/// (The main difference between this case and `RegressOnSuccessStatus` is 
337343/// the handling of ICE: `RegressOnSuccessStatus` assumes that ICE should be 
@@ -346,10 +352,11 @@ impl OutputProcessingMode {
346352    fn  must_process_stderr ( & self )  -> bool  { 
347353        match  self  { 
348354            OutputProcessingMode :: RegressOnErrorStatus 
349-             | OutputProcessingMode :: RegressOnSuccessStatus 
350-             | OutputProcessingMode :: RegressOnNonCleanError 
355+             | OutputProcessingMode :: RegressOnSuccessStatus  => false , 
356+ 
357+             OutputProcessingMode :: RegressOnNonCleanError 
351358            | OutputProcessingMode :: RegressOnIceAlone 
352-             | OutputProcessingMode :: RegressOnNotIce  => false , 
359+             | OutputProcessingMode :: RegressOnNotIce  => true , 
353360        } 
354361    } 
355362} 
0 commit comments