@@ -40,6 +40,7 @@ use std::ffi::OsString;
4040use std:: fs:: { File , OpenOptions } ;
4141use std:: io:: { BufWriter , Write } ;
4242use std:: lazy:: OnceCell ;
43+ use std:: ops:: Deref ;
4344use std:: path:: { Path , PathBuf } ;
4445use std:: process:: { ExitStatus , Output , Stdio } ;
4546use std:: { ascii, char, env, fmt, fs, io, mem, str} ;
@@ -674,11 +675,11 @@ fn link_natively<'a, B: ArchiveBuilder<'a>>(
674675
675676 linker:: disable_localization ( & mut cmd) ;
676677
677- for & ( ref k, ref v) in & sess. target . link_env {
678- cmd. env ( k, v) ;
678+ for & ( ref k, ref v) in sess. target . link_env . as_ref ( ) {
679+ cmd. env ( k. as_ref ( ) , v. as_ref ( ) ) ;
679680 }
680- for k in & sess. target . link_env_remove {
681- cmd. env_remove ( k) ;
681+ for k in sess. target . link_env_remove . as_ref ( ) {
682+ cmd. env_remove ( k. as_ref ( ) ) ;
682683 }
683684
684685 if sess. opts . prints . contains ( & PrintRequest :: LinkArgs ) {
@@ -1216,7 +1217,7 @@ pub fn linker_and_flavor(sess: &Session) -> (PathBuf, LinkerFlavor) {
12161217
12171218 if let Some ( ret) = infer_from (
12181219 sess,
1219- sess. target . linker . clone ( ) . map ( PathBuf :: from) ,
1220+ sess. target . linker . as_deref ( ) . map ( PathBuf :: from) ,
12201221 Some ( sess. target . linker_flavor ) ,
12211222 ) {
12221223 return ret;
@@ -1586,7 +1587,7 @@ fn add_post_link_objects(
15861587/// FIXME: Determine where exactly these args need to be inserted.
15871588fn add_pre_link_args ( cmd : & mut dyn Linker , sess : & Session , flavor : LinkerFlavor ) {
15881589 if let Some ( args) = sess. target . pre_link_args . get ( & flavor) {
1589- cmd. args ( args) ;
1590+ cmd. args ( args. iter ( ) . map ( Deref :: deref ) ) ;
15901591 }
15911592 cmd. args ( & sess. opts . debugging_opts . pre_link_args ) ;
15921593}
@@ -1602,7 +1603,7 @@ fn add_link_script(cmd: &mut dyn Linker, sess: &Session, tmpdir: &Path, crate_ty
16021603 let file_name = [ "rustc" , & sess. target . llvm_target , "linkfile.ld" ] . join ( "-" ) ;
16031604
16041605 let path = tmpdir. join ( file_name) ;
1605- if let Err ( e) = fs:: write ( & path, script) {
1606+ if let Err ( e) = fs:: write ( & path, script. as_ref ( ) ) {
16061607 sess. fatal ( & format ! ( "failed to write link script to {}: {}" , path. display( ) , e) ) ;
16071608 }
16081609
@@ -1634,23 +1635,23 @@ fn add_late_link_args(
16341635 } ) ;
16351636 if any_dynamic_crate {
16361637 if let Some ( args) = sess. target . late_link_args_dynamic . get ( & flavor) {
1637- cmd. args ( args) ;
1638+ cmd. args ( args. iter ( ) . map ( Deref :: deref ) ) ;
16381639 }
16391640 } else {
16401641 if let Some ( args) = sess. target . late_link_args_static . get ( & flavor) {
1641- cmd. args ( args) ;
1642+ cmd. args ( args. iter ( ) . map ( Deref :: deref ) ) ;
16421643 }
16431644 }
16441645 if let Some ( args) = sess. target . late_link_args . get ( & flavor) {
1645- cmd. args ( args) ;
1646+ cmd. args ( args. iter ( ) . map ( Deref :: deref ) ) ;
16461647 }
16471648}
16481649
16491650/// Add arbitrary "post-link" args defined by the target spec.
16501651/// FIXME: Determine where exactly these args need to be inserted.
16511652fn add_post_link_args ( cmd : & mut dyn Linker , sess : & Session , flavor : LinkerFlavor ) {
16521653 if let Some ( args) = sess. target . post_link_args . get ( & flavor) {
1653- cmd. args ( args) ;
1654+ cmd. args ( args. iter ( ) . map ( Deref :: deref ) ) ;
16541655 }
16551656}
16561657
@@ -1960,8 +1961,8 @@ fn add_order_independent_options(
19601961 cmd. arg ( & codegen_results. crate_info . target_cpu ) ;
19611962 cmd. arg ( "--cpu-features" ) ;
19621963 cmd. arg ( match & sess. opts . cg . target_feature {
1963- feat if !feat. is_empty ( ) => feat,
1964- _ => & sess. target . options . features ,
1964+ feat if !feat. is_empty ( ) => feat. as_ref ( ) ,
1965+ _ => sess. target . options . features . as_ref ( ) ,
19651966 } ) ;
19661967 }
19671968
@@ -2478,12 +2479,12 @@ fn add_apple_sdk(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavor) {
24782479 let os = & sess. target . os ;
24792480 let llvm_target = & sess. target . llvm_target ;
24802481 if sess. target . vendor != "apple"
2481- || !matches ! ( os. as_str ( ) , "ios" | "tvos" )
2482+ || !matches ! ( os. as_ref ( ) , "ios" | "tvos" )
24822483 || flavor != LinkerFlavor :: Gcc
24832484 {
24842485 return ;
24852486 }
2486- let sdk_name = match ( arch. as_str ( ) , os. as_str ( ) ) {
2487+ let sdk_name = match ( arch. as_ref ( ) , os. as_ref ( ) ) {
24872488 ( "aarch64" , "tvos" ) => "appletvos" ,
24882489 ( "x86_64" , "tvos" ) => "appletvsimulator" ,
24892490 ( "arm" , "ios" ) => "iphoneos" ,
0 commit comments