@@ -1344,10 +1344,18 @@ impl Target {
1344
1344
} ) ;
1345
1345
}
1346
1346
1347
- dl. c_enum_min_size = match Integer :: from_size ( Size :: from_bits ( self . c_enum_min_bits ) ) {
1348
- Ok ( bits) => bits,
1349
- Err ( err) => return Err ( TargetDataLayoutErrors :: InvalidBitsSize { err } ) ,
1350
- } ;
1347
+ dl. c_enum_min_size = self
1348
+ . c_enum_min_bits
1349
+ . map_or_else (
1350
+ || {
1351
+ self . c_int_width
1352
+ . parse ( )
1353
+ . map_err ( |_| String :: from ( "failed to parse c_int_width" ) )
1354
+ } ,
1355
+ Ok ,
1356
+ )
1357
+ . and_then ( |i| Integer :: from_size ( Size :: from_bits ( i) ) )
1358
+ . map_err ( |err| TargetDataLayoutErrors :: InvalidBitsSize { err } ) ?;
1351
1359
1352
1360
Ok ( dl)
1353
1361
}
@@ -1701,8 +1709,8 @@ pub struct TargetOptions {
1701
1709
/// If present it's a default value to use for adjusting the C ABI.
1702
1710
pub default_adjusted_cabi : Option < Abi > ,
1703
1711
1704
- /// Minimum number of bits in #[repr(C)] enum. Defaults to 32.
1705
- pub c_enum_min_bits : u64 ,
1712
+ /// Minimum number of bits in #[repr(C)] enum. Defaults to the size of c_int
1713
+ pub c_enum_min_bits : Option < u64 > ,
1706
1714
1707
1715
/// Whether or not the DWARF `.debug_aranges` section should be generated.
1708
1716
pub generate_arange_section : bool ,
@@ -1935,7 +1943,7 @@ impl Default for TargetOptions {
1935
1943
supported_split_debuginfo : Cow :: Borrowed ( & [ SplitDebuginfo :: Off ] ) ,
1936
1944
supported_sanitizers : SanitizerSet :: empty ( ) ,
1937
1945
default_adjusted_cabi : None ,
1938
- c_enum_min_bits : 32 ,
1946
+ c_enum_min_bits : None ,
1939
1947
generate_arange_section : true ,
1940
1948
supports_stack_protector : true ,
1941
1949
entry_name : "main" . into ( ) ,
@@ -2122,12 +2130,6 @@ impl Target {
2122
2130
base. $key_name = s;
2123
2131
}
2124
2132
} ) ;
2125
- ( $key_name: ident, u64 ) => ( {
2126
- let name = ( stringify!( $key_name) ) . replace( "_" , "-" ) ;
2127
- if let Some ( s) = obj. remove( & name) . and_then( |j| Json :: as_u64( & j) ) {
2128
- base. $key_name = s;
2129
- }
2130
- } ) ;
2131
2133
( $key_name: ident, u32 ) => ( {
2132
2134
let name = ( stringify!( $key_name) ) . replace( "_" , "-" ) ;
2133
2135
if let Some ( s) = obj. remove( & name) . and_then( |b| b. as_u64( ) ) {
@@ -2496,6 +2498,7 @@ impl Target {
2496
2498
2497
2499
key ! ( is_builtin, bool ) ;
2498
2500
key ! ( c_int_width = "target-c-int-width" ) ;
2501
+ key ! ( c_enum_min_bits, Option <u64 >) ; // if None, matches c_int_width
2499
2502
key ! ( os) ;
2500
2503
key ! ( env) ;
2501
2504
key ! ( abi) ;
@@ -2591,7 +2594,6 @@ impl Target {
2591
2594
key ! ( supported_split_debuginfo, falliable_list) ?;
2592
2595
key ! ( supported_sanitizers, SanitizerSet ) ?;
2593
2596
key ! ( default_adjusted_cabi, Option <Abi >) ?;
2594
- key ! ( c_enum_min_bits, u64 ) ;
2595
2597
key ! ( generate_arange_section, bool ) ;
2596
2598
key ! ( supports_stack_protector, bool ) ;
2597
2599
key ! ( entry_name) ;
0 commit comments