Skip to content

Commit e93b7be

Browse files
committed
MirPass: make name more const
1 parent 94df917 commit e93b7be

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed

compiler/rustc_middle/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#![feature(assert_matches)]
3131
#![feature(box_patterns)]
3232
#![feature(core_intrinsics)]
33+
#![feature(const_type_name)]
3334
#![feature(discriminant_kind)]
3435
#![feature(exhaustive_patterns)]
3536
#![feature(coroutines)]

compiler/rustc_middle/src/mir/mod.rs

+15-2
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,21 @@ fn to_profiler_name(type_name: &'static str) -> &'static str {
140140
/// loop that goes over each available MIR and applies `run_pass`.
141141
pub trait MirPass<'tcx> {
142142
fn name(&self) -> &'static str {
143-
let name = std::any::type_name::<Self>();
144-
if let Some((_, tail)) = name.rsplit_once(':') { tail } else { name }
143+
// FIXME Simplify the implementation once more `str` methods get const-stable.
144+
// See copypaste in `MirLint`
145+
const {
146+
let name = std::any::type_name::<Self>();
147+
let bytes = name.as_bytes();
148+
let mut i = bytes.len();
149+
while i > 0 && bytes[i - 1] != b':' {
150+
i = i - 1;
151+
}
152+
let (_, bytes) = bytes.split_at(i);
153+
match std::str::from_utf8(bytes) {
154+
Ok(name) => name,
155+
Err(_) => name,
156+
}
157+
}
145158
}
146159

147160
fn profiler_name(&self) -> &'static str {

compiler/rustc_mir_transform/src/pass_manager.rs

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use crate::{lint::lint_body, validate, MirPass};
88
pub trait MirLint<'tcx> {
99
fn name(&self) -> &'static str {
1010
// FIXME Simplify the implementation once more `str` methods get const-stable.
11+
// See copypaste in `MirPass`
1112
const {
1213
let name = std::any::type_name::<Self>();
1314
let bytes = name.as_bytes();

0 commit comments

Comments
 (0)