@@ -334,6 +334,15 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
334
334
self . r . field_names . insert ( def_id, field_names) ;
335
335
}
336
336
337
+ fn insert_field_visibilities_local ( & mut self , def_id : DefId , vdata : & ast:: VariantData ) {
338
+ let field_vis = vdata
339
+ . fields ( )
340
+ . iter ( )
341
+ . map ( |field| field. vis . span . until ( field. ident . map_or ( field. ty . span , |i| i. span ) ) )
342
+ . collect ( ) ;
343
+ self . r . field_visibility_spans . insert ( def_id, field_vis) ;
344
+ }
345
+
337
346
fn insert_field_names_extern ( & mut self , def_id : DefId ) {
338
347
let field_names =
339
348
self . r . cstore ( ) . struct_field_names_untracked ( def_id, self . r . session ) . collect ( ) ;
@@ -737,6 +746,7 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
737
746
738
747
// Record field names for error reporting.
739
748
self . insert_field_names_local ( def_id, vdata) ;
749
+ self . insert_field_visibilities_local ( def_id, vdata) ;
740
750
741
751
// If this is a tuple or unit struct, define a name
742
752
// in the value namespace as well.
@@ -770,6 +780,8 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
770
780
Res :: Def ( DefKind :: Ctor ( CtorOf :: Struct , ctor_kind) , ctor_def_id. to_def_id ( ) ) ;
771
781
self . r . define ( parent, ident, ValueNS , ( ctor_res, ctor_vis, sp, expansion) ) ;
772
782
self . r . visibilities . insert ( ctor_def_id, ctor_vis) ;
783
+ // We need the field visibility spans also for the constructor for E0603.
784
+ self . insert_field_visibilities_local ( ctor_def_id. to_def_id ( ) , vdata) ;
773
785
774
786
self . r
775
787
. struct_constructors
@@ -783,6 +795,7 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
783
795
784
796
// Record field names for error reporting.
785
797
self . insert_field_names_local ( def_id, vdata) ;
798
+ self . insert_field_visibilities_local ( def_id, vdata) ;
786
799
}
787
800
788
801
ItemKind :: Trait ( ..) => {
@@ -1510,6 +1523,7 @@ impl<'a, 'b> Visitor<'b> for BuildReducedGraphVisitor<'a, 'b> {
1510
1523
1511
1524
// Record field names for error reporting.
1512
1525
self . insert_field_names_local ( def_id. to_def_id ( ) , & variant. data ) ;
1526
+ self . insert_field_visibilities_local ( def_id. to_def_id ( ) , & variant. data ) ;
1513
1527
1514
1528
visit:: walk_variant ( self , variant) ;
1515
1529
}
0 commit comments