@@ -46,7 +46,7 @@ pub fn find_native_static_library(
4646}
4747
4848fn find_bundled_library (
49- name : Option < Symbol > ,
49+ name : Symbol ,
5050 verbatim : Option < bool > ,
5151 kind : NativeLibKind ,
5252 has_cfg : bool ,
@@ -58,7 +58,7 @@ fn find_bundled_library(
5858 {
5959 let verbatim = verbatim. unwrap_or ( false ) ;
6060 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)
6262 . file_name ( )
6363 . and_then ( |s| s. to_str ( ) )
6464 . map ( Symbol :: intern) ;
@@ -336,10 +336,16 @@ impl<'tcx> Collector<'tcx> {
336336 if name. is_some ( ) || kind. is_some ( ) || modifiers. is_some ( ) || cfg. is_some ( ) {
337337 sess. emit_err ( errors:: IncompatibleWasmLink { span } ) ;
338338 }
339- } else if name. is_none ( ) {
340- sess. emit_err ( errors:: LinkRequiresName { span : m. span } ) ;
341339 }
342340
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+
343349 // Do this outside of the loop so that `import_name_type` can be specified before `kind`.
344350 if let Some ( ( _, span) ) = import_name_type {
345351 if kind != Some ( NativeLibKind :: RawDylib ) {
@@ -349,8 +355,8 @@ impl<'tcx> Collector<'tcx> {
349355
350356 let dll_imports = match kind {
351357 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 } ) ;
354360 }
355361 foreign_mod_items
356362 . iter ( )
@@ -389,7 +395,6 @@ impl<'tcx> Collector<'tcx> {
389395 }
390396 } ;
391397
392- let name = name. map ( |( name, _) | name) ;
393398 let kind = kind. unwrap_or ( NativeLibKind :: Unspecified ) ;
394399 let filename = find_bundled_library ( name, verbatim, kind, cfg. is_some ( ) , sess) ;
395400 self . libs . push ( NativeLib {
@@ -398,7 +403,6 @@ impl<'tcx> Collector<'tcx> {
398403 kind,
399404 cfg,
400405 foreign_module : Some ( it. owner_id . to_def_id ( ) ) ,
401- wasm_import_module : wasm_import_module. map ( |( name, _) | name) ,
402406 verbatim,
403407 dll_imports,
404408 } ) ;
@@ -415,11 +419,7 @@ impl<'tcx> Collector<'tcx> {
415419 self . tcx . sess . emit_err ( errors:: LibFrameworkApple ) ;
416420 }
417421 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 ) ;
423423 if new_name. is_empty ( ) {
424424 self . tcx . sess . emit_err ( errors:: EmptyRenamingTarget { lib_name : & lib. name } ) ;
425425 } else if !any_duplicate {
@@ -444,41 +444,36 @@ impl<'tcx> Collector<'tcx> {
444444 let mut existing = self
445445 . libs
446446 . 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) ;
473466 }
467+ lib. verbatim = passed_lib. verbatim ;
468+ return true ;
474469 }
475470 false
476471 } )
477472 . collect :: < Vec < _ > > ( ) ;
478473 if existing. is_empty ( ) {
479474 // Add if not found
480475 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 ) ) ;
482477 let sess = self . tcx . sess ;
483478 let filename =
484479 find_bundled_library ( name, passed_lib. verbatim , passed_lib. kind , false , sess) ;
@@ -488,7 +483,6 @@ impl<'tcx> Collector<'tcx> {
488483 kind : passed_lib. kind ,
489484 cfg : None ,
490485 foreign_module : None ,
491- wasm_import_module : None ,
492486 verbatim : passed_lib. verbatim ,
493487 dll_imports : Vec :: new ( ) ,
494488 } ) ;
0 commit comments