@@ -39,13 +39,15 @@ use rustc_errors::{
39
39
Applicability , DiagnosticBuilder , DiagnosticMessage , ErrorGuaranteed , SubdiagnosticMessage ,
40
40
} ;
41
41
use rustc_expand:: base:: { DeriveResolutions , SyntaxExtension , SyntaxExtensionKind } ;
42
+ use rustc_feature:: BUILTIN_ATTRIBUTES ;
42
43
use rustc_fluent_macro:: fluent_messages;
43
44
use rustc_hir:: def:: Namespace :: { self , * } ;
45
+ use rustc_hir:: def:: NonMacroAttrKind ;
44
46
use rustc_hir:: def:: { self , CtorOf , DefKind , DocLinkResMap , LifetimeRes , PartialRes , PerNS } ;
45
47
use rustc_hir:: def_id:: { CrateNum , DefId , LocalDefId , LocalDefIdMap , LocalDefIdSet } ;
46
48
use rustc_hir:: def_id:: { CRATE_DEF_ID , LOCAL_CRATE } ;
47
49
use rustc_hir:: definitions:: DefPathData ;
48
- use rustc_hir:: TraitCandidate ;
50
+ use rustc_hir:: { PrimTy , TraitCandidate } ;
49
51
use rustc_index:: IndexVec ;
50
52
use rustc_metadata:: creader:: { CStore , CrateLoader } ;
51
53
use rustc_middle:: metadata:: ModChild ;
@@ -996,6 +998,8 @@ pub struct Resolver<'a, 'tcx> {
996
998
997
999
arenas : & ' a ResolverArenas < ' a > ,
998
1000
dummy_binding : NameBinding < ' a > ,
1001
+ builtin_types_bindings : FxHashMap < Symbol , NameBinding < ' a > > ,
1002
+ builtin_attrs_bindings : FxHashMap < Symbol , NameBinding < ' a > > ,
999
1003
1000
1004
used_extern_options : FxHashSet < Symbol > ,
1001
1005
macro_names : FxHashSet < Ident > ,
@@ -1283,6 +1287,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
1283
1287
let registered_tools = tcx. registered_tools ( ( ) ) ;
1284
1288
1285
1289
let features = tcx. features ( ) ;
1290
+ let pub_vis = ty:: Visibility :: < DefId > :: Public ;
1286
1291
1287
1292
let mut resolver = Resolver {
1288
1293
tcx,
@@ -1330,14 +1335,24 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
1330
1335
macro_expanded_macro_export_errors : BTreeSet :: new ( ) ,
1331
1336
1332
1337
arenas,
1333
- dummy_binding : arenas. alloc_name_binding ( NameBindingData {
1334
- kind : NameBindingKind :: Res ( Res :: Err ) ,
1335
- ambiguity : None ,
1336
- warn_ambiguity : false ,
1337
- expansion : LocalExpnId :: ROOT ,
1338
- span : DUMMY_SP ,
1339
- vis : ty:: Visibility :: Public ,
1340
- } ) ,
1338
+ dummy_binding : ( Res :: Err , pub_vis, DUMMY_SP , LocalExpnId :: ROOT ) . to_name_binding ( arenas) ,
1339
+ builtin_types_bindings : PrimTy :: ALL
1340
+ . iter ( )
1341
+ . map ( |prim_ty| {
1342
+ let binding = ( Res :: PrimTy ( * prim_ty) , pub_vis, DUMMY_SP , LocalExpnId :: ROOT )
1343
+ . to_name_binding ( arenas) ;
1344
+ ( prim_ty. name ( ) , binding)
1345
+ } )
1346
+ . collect ( ) ,
1347
+ builtin_attrs_bindings : BUILTIN_ATTRIBUTES
1348
+ . iter ( )
1349
+ . map ( |builtin_attr| {
1350
+ let res = Res :: NonMacroAttr ( NonMacroAttrKind :: Builtin ( builtin_attr. name ) ) ;
1351
+ let binding =
1352
+ ( res, pub_vis, DUMMY_SP , LocalExpnId :: ROOT ) . to_name_binding ( arenas) ;
1353
+ ( builtin_attr. name , binding)
1354
+ } )
1355
+ . collect ( ) ,
1341
1356
1342
1357
used_extern_options : Default :: default ( ) ,
1343
1358
macro_names : FxHashSet :: default ( ) ,
0 commit comments