diff options
| author | Zalathar <Zalathar@users.noreply.github.com> | 2024-02-17 22:57:26 +1100 |
|---|---|---|
| committer | Zalathar <Zalathar@users.noreply.github.com> | 2024-02-18 10:51:56 +1100 |
| commit | c521d7fa2e69908c1be4585119e8a90140c87297 (patch) | |
| tree | 3bf247bb8f08e027f046415b84d2222841e68711 | |
| parent | 488ffaa7260901a13ac3e51a6ba06f26b976e9cd (diff) | |
| download | rust-c521d7fa2e69908c1be4585119e8a90140c87297.tar.gz rust-c521d7fa2e69908c1be4585119e8a90140c87297.zip | |
Move the extra directives for `Mode::CoverageRun` into `iter_header`
When these extra directives were ported over as part of #112300, it made sense to introduce `iter_header_extra` and pass them in as an extra argument. But now that #120881 has added a `mode` parameter to `iter_header` for its own purposes, it's slightly simpler to move the coverage special-case code directly into `iter_header` as well. This lets us get rid of `iter_header_extra`.
| -rw-r--r-- | src/tools/compiletest/src/header.rs | 60 |
1 files changed, 21 insertions, 39 deletions
diff --git a/src/tools/compiletest/src/header.rs b/src/tools/compiletest/src/header.rs index 7395e591888..7f765fd86c8 100644 --- a/src/tools/compiletest/src/header.rs +++ b/src/tools/compiletest/src/header.rs @@ -672,17 +672,6 @@ pub fn line_directive<'line>( } } -fn iter_header<R: Read>( - mode: Mode, - suite: &str, - poisoned: &mut bool, - testfile: &Path, - rdr: R, - it: &mut dyn FnMut(HeaderLine<'_>), -) { - iter_header_extra(mode, suite, poisoned, testfile, rdr, &[], it) -} - /// This is generated by collecting directives from ui tests and then extracting their directive /// names. This is **not** an exhaustive list of all possible directives. Instead, this is a /// best-effort approximation for diagnostics. @@ -813,23 +802,37 @@ struct HeaderLine<'ln> { line_number: usize, } -fn iter_header_extra( +fn iter_header( mode: Mode, suite: &str, poisoned: &mut bool, testfile: &Path, rdr: impl Read, - extra_directives: &[&str], it: &mut dyn FnMut(HeaderLine<'_>), ) { if testfile.is_dir() { return; } - // Process any extra directives supplied by the caller (e.g. because they - // are implied by the test mode), with a dummy line number of 0. - for directive in extra_directives { - it(HeaderLine { header_revision: None, original_line: "", directive, line_number: 0 }); + // Coverage tests in coverage-run mode always have these extra directives, + // without needing to specify them manually in every test file. + // (Some of the comments below have been copied over from the old + // `tests/run-make/coverage-reports/Makefile`, which no longer exists.) + if mode == Mode::CoverageRun { + let extra_directives: &[&str] = &[ + "needs-profiler-support", + // FIXME(mati865): MinGW GCC miscompiles compiler-rt profiling library but with Clang it works + // properly. Since we only have GCC on the CI ignore the test for now. + "ignore-windows-gnu", + // FIXME(pietroalbini): this test currently does not work on cross-compiled + // targets because remote-test is not capable of sending back the *.profraw + // files generated by the LLVM instrumentation. + "ignore-cross-compile", + ]; + // Process the extra implied directives, with a dummy line number of 0. + for directive in extra_directives { + it(HeaderLine { header_revision: None, original_line: "", directive, line_number: 0 }); + } } let comment = if testfile.extension().is_some_and(|e| e == "rs") { @@ -1162,35 +1165,14 @@ pub fn make_test_description<R: Read>( let mut ignore_message = None; let mut should_fail = false; - let extra_directives: &[&str] = match config.mode { - // The coverage-run tests are treated as having these extra directives, - // without needing to specify them manually in every test file. - // (Some of the comments below have been copied over from - // `tests/run-make/coverage-reports/Makefile`, which no longer exists.) - Mode::CoverageRun => { - &[ - "needs-profiler-support", - // FIXME(mati865): MinGW GCC miscompiles compiler-rt profiling library but with Clang it works - // properly. Since we only have GCC on the CI ignore the test for now. - "ignore-windows-gnu", - // FIXME(pietroalbini): this test currently does not work on cross-compiled - // targets because remote-test is not capable of sending back the *.profraw - // files generated by the LLVM instrumentation. - "ignore-cross-compile", - ] - } - _ => &[], - }; - let mut local_poisoned = false; - iter_header_extra( + iter_header( config.mode, &config.suite, &mut local_poisoned, path, src, - extra_directives, &mut |HeaderLine { header_revision, original_line, directive: ln, line_number }| { if header_revision.is_some() && header_revision != cfg { return; |
