diff options
| author | Camille GILLOT <gillot.camille@gmail.com> | 2023-10-16 17:36:39 +0000 |
|---|---|---|
| committer | Camille GILLOT <gillot.camille@gmail.com> | 2023-10-19 15:51:52 +0000 |
| commit | 4ff03cd1a49dbf08f24c7054d4fd478e87c3a4de (patch) | |
| tree | 365c46e24ce6d59a9d242a2ef7660938ac4085c7 /src/tools/compiletest | |
| parent | c104861b7b51d2c28e7023e7e53db16cc6677e29 (diff) | |
Allow to run filecheck in mir-opt tests.
Diffstat (limited to 'src/tools/compiletest')
| -rw-r--r-- | src/tools/compiletest/src/runtest.rs | 65 |
1 files changed, 26 insertions, 39 deletions
diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs index 875671c64e0..8ce00e00b57 100644 --- a/src/tools/compiletest/src/runtest.rs +++ b/src/tools/compiletest/src/runtest.rs @@ -15,6 +15,7 @@ use crate::json; use crate::read2::{read2_abbreviated, Truncated}; use crate::util::{add_dylib_path, dylib_env_var, logv, PathBufExt}; use crate::ColorConfig; +use miropt_test_tools::{files_for_miropt_test, MiroptTest, MiroptTestFile}; use regex::{Captures, Regex}; use rustfix::{apply_suggestions, get_suggestions_from_json, Filter}; @@ -229,6 +230,7 @@ enum Emit { None, Metadata, LlvmIr, + Mir, Asm, LinkArgsAsm, } @@ -2506,6 +2508,9 @@ impl<'test> TestCx<'test> { Emit::LlvmIr => { rustc.args(&["--emit", "llvm-ir"]); } + Emit::Mir => { + rustc.args(&["--emit", "mir"]); + } Emit::Asm => { rustc.args(&["--emit", "asm"]); } @@ -3984,11 +3989,17 @@ impl<'test> TestCx<'test> { fn run_mir_opt_test(&self) { let pm = self.pass_mode(); let should_run = self.should_run(pm); - let emit_metadata = self.should_emit_metadata(pm); - let passes = self.get_passes(); - let proc_res = self.compile_test_with_passes(should_run, emit_metadata, passes); - self.check_mir_dump(); + let mut test_info = files_for_miropt_test( + &self.testpaths.file, + self.config.get_pointer_width(), + self.config.target_cfg().panic.for_miropt_test_tools(), + ); + + let passes = std::mem::take(&mut test_info.passes); + + let proc_res = self.compile_test_with_passes(should_run, Emit::Mir, passes); + self.check_mir_dump(test_info); if !proc_res.status.success() { self.fatal_proc_rec("compilation failed!", &proc_res); } @@ -4002,37 +4013,12 @@ impl<'test> TestCx<'test> { } } - fn get_passes(&self) -> Vec<String> { - let files = miropt_test_tools::files_for_miropt_test( - &self.testpaths.file, - self.config.get_pointer_width(), - self.config.target_cfg().panic.for_miropt_test_tools(), - ); - - let mut out = Vec::new(); - - for miropt_test_tools::MiroptTestFiles { - from_file: _, - to_file: _, - expected_file: _, - passes, - } in files - { - out.extend(passes); - } - out - } - - fn check_mir_dump(&self) { + fn check_mir_dump(&self, test_info: MiroptTest) { let test_dir = self.testpaths.file.parent().unwrap(); let test_crate = self.testpaths.file.file_stem().unwrap().to_str().unwrap().replace("-", "_"); - let suffix = miropt_test_tools::output_file_suffix( - &self.testpaths.file, - self.config.get_pointer_width(), - self.config.target_cfg().panic.for_miropt_test_tools(), - ); + let MiroptTest { run_filecheck, suffix, files, passes: _ } = test_info; if self.config.bless { for e in @@ -4047,14 +4033,7 @@ impl<'test> TestCx<'test> { } } - let files = miropt_test_tools::files_for_miropt_test( - &self.testpaths.file, - self.config.get_pointer_width(), - self.config.target_cfg().panic.for_miropt_test_tools(), - ); - for miropt_test_tools::MiroptTestFiles { from_file, to_file, expected_file, passes: _ } in - files - { + for MiroptTestFile { from_file, to_file, expected_file } in files { let dumped_string = if let Some(after) = to_file { self.diff_mir_files(from_file.into(), after.into()) } else { @@ -4095,6 +4074,14 @@ impl<'test> TestCx<'test> { } } } + + if run_filecheck { + let output_path = self.output_base_name().with_extension("mir"); + let proc_res = self.verify_with_filecheck(&output_path); + if !proc_res.status.success() { + self.fatal_proc_rec("verification with 'FileCheck' failed", &proc_res); + } + } } fn diff_mir_files(&self, before: PathBuf, after: PathBuf) -> String { |
