@@ -29,7 +29,6 @@ use rustc_middle::metadata::ModChild;
29
29
use rustc_middle:: { bug, ty} ;
30
30
use rustc_session:: cstore:: CrateStore ;
31
31
use rustc_span:: hygiene:: { ExpnId , LocalExpnId , MacroKind } ;
32
- use rustc_span:: source_map:: respan;
33
32
use rustc_span:: symbol:: { kw, sym, Ident , Symbol } ;
34
33
use rustc_span:: Span ;
35
34
@@ -327,13 +326,13 @@ impl<'a, 'b, 'tcx> BuildReducedGraphVisitor<'a, 'b, 'tcx> {
327
326
}
328
327
}
329
328
330
- fn insert_field_names_local ( & mut self , def_id : DefId , vdata : & ast:: VariantData ) {
331
- let field_names = vdata
332
- . fields ( )
333
- . iter ( )
334
- . map ( |field| respan ( field . span , field . ident . map_or ( kw :: Empty , |ident| ident . name ) ) )
335
- . collect ( ) ;
336
- self . r . field_names . insert ( def_id, field_names ) ;
329
+ fn insert_field_def_ids ( & mut self , def_id : LocalDefId , vdata : & ast:: VariantData ) {
330
+ if vdata . fields ( ) . iter ( ) . any ( |field| field . is_placeholder ) {
331
+ // The fields are not expanded yet.
332
+ return ;
333
+ }
334
+ let def_ids = vdata . fields ( ) . iter ( ) . map ( |field| self . r . local_def_id ( field . id ) . to_def_id ( ) ) ;
335
+ self . r . field_def_ids . insert ( def_id, self . r . tcx . arena . alloc_from_iter ( def_ids ) ) ;
337
336
}
338
337
339
338
fn insert_field_visibilities_local ( & mut self , def_id : DefId , vdata : & ast:: VariantData ) {
@@ -345,12 +344,6 @@ impl<'a, 'b, 'tcx> BuildReducedGraphVisitor<'a, 'b, 'tcx> {
345
344
self . r . field_visibility_spans . insert ( def_id, field_vis) ;
346
345
}
347
346
348
- fn insert_field_names_extern ( & mut self , def_id : DefId ) {
349
- let field_names =
350
- self . r . cstore ( ) . struct_field_names_untracked ( def_id, self . r . tcx . sess ) . collect ( ) ;
351
- self . r . field_names . insert ( def_id, field_names) ;
352
- }
353
-
354
347
fn block_needs_anonymous_module ( & mut self , block : & Block ) -> bool {
355
348
// If any statements are items, we need to create an anonymous module
356
349
block
@@ -748,7 +741,7 @@ impl<'a, 'b, 'tcx> BuildReducedGraphVisitor<'a, 'b, 'tcx> {
748
741
self . r . define ( parent, ident, TypeNS , ( res, vis, sp, expansion) ) ;
749
742
750
743
// Record field names for error reporting.
751
- self . insert_field_names_local ( def_id , vdata) ;
744
+ self . insert_field_def_ids ( local_def_id , vdata) ;
752
745
self . insert_field_visibilities_local ( def_id, vdata) ;
753
746
754
747
// If this is a tuple or unit struct, define a name
@@ -797,7 +790,7 @@ impl<'a, 'b, 'tcx> BuildReducedGraphVisitor<'a, 'b, 'tcx> {
797
790
self . r . define ( parent, ident, TypeNS , ( res, vis, sp, expansion) ) ;
798
791
799
792
// Record field names for error reporting.
800
- self . insert_field_names_local ( def_id , vdata) ;
793
+ self . insert_field_def_ids ( local_def_id , vdata) ;
801
794
self . insert_field_visibilities_local ( def_id, vdata) ;
802
795
}
803
796
@@ -1003,12 +996,6 @@ impl<'a, 'b, 'tcx> BuildReducedGraphVisitor<'a, 'b, 'tcx> {
1003
996
| Res :: SelfCtor ( ..)
1004
997
| Res :: Err => bug ! ( "unexpected resolution: {:?}" , res) ,
1005
998
}
1006
- // Record some extra data for better diagnostics.
1007
- match res {
1008
- Res :: Def ( DefKind :: Struct , def_id) => self . insert_field_names_extern ( def_id) ,
1009
- Res :: Def ( DefKind :: Union , def_id) => self . insert_field_names_extern ( def_id) ,
1010
- _ => { }
1011
- }
1012
999
}
1013
1000
1014
1001
fn add_macro_use_binding (
@@ -1519,7 +1506,7 @@ impl<'a, 'b, 'tcx> Visitor<'b> for BuildReducedGraphVisitor<'a, 'b, 'tcx> {
1519
1506
}
1520
1507
1521
1508
// Record field names for error reporting.
1522
- self . insert_field_names_local ( def_id. to_def_id ( ) , & variant. data ) ;
1509
+ self . insert_field_def_ids ( def_id, & variant. data ) ;
1523
1510
self . insert_field_visibilities_local ( def_id. to_def_id ( ) , & variant. data ) ;
1524
1511
1525
1512
visit:: walk_variant ( self , variant) ;
0 commit comments