From 00bc634f8f396b7a0e1e6545b05eb117b5ddc7c6 Mon Sep 17 00:00:00 2001 From: Tatsuyuki Ishi Date: Wed, 25 Apr 2018 18:05:47 +0900 Subject: [PATCH] compiletest: introduce skip-trans --- src/test/run-pass/compiletest-skip-trans.rs | 17 +++++++++++++++++ src/tools/compiletest/src/header.rs | 11 +++++++++++ src/tools/compiletest/src/runtest.rs | 13 ++++++++++--- 3 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 src/test/run-pass/compiletest-skip-trans.rs diff --git a/src/test/run-pass/compiletest-skip-trans.rs b/src/test/run-pass/compiletest-skip-trans.rs new file mode 100644 index 0000000000000..d24a6506c2c75 --- /dev/null +++ b/src/test/run-pass/compiletest-skip-trans.rs @@ -0,0 +1,17 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Test that with the `skip-trans` option the test isn't executed. + +// skip-trans + +fn main() { + unreachable!(); +} diff --git a/src/tools/compiletest/src/header.rs b/src/tools/compiletest/src/header.rs index 3795704466a23..73dd079cf0ccb 100644 --- a/src/tools/compiletest/src/header.rs +++ b/src/tools/compiletest/src/header.rs @@ -228,6 +228,8 @@ pub struct TestProps { pub check_test_line_numbers_match: bool, // The test must be compiled and run successfully. Only used in UI tests for now. pub run_pass: bool, + // Skip any codegen step and running the executable. Only for run-pass. + pub skip_trans: bool, // Do not pass `-Z ui-testing` to UI tests pub disable_ui_testing_normalization: bool, // customized normalization rules @@ -260,6 +262,7 @@ impl TestProps { compile_pass: false, check_test_line_numbers_match: false, run_pass: false, + skip_trans: false, disable_ui_testing_normalization: false, normalize_stdout: vec![], normalize_stderr: vec![], @@ -381,6 +384,10 @@ impl TestProps { config.parse_compile_pass(ln) || self.run_pass; } + if !self.skip_trans { + self.skip_trans = config.parse_skip_trans(ln); + } + if !self.disable_ui_testing_normalization { self.disable_ui_testing_normalization = config.parse_disable_ui_testing_normalization(ln); @@ -524,6 +531,10 @@ impl Config { self.parse_name_directive(line, "run-pass") } + fn parse_skip_trans(&self, line: &str) -> bool { + self.parse_name_directive(line, "skip-trans") + } + fn parse_env(&self, line: &str, name: &str) -> Option<(String, String)> { self.parse_name_value_directive(line, name).map(|nv| { // nv is either FOO or FOO=BAR diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs index aabf2e6f8f0e6..85434bb8a69b8 100644 --- a/src/tools/compiletest/src/runtest.rs +++ b/src/tools/compiletest/src/runtest.rs @@ -343,9 +343,11 @@ impl<'test> TestCx<'test> { "run-pass tests with expected warnings should be moved to ui/" ); - let proc_res = self.exec_compiled_test(); - if !proc_res.status.success() { - self.fatal_proc_rec("test run failed!", &proc_res); + if !self.props.skip_trans { + let proc_res = self.exec_compiled_test(); + if !proc_res.status.success() { + self.fatal_proc_rec("test run failed!", &proc_res); + } } } @@ -1697,6 +1699,11 @@ impl<'test> TestCx<'test> { } } + if self.props.skip_trans { + assert!(!self.props.compile_flags.iter().any(|s| s.starts_with("--emit"))); + rustc.args(&["--emit", "metadata"]); + } + if !is_rustdoc { if self.config.target == "wasm32-unknown-unknown" { // rustc.arg("-g"); // get any backtrace at all on errors