@@ -46,7 +46,7 @@ pub fn find_native_static_library(
46
46
}
47
47
48
48
fn find_bundled_library (
49
- name : Option < Symbol > ,
49
+ name : Symbol ,
50
50
verbatim : Option < bool > ,
51
51
kind : NativeLibKind ,
52
52
has_cfg : bool ,
@@ -58,7 +58,7 @@ fn find_bundled_library(
58
58
{
59
59
let verbatim = verbatim. unwrap_or ( false ) ;
60
60
let search_paths = & sess. target_filesearch ( PathKind :: Native ) . search_path_dirs ( ) ;
61
- return find_native_static_library ( name. unwrap ( ) . as_str ( ) , verbatim, search_paths, sess)
61
+ return find_native_static_library ( name. as_str ( ) , verbatim, search_paths, sess)
62
62
. file_name ( )
63
63
. and_then ( |s| s. to_str ( ) )
64
64
. map ( Symbol :: intern) ;
@@ -336,10 +336,16 @@ impl<'tcx> Collector<'tcx> {
336
336
if name. is_some ( ) || kind. is_some ( ) || modifiers. is_some ( ) || cfg. is_some ( ) {
337
337
sess. emit_err ( errors:: IncompatibleWasmLink { span } ) ;
338
338
}
339
- } else if name. is_none ( ) {
340
- sess. emit_err ( errors:: LinkRequiresName { span : m. span } ) ;
341
339
}
342
340
341
+ if wasm_import_module. is_some ( ) {
342
+ ( name, kind) = ( wasm_import_module, Some ( NativeLibKind :: WasmImportModule ) ) ;
343
+ }
344
+ let Some ( ( name, name_span) ) = name else {
345
+ sess. emit_err ( errors:: LinkRequiresName { span : m. span } ) ;
346
+ continue ;
347
+ } ;
348
+
343
349
// Do this outside of the loop so that `import_name_type` can be specified before `kind`.
344
350
if let Some ( ( _, span) ) = import_name_type {
345
351
if kind != Some ( NativeLibKind :: RawDylib ) {
@@ -349,8 +355,8 @@ impl<'tcx> Collector<'tcx> {
349
355
350
356
let dll_imports = match kind {
351
357
Some ( NativeLibKind :: RawDylib ) => {
352
- if let Some ( ( name , span ) ) = name && name. as_str ( ) . contains ( '\0' ) {
353
- sess. emit_err ( errors:: RawDylibNoNul { span } ) ;
358
+ if name. as_str ( ) . contains ( '\0' ) {
359
+ sess. emit_err ( errors:: RawDylibNoNul { span : name_span } ) ;
354
360
}
355
361
foreign_mod_items
356
362
. iter ( )
@@ -389,7 +395,6 @@ impl<'tcx> Collector<'tcx> {
389
395
}
390
396
} ;
391
397
392
- let name = name. map ( |( name, _) | name) ;
393
398
let kind = kind. unwrap_or ( NativeLibKind :: Unspecified ) ;
394
399
let filename = find_bundled_library ( name, verbatim, kind, cfg. is_some ( ) , sess) ;
395
400
self . libs . push ( NativeLib {
@@ -398,7 +403,6 @@ impl<'tcx> Collector<'tcx> {
398
403
kind,
399
404
cfg,
400
405
foreign_module : Some ( it. owner_id . to_def_id ( ) ) ,
401
- wasm_import_module : wasm_import_module. map ( |( name, _) | name) ,
402
406
verbatim,
403
407
dll_imports,
404
408
} ) ;
@@ -415,11 +419,7 @@ impl<'tcx> Collector<'tcx> {
415
419
self . tcx . sess . emit_err ( errors:: LibFrameworkApple ) ;
416
420
}
417
421
if let Some ( ref new_name) = lib. new_name {
418
- let any_duplicate = self
419
- . libs
420
- . iter ( )
421
- . filter_map ( |lib| lib. name . as_ref ( ) )
422
- . any ( |n| n. as_str ( ) == lib. name ) ;
422
+ let any_duplicate = self . libs . iter ( ) . any ( |n| n. name . as_str ( ) == lib. name ) ;
423
423
if new_name. is_empty ( ) {
424
424
self . tcx . sess . emit_err ( errors:: EmptyRenamingTarget { lib_name : & lib. name } ) ;
425
425
} else if !any_duplicate {
@@ -444,41 +444,36 @@ impl<'tcx> Collector<'tcx> {
444
444
let mut existing = self
445
445
. libs
446
446
. drain_filter ( |lib| {
447
- if let Some ( lib_name) = lib. name {
448
- if lib_name. as_str ( ) == passed_lib. name {
449
- // FIXME: This whole logic is questionable, whether modifiers are
450
- // involved or not, library reordering and kind overriding without
451
- // explicit `:rename` in particular.
452
- if lib. has_modifiers ( ) || passed_lib. has_modifiers ( ) {
453
- match lib. foreign_module {
454
- Some ( def_id) => {
455
- self . tcx . sess . emit_err ( errors:: NoLinkModOverride {
456
- span : Some ( self . tcx . def_span ( def_id) ) ,
457
- } )
458
- }
459
- None => self
460
- . tcx
461
- . sess
462
- . emit_err ( errors:: NoLinkModOverride { span : None } ) ,
463
- } ;
464
- }
465
- if passed_lib. kind != NativeLibKind :: Unspecified {
466
- lib. kind = passed_lib. kind ;
467
- }
468
- if let Some ( new_name) = & passed_lib. new_name {
469
- lib. name = Some ( Symbol :: intern ( new_name) ) ;
470
- }
471
- lib. verbatim = passed_lib. verbatim ;
472
- return true ;
447
+ if lib. name . as_str ( ) == passed_lib. name {
448
+ // FIXME: This whole logic is questionable, whether modifiers are
449
+ // involved or not, library reordering and kind overriding without
450
+ // explicit `:rename` in particular.
451
+ if lib. has_modifiers ( ) || passed_lib. has_modifiers ( ) {
452
+ match lib. foreign_module {
453
+ Some ( def_id) => self . tcx . sess . emit_err ( errors:: NoLinkModOverride {
454
+ span : Some ( self . tcx . def_span ( def_id) ) ,
455
+ } ) ,
456
+ None => {
457
+ self . tcx . sess . emit_err ( errors:: NoLinkModOverride { span : None } )
458
+ }
459
+ } ;
460
+ }
461
+ if passed_lib. kind != NativeLibKind :: Unspecified {
462
+ lib. kind = passed_lib. kind ;
463
+ }
464
+ if let Some ( new_name) = & passed_lib. new_name {
465
+ lib. name = Symbol :: intern ( new_name) ;
473
466
}
467
+ lib. verbatim = passed_lib. verbatim ;
468
+ return true ;
474
469
}
475
470
false
476
471
} )
477
472
. collect :: < Vec < _ > > ( ) ;
478
473
if existing. is_empty ( ) {
479
474
// Add if not found
480
475
let new_name: Option < & str > = passed_lib. new_name . as_deref ( ) ;
481
- let name = Some ( Symbol :: intern ( new_name. unwrap_or ( & passed_lib. name ) ) ) ;
476
+ let name = Symbol :: intern ( new_name. unwrap_or ( & passed_lib. name ) ) ;
482
477
let sess = self . tcx . sess ;
483
478
let filename =
484
479
find_bundled_library ( name, passed_lib. verbatim , passed_lib. kind , false , sess) ;
@@ -488,7 +483,6 @@ impl<'tcx> Collector<'tcx> {
488
483
kind : passed_lib. kind ,
489
484
cfg : None ,
490
485
foreign_module : None ,
491
- wasm_import_module : None ,
492
486
verbatim : passed_lib. verbatim ,
493
487
dll_imports : Vec :: new ( ) ,
494
488
} ) ;
0 commit comments