@@ -6,6 +6,7 @@ use crate::{lint, EarlyErrorHandler};
66use rustc_data_structures:: profiling:: TimePassesFormat ;
77use rustc_errors:: ColorConfig ;
88use rustc_errors:: { LanguageIdentifier , TerminalUrl } ;
9+ use rustc_target:: abi:: ReferenceNichePolicy ;
910use rustc_target:: spec:: { CodeModel , LinkerFlavorCli , MergeFunctions , PanicStrategy , SanitizerSet } ;
1011use rustc_target:: spec:: {
1112 RelocModel , RelroLevel , SplitDebuginfo , StackProtector , TargetTriple , TlsModel ,
@@ -421,6 +422,8 @@ mod desc {
421422 pub const parse_proc_macro_execution_strategy: & str =
422423 "one of supported execution strategies (`same-thread`, or `cross-thread`)" ;
423424 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`" ;
424427}
425428
426429mod parse {
@@ -1253,6 +1256,31 @@ mod parse {
12531256 } ;
12541257 true
12551258 }
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+ }
12561284}
12571285
12581286options ! {
@@ -1698,6 +1726,8 @@ options! {
16981726 "enable queries of the dependency graph for regression testing (default: no)" ) ,
16991727 randomize_layout: bool = ( false , parse_bool, [ TRACKED ] ,
17001728 "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" ) ,
17011731 relax_elf_relocations: Option <bool > = ( None , parse_opt_bool, [ TRACKED ] ,
17021732 "whether ELF relocations can be relaxed" ) ,
17031733 relro_level: Option <RelroLevel > = ( None , parse_relro_level, [ TRACKED ] ,
0 commit comments