@@ -25,42 +25,46 @@ use std::num::NonZero;
25
25
use std:: path:: { Path , PathBuf } ;
26
26
use std:: sync:: Arc ;
27
27
28
- fn mk_session ( matches : getopts:: Matches ) -> ( Session , Cfg ) {
28
+ fn sess_and_cfg < F > ( args : & [ & ' static str ] , f : F )
29
+ where
30
+ F : FnOnce ( Session , Cfg ) ,
31
+ {
29
32
let mut early_dcx = EarlyDiagCtxt :: new ( ErrorOutputType :: default ( ) ) ;
30
33
early_dcx. initialize_checked_jobserver ( ) ;
31
34
32
- let registry = registry :: Registry :: new ( & [ ] ) ;
35
+ let matches = optgroups ( ) . parse ( args ) . unwrap ( ) ;
33
36
let sessopts = build_session_options ( & mut early_dcx, & matches) ;
34
- let temps_dir = sessopts. unstable_opts . temps_dir . as_deref ( ) . map ( PathBuf :: from) ;
35
- let io = CompilerIO {
36
- input : Input :: Str { name : FileName :: Custom ( String :: new ( ) ) , input : String :: new ( ) } ,
37
- output_dir : None ,
38
- output_file : None ,
39
- temps_dir,
40
- } ;
41
-
42
37
let sysroot = filesearch:: materialize_sysroot ( sessopts. maybe_sysroot . clone ( ) ) ;
43
-
44
38
let target = rustc_session:: config:: build_target_config ( & early_dcx, & sessopts, & sysroot) ;
45
39
46
- let sess = build_session (
47
- early_dcx,
48
- sessopts,
49
- io,
50
- None ,
51
- registry,
52
- vec ! [ ] ,
53
- Default :: default ( ) ,
54
- None ,
55
- target,
56
- sysroot,
57
- "" ,
58
- None ,
59
- Arc :: default ( ) ,
60
- Default :: default ( ) ,
61
- ) ;
62
- let cfg = parse_cfg ( & sess. dcx ( ) , matches. opt_strs ( "cfg" ) ) ;
63
- ( sess, cfg)
40
+ rustc_span:: create_default_session_globals_then ( || {
41
+ let temps_dir = sessopts. unstable_opts . temps_dir . as_deref ( ) . map ( PathBuf :: from) ;
42
+ let io = CompilerIO {
43
+ input : Input :: Str { name : FileName :: Custom ( String :: new ( ) ) , input : String :: new ( ) } ,
44
+ output_dir : None ,
45
+ output_file : None ,
46
+ temps_dir,
47
+ } ;
48
+ let sess = build_session (
49
+ early_dcx,
50
+ sessopts,
51
+ io,
52
+ None ,
53
+ registry:: Registry :: new ( & [ ] ) ,
54
+ vec ! [ ] ,
55
+ Default :: default ( ) ,
56
+ None ,
57
+ target,
58
+ sysroot,
59
+ "" ,
60
+ None ,
61
+ Arc :: default ( ) ,
62
+ Default :: default ( ) ,
63
+ ) ;
64
+ let cfg = parse_cfg ( & sess. dcx ( ) , matches. opt_strs ( "cfg" ) ) ;
65
+ let cfg = build_configuration ( & sess, cfg) ;
66
+ f ( sess, cfg)
67
+ } ) ;
64
68
}
65
69
66
70
fn new_public_extern_entry < S , I > ( locations : I ) -> ExternEntry
@@ -125,21 +129,15 @@ fn assert_non_crate_hash_different(x: &Options, y: &Options) {
125
129
// When the user supplies --test we should implicitly supply --cfg test
126
130
#[ test]
127
131
fn test_switch_implies_cfg_test ( ) {
128
- rustc_span:: create_default_session_globals_then ( || {
129
- let matches = optgroups ( ) . parse ( & [ "--test" . to_string ( ) ] ) . unwrap ( ) ;
130
- let ( sess, cfg) = mk_session ( matches) ;
131
- let cfg = build_configuration ( & sess, cfg) ;
132
+ sess_and_cfg ( & [ "--test" ] , |_sess, cfg| {
132
133
assert ! ( cfg. contains( & ( sym:: test, None ) ) ) ;
133
- } ) ;
134
+ } )
134
135
}
135
136
136
137
// When the user supplies --test and --cfg test, don't implicitly add another --cfg test
137
138
#[ test]
138
139
fn test_switch_implies_cfg_test_unless_cfg_test ( ) {
139
- rustc_span:: create_default_session_globals_then ( || {
140
- let matches = optgroups ( ) . parse ( & [ "--test" . to_string ( ) , "--cfg=test" . to_string ( ) ] ) . unwrap ( ) ;
141
- let ( sess, cfg) = mk_session ( matches) ;
142
- let cfg = build_configuration ( & sess, cfg) ;
140
+ sess_and_cfg ( & [ "--test" , "--cfg=test" ] , |_sess, cfg| {
143
141
let mut test_items = cfg. iter ( ) . filter ( |& & ( name, _) | name == sym:: test) ;
144
142
assert ! ( test_items. next( ) . is_some( ) ) ;
145
143
assert ! ( test_items. next( ) . is_none( ) ) ;
@@ -148,22 +146,15 @@ fn test_switch_implies_cfg_test_unless_cfg_test() {
148
146
149
147
#[ test]
150
148
fn test_can_print_warnings ( ) {
151
- rustc_span:: create_default_session_globals_then ( || {
152
- let matches = optgroups ( ) . parse ( & [ "-Awarnings" . to_string ( ) ] ) . unwrap ( ) ;
153
- let ( sess, _) = mk_session ( matches) ;
149
+ sess_and_cfg ( & [ "-Awarnings" ] , |sess, _cfg| {
154
150
assert ! ( !sess. dcx( ) . can_emit_warnings( ) ) ;
155
151
} ) ;
156
152
157
- rustc_span:: create_default_session_globals_then ( || {
158
- let matches =
159
- optgroups ( ) . parse ( & [ "-Awarnings" . to_string ( ) , "-Dwarnings" . to_string ( ) ] ) . unwrap ( ) ;
160
- let ( sess, _) = mk_session ( matches) ;
153
+ sess_and_cfg ( & [ "-Awarnings" , "-Dwarnings" ] , |sess, _cfg| {
161
154
assert ! ( sess. dcx( ) . can_emit_warnings( ) ) ;
162
155
} ) ;
163
156
164
- rustc_span:: create_default_session_globals_then ( || {
165
- let matches = optgroups ( ) . parse ( & [ "-Adead_code" . to_string ( ) ] ) . unwrap ( ) ;
166
- let ( sess, _) = mk_session ( matches) ;
157
+ sess_and_cfg ( & [ "-Adead_code" ] , |sess, _cfg| {
167
158
assert ! ( sess. dcx( ) . can_emit_warnings( ) ) ;
168
159
} ) ;
169
160
}
0 commit comments