@@ -40,6 +40,7 @@ use std::ffi::OsString;
40
40
use std:: fs:: { File , OpenOptions } ;
41
41
use std:: io:: { BufWriter , Write } ;
42
42
use std:: lazy:: OnceCell ;
43
+ use std:: ops:: Deref ;
43
44
use std:: path:: { Path , PathBuf } ;
44
45
use std:: process:: { ExitStatus , Output , Stdio } ;
45
46
use std:: { ascii, char, env, fmt, fs, io, mem, str} ;
@@ -674,11 +675,11 @@ fn link_natively<'a, B: ArchiveBuilder<'a>>(
674
675
675
676
linker:: disable_localization ( & mut cmd) ;
676
677
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 ( ) ) ;
679
680
}
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 ( ) ) ;
682
683
}
683
684
684
685
if sess. opts . prints . contains ( & PrintRequest :: LinkArgs ) {
@@ -1216,7 +1217,7 @@ pub fn linker_and_flavor(sess: &Session) -> (PathBuf, LinkerFlavor) {
1216
1217
1217
1218
if let Some ( ret) = infer_from (
1218
1219
sess,
1219
- sess. target . linker . clone ( ) . map ( PathBuf :: from) ,
1220
+ sess. target . linker . as_deref ( ) . map ( PathBuf :: from) ,
1220
1221
Some ( sess. target . linker_flavor ) ,
1221
1222
) {
1222
1223
return ret;
@@ -1586,7 +1587,7 @@ fn add_post_link_objects(
1586
1587
/// FIXME: Determine where exactly these args need to be inserted.
1587
1588
fn add_pre_link_args ( cmd : & mut dyn Linker , sess : & Session , flavor : LinkerFlavor ) {
1588
1589
if let Some ( args) = sess. target . pre_link_args . get ( & flavor) {
1589
- cmd. args ( args) ;
1590
+ cmd. args ( args. iter ( ) . map ( Deref :: deref ) ) ;
1590
1591
}
1591
1592
cmd. args ( & sess. opts . debugging_opts . pre_link_args ) ;
1592
1593
}
@@ -1602,7 +1603,7 @@ fn add_link_script(cmd: &mut dyn Linker, sess: &Session, tmpdir: &Path, crate_ty
1602
1603
let file_name = [ "rustc" , & sess. target . llvm_target , "linkfile.ld" ] . join ( "-" ) ;
1603
1604
1604
1605
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 ( ) ) {
1606
1607
sess. fatal ( & format ! ( "failed to write link script to {}: {}" , path. display( ) , e) ) ;
1607
1608
}
1608
1609
@@ -1634,23 +1635,23 @@ fn add_late_link_args(
1634
1635
} ) ;
1635
1636
if any_dynamic_crate {
1636
1637
if let Some ( args) = sess. target . late_link_args_dynamic . get ( & flavor) {
1637
- cmd. args ( args) ;
1638
+ cmd. args ( args. iter ( ) . map ( Deref :: deref ) ) ;
1638
1639
}
1639
1640
} else {
1640
1641
if let Some ( args) = sess. target . late_link_args_static . get ( & flavor) {
1641
- cmd. args ( args) ;
1642
+ cmd. args ( args. iter ( ) . map ( Deref :: deref ) ) ;
1642
1643
}
1643
1644
}
1644
1645
if let Some ( args) = sess. target . late_link_args . get ( & flavor) {
1645
- cmd. args ( args) ;
1646
+ cmd. args ( args. iter ( ) . map ( Deref :: deref ) ) ;
1646
1647
}
1647
1648
}
1648
1649
1649
1650
/// Add arbitrary "post-link" args defined by the target spec.
1650
1651
/// FIXME: Determine where exactly these args need to be inserted.
1651
1652
fn add_post_link_args ( cmd : & mut dyn Linker , sess : & Session , flavor : LinkerFlavor ) {
1652
1653
if let Some ( args) = sess. target . post_link_args . get ( & flavor) {
1653
- cmd. args ( args) ;
1654
+ cmd. args ( args. iter ( ) . map ( Deref :: deref ) ) ;
1654
1655
}
1655
1656
}
1656
1657
@@ -1960,8 +1961,8 @@ fn add_order_independent_options(
1960
1961
cmd. arg ( & codegen_results. crate_info . target_cpu ) ;
1961
1962
cmd. arg ( "--cpu-features" ) ;
1962
1963
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 ( ) ,
1965
1966
} ) ;
1966
1967
}
1967
1968
@@ -2478,12 +2479,12 @@ fn add_apple_sdk(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavor) {
2478
2479
let os = & sess. target . os ;
2479
2480
let llvm_target = & sess. target . llvm_target ;
2480
2481
if sess. target . vendor != "apple"
2481
- || !matches ! ( os. as_str ( ) , "ios" | "tvos" )
2482
+ || !matches ! ( os. as_ref ( ) , "ios" | "tvos" )
2482
2483
|| flavor != LinkerFlavor :: Gcc
2483
2484
{
2484
2485
return ;
2485
2486
}
2486
- let sdk_name = match ( arch. as_str ( ) , os. as_str ( ) ) {
2487
+ let sdk_name = match ( arch. as_ref ( ) , os. as_ref ( ) ) {
2487
2488
( "aarch64" , "tvos" ) => "appletvos" ,
2488
2489
( "x86_64" , "tvos" ) => "appletvsimulator" ,
2489
2490
( "arm" , "ios" ) => "iphoneos" ,
0 commit comments