Skip to content

Commit 2103a5a

Browse files
committed
limit special FileCheck revision checks
1 parent 891041f commit 2103a5a

File tree

2 files changed

+42
-10
lines changed

2 files changed

+42
-10
lines changed

src/tools/compiletest/src/header.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -951,10 +951,12 @@ impl Config {
951951
raw,
952952
testfile.display()
953953
);
954-
} else if FORBIDDEN_REVISION_NAMES.contains(&revision.as_str()) {
954+
} else if matches!(self.mode, Mode::Assembly | Mode::Codegen | Mode::MirOpt)
955+
&& FORBIDDEN_REVISION_NAMES.contains(&revision.as_str())
956+
{
955957
panic!(
956-
"invalid revision: `{}` in line `{}`: {}",
957-
revision,
958+
"revision name `{revision}` is not permitted in a test suite that uses `FileCheck` annotations\n\
959+
as it is confusing when used as custom `FileCheck` prefix: `{revision}` in line `{}`: {}",
958960
raw,
959961
testfile.display()
960962
);

src/tools/compiletest/src/header/tests.rs

+37-7
Original file line numberDiff line numberDiff line change
@@ -553,17 +553,47 @@ fn test_duplicate_revisions() {
553553
parse_rs(&config, "//@ revisions: rpass1 rpass1");
554554
}
555555

556+
fn test_file_check_revisions() {
557+
let revisions = ["CHECK", "COM", "NEXT", "SAME", "EMPTY", "NOT", "COUNT", "DAG", "LABEL"];
558+
}
559+
556560
#[test]
557561
fn test_forbidden_revisions() {
558-
let config: Config = cfg().build();
559562
let revisions = ["CHECK", "COM", "NEXT", "SAME", "EMPTY", "NOT", "COUNT", "DAG", "LABEL"];
563+
let check_enforced_modes = ["assembly", "codegen", "mir-opt"];
564+
let check_skipped_modes = [
565+
"pretty",
566+
"debuginfo",
567+
"rustdoc",
568+
"rustdoc-json",
569+
"codegen-units",
570+
"incremental",
571+
"ui",
572+
"js-doc-test",
573+
"coverage-map",
574+
"coverage-run",
575+
"crashes",
576+
];
577+
560578
for rev in revisions {
561-
let res = std::panic::catch_unwind(|| {
562-
parse_rs(&config, format!("//@ revisions: {rev}").as_str());
563-
});
564-
assert!(res.is_err());
565-
if let Some(msg) = res.unwrap_err().downcast_ref::<String>() {
566-
assert!(msg.contains(format!("invalid revision: `{rev}` in line ` {rev}`").as_str()))
579+
let content = format!("//@ revisions: {rev}");
580+
for mode in check_skipped_modes {
581+
let config = cfg().mode(mode).build();
582+
parse_rs(&config, &content);
583+
}
584+
585+
for mode in check_enforced_modes {
586+
let mut res = std::panic::catch_unwind(|| {
587+
let config = cfg().mode(mode).build();
588+
parse_rs(&config, &content);
589+
});
590+
assert!(res.is_err());
591+
assert!(
592+
res.unwrap_err()
593+
.downcast_ref::<String>()
594+
.unwrap()
595+
.contains(format!("revision name `{rev}` is not permitted in a test suite that uses `FileCheck` annotations").as_str())
596+
);
567597
}
568598
}
569599
}

0 commit comments

Comments
 (0)