Skip to content

Commit 8e8fba1

Browse files
committed
compiletest: Validate pass modes harder
1 parent 6203f68 commit 8e8fba1

11 files changed

+49
-32
lines changed

Diff for: src/test/incremental/issue-59523-on-implemented-is-not-unused.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// rustc_on_unimplemented, but with this bug we are seeing it fire (on
33
// subsequent runs) if incremental compilation is enabled.
44

5-
// revisions: rpass1 rpass2
5+
// revisions: cfail1 cfail2
66
// compile-pass
77

88
#![feature(on_unimplemented)]

Diff for: src/test/incremental/issue-59524-layout-scalar-valid-range-is-not-unused.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// seeing it fire (on subsequent runs) if incremental compilation is
44
// enabled.
55

6-
// revisions: rpass1 rpass2
6+
// revisions: cfail1 cfail2
77
// compile-pass
88

99
#![feature(rustc_attrs)]

Diff for: src/test/run-fail/rfc-1937-termination-trait/termination-trait-for-box-dyn-error.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// compile-pass
1+
// error-pattern:returned Box<dyn Error> from main()
22
// failure-status: 1
33

44
use std::error::Error;

Diff for: src/test/run-fail/rfc-1937-termination-trait/termination-trait-for-result-box-error_err.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// compile-pass
1+
// error-pattern:returned Box<Error> from main()
22
// failure-status: 1
33

44
use std::io::{Error, ErrorKind};

Diff for: src/test/ui/consts/const-eval/const_transmute.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// compile-pass
21
// run-pass
32

43
#![feature(const_fn_union)]

Diff for: src/test/ui/consts/const-eval/enum_discr.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// compile-pass
21
// run-pass
32

43
enum Foo {

Diff for: src/test/ui/expanded-cfg.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
// skip-codegen
2-
// compile-pass
1+
// check-pass
32

43
macro_rules! mac {
54
{} => {
@@ -19,5 +18,4 @@ macro_rules! mac {
1918

2019
mac! {}
2120

22-
2321
fn main() {}

Diff for: src/test/ui/issues/issue-22603.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// skip-codegen
2-
// compile-pass
1+
// check-pass
2+
33
#![feature(unboxed_closures, fn_traits)]
44
struct Foo;
55

Diff for: src/test/ui/issues/issue-37515.rs

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
// skip-codegen
2-
// compile-pass
1+
// check-pass
2+
33
#![warn(unused)]
44

55
type Z = dyn for<'x> Send;
66
//~^ WARN type alias is never used
77

8-
9-
fn main() {
10-
}
8+
fn main() {}
+5-9
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,16 @@
1-
// compile-pass
2-
3-
#![deny(single_use_lifetimes)]
4-
#![allow(dead_code)]
5-
#![allow(unused_variables)]
6-
71
// Test that we DO NOT warn when lifetime name is used only
82
// once in a fn return type -- using `'_` is not legal there,
93
// as it must refer back to an argument.
104
//
115
// (Normally, using `'static` would be preferred, but there are
126
// times when that is not what you want.)
13-
//
14-
// run-pass
7+
8+
// compile-pass
9+
10+
#![deny(single_use_lifetimes)]
1511

1612
fn b<'a>() -> &'a u32 { // OK: used only in return type
1713
&22
1814
}
1915

20-
fn main() { }
16+
fn main() {}

Diff for: src/tools/compiletest/src/header.rs

+34-7
Original file line numberDiff line numberDiff line change
@@ -526,14 +526,41 @@ impl TestProps {
526526
self.check_test_line_numbers_match = config.parse_check_test_line_numbers_match(ln);
527527
}
528528

529-
if config.parse_name_directive(ln, "check-pass") ||
530-
config.parse_name_directive(ln, "skip-codegen") {
531-
self.pass_mode = Some(PassMode::Check);
532-
} else if config.parse_name_directive(ln, "build-pass") ||
533-
config.parse_name_directive(ln, "compile-pass") {
534-
self.pass_mode = Some(PassMode::Build);
529+
let check_no_run = |s| {
530+
if config.mode != Mode::Ui && config.mode != Mode::Incremental {
531+
panic!("`{}` header is only supported in UI and incremental tests", s);
532+
}
533+
if config.mode == Mode::Incremental &&
534+
!cfg.map_or(false, |r| r.starts_with("cfail")) &&
535+
!self.revisions.iter().all(|r| r.starts_with("cfail")) {
536+
panic!("`{}` header is only supported in `cfail` incremental tests", s);
537+
}
538+
};
539+
let pass_mode = if config.parse_name_directive(ln, "check-pass") {
540+
check_no_run("check-pass");
541+
Some(PassMode::Check)
542+
} else if config.parse_name_directive(ln, "skip-codegen") {
543+
check_no_run("skip-codegen");
544+
Some(PassMode::Check)
545+
} else if config.parse_name_directive(ln, "build-pass") {
546+
check_no_run("build-pass");
547+
Some(PassMode::Build)
548+
} else if config.parse_name_directive(ln, "compile-pass") {
549+
check_no_run("compile-pass");
550+
Some(PassMode::Build)
535551
} else if config.parse_name_directive(ln, "run-pass") {
536-
self.pass_mode = Some(PassMode::Run);
552+
if config.mode != Mode::Ui && config.mode != Mode::RunPass /* compatibility */ {
553+
panic!("`run-pass` header is only supported in UI tests")
554+
}
555+
Some(PassMode::Run)
556+
} else {
557+
None
558+
};
559+
match (self.pass_mode, pass_mode) {
560+
(None, Some(_)) => self.pass_mode = pass_mode,
561+
(Some(_), Some(pm)) if pm == PassMode::Check => self.pass_mode = pass_mode,
562+
(Some(_), Some(_)) => panic!("multiple `*-pass` headers in a single test"),
563+
(_, None) => {}
537564
}
538565

539566
if !self.disable_ui_testing_normalization {

0 commit comments

Comments
 (0)