@@ -1102,41 +1102,96 @@ impl CrateCheckConfig {
1102
1102
. extend ( atomic_values) ;
1103
1103
1104
1104
// Target specific values
1105
- for target in
1106
- TARGETS . iter ( ) . map ( |target| Target :: expect_builtin ( & TargetTriple :: from_triple ( target) ) )
1105
+ #[ cfg( bootstrap) ]
1107
1106
{
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
+ }
1140
1195
}
1141
1196
}
1142
1197
0 commit comments