diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-06-12 17:56:51 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-06-16 12:23:22 +0300 |
| commit | 8e8fba1b3bb96bb64f104d85618cab4fe7dc0740 (patch) | |
| tree | 945c520e4eb62164c52ee7bf0fbcd7aab21f9483 /src/tools/compiletest | |
| parent | 6203f68735a1b7511b85560b64995a14f1b40765 (diff) | |
| download | rust-8e8fba1b3bb96bb64f104d85618cab4fe7dc0740.tar.gz rust-8e8fba1b3bb96bb64f104d85618cab4fe7dc0740.zip | |
compiletest: Validate pass modes harder
Diffstat (limited to 'src/tools/compiletest')
| -rw-r--r-- | src/tools/compiletest/src/header.rs | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/src/tools/compiletest/src/header.rs b/src/tools/compiletest/src/header.rs index 8be15bb1576..1f52421ecbc 100644 --- a/src/tools/compiletest/src/header.rs +++ b/src/tools/compiletest/src/header.rs @@ -526,14 +526,41 @@ impl TestProps { self.check_test_line_numbers_match = config.parse_check_test_line_numbers_match(ln); } - if config.parse_name_directive(ln, "check-pass") || - config.parse_name_directive(ln, "skip-codegen") { - self.pass_mode = Some(PassMode::Check); - } else if config.parse_name_directive(ln, "build-pass") || - config.parse_name_directive(ln, "compile-pass") { - self.pass_mode = Some(PassMode::Build); + let check_no_run = |s| { + if config.mode != Mode::Ui && config.mode != Mode::Incremental { + panic!("`{}` header is only supported in UI and incremental tests", s); + } + if config.mode == Mode::Incremental && + !cfg.map_or(false, |r| r.starts_with("cfail")) && + !self.revisions.iter().all(|r| r.starts_with("cfail")) { + panic!("`{}` header is only supported in `cfail` incremental tests", s); + } + }; + let pass_mode = if config.parse_name_directive(ln, "check-pass") { + check_no_run("check-pass"); + Some(PassMode::Check) + } else if config.parse_name_directive(ln, "skip-codegen") { + check_no_run("skip-codegen"); + Some(PassMode::Check) + } else if config.parse_name_directive(ln, "build-pass") { + check_no_run("build-pass"); + Some(PassMode::Build) + } else if config.parse_name_directive(ln, "compile-pass") { + check_no_run("compile-pass"); + Some(PassMode::Build) } else if config.parse_name_directive(ln, "run-pass") { - self.pass_mode = Some(PassMode::Run); + if config.mode != Mode::Ui && config.mode != Mode::RunPass /* compatibility */ { + panic!("`run-pass` header is only supported in UI tests") + } + Some(PassMode::Run) + } else { + None + }; + match (self.pass_mode, pass_mode) { + (None, Some(_)) => self.pass_mode = pass_mode, + (Some(_), Some(pm)) if pm == PassMode::Check => self.pass_mode = pass_mode, + (Some(_), Some(_)) => panic!("multiple `*-pass` headers in a single test"), + (_, None) => {} } if !self.disable_ui_testing_normalization { |
