1
1
use std:: ffi:: OsString ;
2
2
use std:: num:: NonZeroUsize ;
3
3
use std:: path:: { Path , PathBuf } ;
4
+ use std:: sync:: OnceLock ;
4
5
use std:: { env, process:: Command } ;
5
6
6
7
use colored:: * ;
@@ -67,8 +68,8 @@ fn miri_config(target: &str, path: &str, mode: Mode, with_dependencies: bool) ->
67
68
68
69
let mut config = Config {
69
70
target : Some ( target. to_owned ( ) ) ,
70
- stderr_filters : STDERR . clone ( ) ,
71
- stdout_filters : STDOUT . clone ( ) ,
71
+ stderr_filters : stderr_filters ( ) . into ( ) ,
72
+ stdout_filters : stdout_filters ( ) . into ( ) ,
72
73
mode,
73
74
program,
74
75
out_dir : PathBuf :: from ( std:: env:: var_os ( "CARGO_TARGET_DIR" ) . unwrap ( ) ) . join ( "ui" ) ,
@@ -174,15 +175,18 @@ fn run_tests(
174
175
}
175
176
176
177
macro_rules! regexes {
177
- ( $name: ident: $( $regex: expr => $replacement: expr, ) * ) => { lazy_static:: lazy_static! {
178
- static ref $name: Vec <( Match , & ' static [ u8 ] ) > = vec![
179
- $( ( Regex :: new( $regex) . unwrap( ) . into( ) , $replacement. as_bytes( ) ) , ) *
180
- ] ;
181
- } } ;
178
+ ( $name: ident: $( $regex: expr => $replacement: expr, ) * ) => {
179
+ fn $name( ) -> & ' static [ ( Match , & ' static [ u8 ] ) ] {
180
+ static S : OnceLock <Vec <( Match , & ' static [ u8 ] ) >> = OnceLock :: new( ) ;
181
+ S . get_or_init( || vec![
182
+ $( ( Regex :: new( $regex) . unwrap( ) . into( ) , $replacement. as_bytes( ) ) , ) *
183
+ ] )
184
+ }
185
+ } ;
182
186
}
183
187
184
188
regexes ! {
185
- STDOUT :
189
+ stdout_filters :
186
190
// Windows file paths
187
191
r"\\" => "/" ,
188
192
// erase borrow tags
@@ -191,7 +195,7 @@ regexes! {
191
195
}
192
196
193
197
regexes ! {
194
- STDERR :
198
+ stderr_filters :
195
199
// erase line and column info
196
200
r"\.rs:[0-9]+:[0-9]+(: [0-9]+:[0-9]+)?" => ".rs:LL:CC" ,
197
201
// erase alloc ids
0 commit comments