Skip to content

Commit 99591e6

Browse files
committed
Fix -Zmir-enable-passes to detect unregistered enum names
1 parent 9283d59 commit 99591e6

File tree

4 files changed

+39
-10
lines changed

4 files changed

+39
-10
lines changed

compiler/rustc_mir_transform/src/lib.rs

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -91,20 +91,32 @@ macro_rules! declare_passes {
9191
)+
9292
)*
9393

94-
static PASS_NAMES: LazyLock<FxIndexSet<&str>> = LazyLock::new(|| [
94+
static PASS_NAMES: LazyLock<FxIndexSet<&str>> = LazyLock::new(|| {
95+
let mut set = FxIndexSet::default();
9596
// Fake marker pass
96-
"PreCodegen",
97+
set.insert("PreCodegen");
9798
$(
9899
$(
99-
stringify!($pass_name),
100-
$(
101-
$(
102-
$mod_name::$pass_name::$ident.name(),
103-
)*
104-
)?
100+
set.extend(pass_names!($mod_name : $pass_name $( { $($ident),* } )? ));
105101
)+
106102
)*
107-
].into_iter().collect());
103+
set
104+
});
105+
};
106+
}
107+
108+
macro_rules! pass_names {
109+
// pass groups: only pass names inside are considered pass_names
110+
($mod_name:ident : $pass_group:ident { $($pass_name:ident),* $(,)? }) => {
111+
[
112+
$(
113+
$mod_name::$pass_group::$pass_name.name(),
114+
)*
115+
]
116+
};
117+
// lone pass names: stringify the struct or enum name
118+
($mod_name:ident : $pass_name:ident) => {
119+
[stringify!($pass_name)]
108120
};
109121
}
110122

tests/ui/lint/invalid_value-polymorphic.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//@ compile-flags: --crate-type=lib -Zmir-enable-passes=+InstSimplify
1+
//@ compile-flags: --crate-type=lib -Zmir-enable-passes=+InstSimplify-before-inline
22
//@ build-pass
33

44
#![feature(core_intrinsics)]
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
warning: MIR pass `SimplifyCfg` is unknown and will be ignored
2+
3+
warning: MIR pass `SimplifyCfg` is unknown and will be ignored
4+
|
5+
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
6+
7+
warning: 2 warnings emitted
8+

tests/ui/mir/enable_passes_validation.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
//@ revisions: empty unprefixed all_unknown all_known mixed
2+
//@ revisions: enum_not_in_pass_names enum_in_pass_names
23

34
//@[empty] compile-flags: -Zmir-enable-passes=
45

@@ -13,6 +14,12 @@
1314
//@[mixed] check-pass
1415
//@[mixed] compile-flags: -Zmir-enable-passes=+ThisPassDoesNotExist,+CheckAlignment
1516

17+
//@[enum_not_in_pass_names] check-pass
18+
//@[enum_not_in_pass_names] compile-flags: -Zmir-enable-passes=+SimplifyCfg
19+
20+
//@[enum_in_pass_names] check-pass
21+
//@[enum_in_pass_names] compile-flags: -Zmir-enable-passes=+AddCallGuards
22+
1623
fn main() {}
1724

1825
//[empty]~? ERROR incorrect value `` for unstable option `mir-enable-passes`
@@ -23,3 +30,5 @@ fn main() {}
2330
//[all_unknown]~? WARN MIR pass `DoesNotExist` is unknown and will be ignored
2431
//[all_unknown]~? WARN MIR pass `ThisPass` is unknown and will be ignored
2532
//[all_unknown]~? WARN MIR pass `DoesNotExist` is unknown and will be ignored
33+
//[enum_not_in_pass_names]~? WARN MIR pass `SimplifyCfg` is unknown and will be ignored
34+
//[enum_not_in_pass_names]~? WARN MIR pass `SimplifyCfg` is unknown and will be ignored

0 commit comments

Comments
 (0)