@@ -113,6 +113,13 @@ fn register_native_lib(sess: &Session,
113
113
cstore. add_used_library ( lib) ;
114
114
}
115
115
116
+ fn relevant_lib ( sess : & Session , lib : & NativeLibrary ) -> bool {
117
+ match lib. cfg {
118
+ Some ( ref cfg) => attr:: cfg_matches ( cfg, & sess. parse_sess , None ) ,
119
+ None => true ,
120
+ }
121
+ }
122
+
116
123
// Extra info about a crate loaded for plugins or exported macros.
117
124
struct ExtensionCrate {
118
125
metadata : PMDSource ,
@@ -290,7 +297,7 @@ impl<'a> CrateLoader<'a> {
290
297
291
298
let cnum_map = self . resolve_crate_deps ( root, & crate_root, & metadata, cnum, span, dep_kind) ;
292
299
293
- let cmeta = Rc :: new ( cstore:: CrateMetadata {
300
+ let mut cmeta = cstore:: CrateMetadata {
294
301
name : name,
295
302
extern_crate : Cell :: new ( None ) ,
296
303
key_map : metadata. load_key_map ( crate_root. index ) ,
@@ -308,9 +315,18 @@ impl<'a> CrateLoader<'a> {
308
315
rlib : rlib,
309
316
rmeta : rmeta,
310
317
} ,
311
- dllimport_foreign_items : RefCell :: new ( None ) ,
312
- } ) ;
318
+ dllimport_foreign_items : FxHashSet ( ) ,
319
+ } ;
320
+
321
+ let dllimports: Vec < _ > = cmeta. get_native_libraries ( ) . iter ( )
322
+ . filter ( |lib| relevant_lib ( self . sess , lib) &&
323
+ lib. kind == cstore:: NativeLibraryKind :: NativeUnknown )
324
+ . flat_map ( |lib| & lib. foreign_items )
325
+ . map ( |id| * id)
326
+ . collect ( ) ;
327
+ cmeta. dllimport_foreign_items . extend ( dllimports) ;
313
328
329
+ let cmeta = Rc :: new ( cmeta) ;
314
330
self . cstore . set_crate_data ( cnum, cmeta. clone ( ) ) ;
315
331
( cnum, cmeta)
316
332
}
@@ -643,7 +659,7 @@ impl<'a> CrateLoader<'a> {
643
659
let mut items = vec ! [ ] ;
644
660
let libs = self . cstore . get_used_libraries ( ) ;
645
661
for lib in libs. borrow ( ) . iter ( ) {
646
- if lib. kind == kind {
662
+ if relevant_lib ( self . sess , lib ) && lib. kind == kind {
647
663
items. extend ( & lib. foreign_items ) ;
648
664
}
649
665
}
0 commit comments