@@ -240,33 +240,39 @@ impl Config {
240
240
status, stdout_utf8, stderr_utf8
241
241
) ;
242
242
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" ) } ;
246
244
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 ( ) ) ;
251
246
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 ,
257
249
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 ,
261
252
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
+ }
265
267
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
+ }
270
276
} ;
271
277
debug ! (
272
278
"default_outcome_of_output: input: {:?} result: {:?}" ,
@@ -311,27 +317,27 @@ enum OutputProcessingMode {
311
317
RegressOnSuccessStatus ,
312
318
313
319
/// `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.
318
324
///
319
325
/// You explicitly opt into this seting via `--regress=ice`.
320
326
RegressOnIceAlone ,
321
327
322
328
/// `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.
326
332
///
327
333
/// You explicitly opt into this setting via `--regress=non-ice`
328
334
RegressOnNotIce ,
329
335
330
336
/// `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.
335
341
///
336
342
/// (The main difference between this case and `RegressOnSuccessStatus` is
337
343
/// the handling of ICE: `RegressOnSuccessStatus` assumes that ICE should be
@@ -346,10 +352,11 @@ impl OutputProcessingMode {
346
352
fn must_process_stderr ( & self ) -> bool {
347
353
match self {
348
354
OutputProcessingMode :: RegressOnErrorStatus
349
- | OutputProcessingMode :: RegressOnSuccessStatus
350
- | OutputProcessingMode :: RegressOnNonCleanError
355
+ | OutputProcessingMode :: RegressOnSuccessStatus => false ,
356
+
357
+ OutputProcessingMode :: RegressOnNonCleanError
351
358
| OutputProcessingMode :: RegressOnIceAlone
352
- | OutputProcessingMode :: RegressOnNotIce => false ,
359
+ | OutputProcessingMode :: RegressOnNotIce => true ,
353
360
}
354
361
}
355
362
}
0 commit comments