@@ -1102,41 +1102,96 @@ impl CrateCheckConfig {
11021102 . extend ( atomic_values) ;
11031103
11041104 // Target specific values
1105- for target in
1106- TARGETS . iter ( ) . map ( |target| Target :: expect_builtin ( & TargetTriple :: from_triple ( target) ) )
1105+ #[ cfg( bootstrap) ]
11071106 {
1108- self . values_valid
1109- . entry ( sym:: target_os)
1110- . or_default ( )
1111- . insert ( Symbol :: intern ( & target. options . os ) ) ;
1112- self . values_valid
1113- . entry ( sym:: target_family)
1114- . or_default ( )
1115- . extend ( target. options . families . iter ( ) . map ( |family| Symbol :: intern ( family) ) ) ;
1116- self . values_valid
1117- . entry ( sym:: target_arch)
1118- . or_default ( )
1119- . insert ( Symbol :: intern ( & target. arch ) ) ;
1120- self . values_valid
1121- . entry ( sym:: target_endian)
1122- . or_default ( )
1123- . insert ( Symbol :: intern ( & target. options . endian . as_str ( ) ) ) ;
1124- self . values_valid
1125- . entry ( sym:: target_env)
1126- . or_default ( )
1127- . insert ( Symbol :: intern ( & target. options . env ) ) ;
1128- self . values_valid
1129- . entry ( sym:: target_abi)
1130- . or_default ( )
1131- . insert ( Symbol :: intern ( & target. options . abi ) ) ;
1132- self . values_valid
1133- . entry ( sym:: target_vendor)
1134- . or_default ( )
1135- . insert ( Symbol :: intern ( & target. options . vendor ) ) ;
1136- self . values_valid
1137- . entry ( sym:: target_pointer_width)
1138- . or_default ( )
1139- . insert ( sym:: integer ( target. pointer_width ) ) ;
1107+ for target in TARGETS
1108+ . iter ( )
1109+ . map ( |target| Target :: expect_builtin ( & TargetTriple :: from_triple ( target) ) )
1110+ {
1111+ self . values_valid
1112+ . entry ( sym:: target_os)
1113+ . or_default ( )
1114+ . insert ( Symbol :: intern ( & target. options . os ) ) ;
1115+ self . values_valid
1116+ . entry ( sym:: target_family)
1117+ . or_default ( )
1118+ . extend ( target. options . families . iter ( ) . map ( |family| Symbol :: intern ( family) ) ) ;
1119+ self . values_valid
1120+ . entry ( sym:: target_arch)
1121+ . or_default ( )
1122+ . insert ( Symbol :: intern ( & target. arch ) ) ;
1123+ self . values_valid
1124+ . entry ( sym:: target_endian)
1125+ . or_default ( )
1126+ . insert ( Symbol :: intern ( & target. options . endian . as_str ( ) ) ) ;
1127+ self . values_valid
1128+ . entry ( sym:: target_env)
1129+ . or_default ( )
1130+ . insert ( Symbol :: intern ( & target. options . env ) ) ;
1131+ self . values_valid
1132+ . entry ( sym:: target_abi)
1133+ . or_default ( )
1134+ . insert ( Symbol :: intern ( & target. options . abi ) ) ;
1135+ self . values_valid
1136+ . entry ( sym:: target_vendor)
1137+ . or_default ( )
1138+ . insert ( Symbol :: intern ( & target. options . vendor ) ) ;
1139+ self . values_valid
1140+ . entry ( sym:: target_pointer_width)
1141+ . or_default ( )
1142+ . insert ( sym:: integer ( target. pointer_width ) ) ;
1143+ }
1144+ }
1145+
1146+ // Target specific values
1147+ #[ cfg( not( bootstrap) ) ]
1148+ {
1149+ const VALUES : [ & Symbol ; 8 ] = [
1150+ & sym:: target_os,
1151+ & sym:: target_family,
1152+ & sym:: target_arch,
1153+ & sym:: target_endian,
1154+ & sym:: target_env,
1155+ & sym:: target_abi,
1156+ & sym:: target_vendor,
1157+ & sym:: target_pointer_width,
1158+ ] ;
1159+
1160+ // Initialize (if not already initialized)
1161+ for & e in VALUES {
1162+ self . values_valid . entry ( e) . or_default ( ) ;
1163+ }
1164+
1165+ // Get all values map at once otherwise it would be costly.
1166+ // (8 values * 220 targets ~= 1760 times, at the time of writing this comment).
1167+ let [
1168+ values_target_os,
1169+ values_target_family,
1170+ values_target_arch,
1171+ values_target_endian,
1172+ values_target_env,
1173+ values_target_abi,
1174+ values_target_vendor,
1175+ values_target_pointer_width,
1176+ ] = self
1177+ . values_valid
1178+ . get_many_mut ( VALUES )
1179+ . expect ( "unable to get all the check-cfg values buckets" ) ;
1180+
1181+ for target in TARGETS
1182+ . iter ( )
1183+ . map ( |target| Target :: expect_builtin ( & TargetTriple :: from_triple ( target) ) )
1184+ {
1185+ values_target_os. insert ( Symbol :: intern ( & target. options . os ) ) ;
1186+ values_target_family
1187+ . extend ( target. options . families . iter ( ) . map ( |family| Symbol :: intern ( family) ) ) ;
1188+ values_target_arch. insert ( Symbol :: intern ( & target. arch ) ) ;
1189+ values_target_endian. insert ( Symbol :: intern ( & target. options . endian . as_str ( ) ) ) ;
1190+ values_target_env. insert ( Symbol :: intern ( & target. options . env ) ) ;
1191+ values_target_abi. insert ( Symbol :: intern ( & target. options . abi ) ) ;
1192+ values_target_vendor. insert ( Symbol :: intern ( & target. options . vendor ) ) ;
1193+ values_target_pointer_width. insert ( sym:: integer ( target. pointer_width ) ) ;
1194+ }
11401195 }
11411196 }
11421197
0 commit comments