@@ -6,6 +6,7 @@ use crate::{lint, EarlyErrorHandler};
6
6
use rustc_data_structures:: profiling:: TimePassesFormat ;
7
7
use rustc_errors:: ColorConfig ;
8
8
use rustc_errors:: { LanguageIdentifier , TerminalUrl } ;
9
+ use rustc_target:: abi:: ReferenceNichePolicy ;
9
10
use rustc_target:: spec:: { CodeModel , LinkerFlavorCli , MergeFunctions , PanicStrategy , SanitizerSet } ;
10
11
use rustc_target:: spec:: {
11
12
RelocModel , RelroLevel , SplitDebuginfo , StackProtector , TargetTriple , TlsModel ,
@@ -421,6 +422,8 @@ mod desc {
421
422
pub const parse_proc_macro_execution_strategy: & str =
422
423
"one of supported execution strategies (`same-thread`, or `cross-thread`)" ;
423
424
pub const parse_dump_solver_proof_tree: & str = "one of: `always`, `on-request`, `on-error`" ;
425
+ pub const parse_opt_reference_niches: & str =
426
+ "`null`, or a `,` separated combination of `size` or `align`" ;
424
427
}
425
428
426
429
mod parse {
@@ -1253,6 +1256,31 @@ mod parse {
1253
1256
} ;
1254
1257
true
1255
1258
}
1259
+
1260
+ pub ( crate ) fn parse_opt_reference_niches (
1261
+ slot : & mut Option < ReferenceNichePolicy > ,
1262
+ v : Option < & str > ,
1263
+ ) -> bool {
1264
+ let Some ( s) = v else {
1265
+ return false ;
1266
+ } ;
1267
+
1268
+ let slot = slot. get_or_insert_default ( ) ;
1269
+
1270
+ if s == "null" {
1271
+ return true ;
1272
+ }
1273
+
1274
+ for opt in s. split ( "," ) {
1275
+ match opt {
1276
+ "size" => slot. size = true ,
1277
+ "align" => slot. align = true ,
1278
+ _ => return false ,
1279
+ }
1280
+ }
1281
+
1282
+ true
1283
+ }
1256
1284
}
1257
1285
1258
1286
options ! {
@@ -1698,6 +1726,8 @@ options! {
1698
1726
"enable queries of the dependency graph for regression testing (default: no)" ) ,
1699
1727
randomize_layout: bool = ( false , parse_bool, [ TRACKED ] ,
1700
1728
"randomize the layout of types (default: no)" ) ,
1729
+ reference_niches: Option <ReferenceNichePolicy > = ( None , parse_opt_reference_niches, [ TRACKED ] ,
1730
+ "override the set of discriminant niches that may be exposed by references" ) ,
1701
1731
relax_elf_relocations: Option <bool > = ( None , parse_opt_bool, [ TRACKED ] ,
1702
1732
"whether ELF relocations can be relaxed" ) ,
1703
1733
relro_level: Option <RelroLevel > = ( None , parse_relro_level, [ TRACKED ] ,
0 commit comments