@@ -61,7 +61,7 @@ use rustc::middle::pat_util::pat_bindings;
61
61
use rustc:: middle:: privacy:: * ;
62
62
use rustc:: middle:: subst:: { ParamSpace , FnSpace , TypeSpace } ;
63
63
use rustc:: middle:: ty:: { Freevar , FreevarMap , TraitCandidate , TraitMap , GlobMap } ;
64
- use rustc:: util:: nodemap:: { NodeMap , DefIdSet , FnvHashMap } ;
64
+ use rustc:: util:: nodemap:: { NodeMap , NodeSet , DefIdSet , FnvHashMap } ;
65
65
66
66
use syntax:: ast;
67
67
use syntax:: ast:: { CRATE_NODE_ID , Ident , Name , NodeId , CrateNum , TyIs , TyI8 , TyI16 , TyI32 , TyI64 } ;
@@ -1141,6 +1141,7 @@ pub struct Resolver<'a, 'tcx: 'a> {
1141
1141
1142
1142
used_imports : HashSet < ( NodeId , Namespace ) > ,
1143
1143
used_crates : HashSet < CrateNum > ,
1144
+ maybe_unused_trait_imports : NodeSet ,
1144
1145
1145
1146
// Callback function for intercepting walks
1146
1147
callback : Option < Box < Fn ( hir_map:: Node , & mut bool ) -> bool > > ,
@@ -1192,14 +1193,16 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
1192
1193
freevars_seen : NodeMap ( ) ,
1193
1194
export_map : NodeMap ( ) ,
1194
1195
trait_map : NodeMap ( ) ,
1195
- used_imports : HashSet :: new ( ) ,
1196
- used_crates : HashSet :: new ( ) ,
1197
1196
external_exports : DefIdSet ( ) ,
1198
1197
1199
1198
emit_errors : true ,
1200
1199
make_glob_map : make_glob_map == MakeGlobMap :: Yes ,
1201
1200
glob_map : HashMap :: new ( ) ,
1202
1201
1202
+ used_imports : HashSet :: new ( ) ,
1203
+ used_crates : HashSet :: new ( ) ,
1204
+ maybe_unused_trait_imports : NodeSet ( ) ,
1205
+
1203
1206
callback : None ,
1204
1207
resolved : false ,
1205
1208
}
@@ -3669,7 +3672,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
3669
3672
if self . trait_item_map . contains_key ( & ( name, did) ) {
3670
3673
let id = import. type_ns . id ;
3671
3674
add_trait_info ( & mut found_traits, did, Some ( id) , name) ;
3672
- self . used_imports . insert ( ( id , TypeNS ) ) ;
3675
+ self . maybe_unused_trait_imports . insert ( id ) ;
3673
3676
let trait_name = self . get_trait_name ( did) ;
3674
3677
self . record_import_use ( id, trait_name) ;
3675
3678
if let Some ( DefId { krate : kid, ..} ) = target. target_module . def_id ( ) {
@@ -3820,6 +3823,7 @@ fn module_to_string(module: &Module) -> String {
3820
3823
pub struct CrateMap {
3821
3824
pub def_map : RefCell < DefMap > ,
3822
3825
pub freevars : FreevarMap ,
3826
+ pub maybe_unused_trait_imports : NodeSet ,
3823
3827
pub export_map : ExportMap ,
3824
3828
pub trait_map : TraitMap ,
3825
3829
pub external_exports : ExternalExports ,
@@ -3848,6 +3852,7 @@ pub fn resolve_crate<'a, 'tcx>(session: &'a Session,
3848
3852
CrateMap {
3849
3853
def_map : resolver. def_map ,
3850
3854
freevars : resolver. freevars ,
3855
+ maybe_unused_trait_imports : resolver. maybe_unused_trait_imports ,
3851
3856
export_map : resolver. export_map ,
3852
3857
trait_map : resolver. trait_map ,
3853
3858
external_exports : resolver. external_exports ,
0 commit comments