@@ -23,7 +23,7 @@ use rustc_session::utils::NativeLibKind;
2323use rustc_session:: { filesearch, Session } ;
2424use rustc_span:: symbol:: Symbol ;
2525use rustc_target:: spec:: crt_objects:: { CrtObjects , LinkSelfContainedDefault } ;
26- use rustc_target:: spec:: { Cc , LinkOutputKind , LinkerFlavor , Lld , PanicStrategy } ;
26+ use rustc_target:: spec:: { Cc , CcFlavor , LinkOutputKind , LinkerFlavor , Lld , PanicStrategy } ;
2727use rustc_target:: spec:: { RelocModel , RelroLevel , SanitizerSet , SplitDebuginfo } ;
2828
2929use super :: archive:: { ArchiveBuilder , ArchiveBuilderBuilder } ;
@@ -782,7 +782,7 @@ fn link_natively<'a>(
782782 // then it should not default to linking executables as pie. Different
783783 // versions of gcc seem to use different quotes in the error message so
784784 // don't check for them.
785- if matches ! ( flavor, LinkerFlavor :: Gnu ( Cc :: Yes , _) )
785+ if matches ! ( flavor, LinkerFlavor :: Gnu ( Cc :: Yes ( _ ) , _) )
786786 && unknown_arg_regex. is_match ( & out)
787787 && out. contains ( "-no-pie" )
788788 && cmd. get_args ( ) . iter ( ) . any ( |e| e. to_string_lossy ( ) == "-no-pie" )
@@ -800,7 +800,7 @@ fn link_natively<'a>(
800800
801801 // Detect '-static-pie' used with an older version of gcc or clang not supporting it.
802802 // Fallback from '-static-pie' to '-static' in that case.
803- if matches ! ( flavor, LinkerFlavor :: Gnu ( Cc :: Yes , _) )
803+ if matches ! ( flavor, LinkerFlavor :: Gnu ( Cc :: Yes ( _ ) , _) )
804804 && unknown_arg_regex. is_match ( & out)
805805 && ( out. contains ( "-static-pie" ) || out. contains ( "--no-dynamic-linker" ) )
806806 && cmd. get_args ( ) . iter ( ) . any ( |e| e. to_string_lossy ( ) == "-static-pie" )
@@ -1286,11 +1286,13 @@ pub fn linker_and_flavor(sess: &Session) -> (PathBuf, LinkerFlavor) {
12861286 // only the linker flavor is known; use the default linker for the selected flavor
12871287 ( None , Some ( flavor) ) => Some ( (
12881288 PathBuf :: from ( match flavor {
1289- LinkerFlavor :: Gnu ( Cc :: Yes , _)
1290- | LinkerFlavor :: Darwin ( Cc :: Yes , _)
1291- | LinkerFlavor :: WasmLld ( Cc :: Yes )
1292- | LinkerFlavor :: Unix ( Cc :: Yes ) => {
1293- if cfg ! ( any( target_os = "solaris" , target_os = "illumos" ) ) {
1289+ LinkerFlavor :: Gnu ( Cc :: Yes ( cc_flavor) , _)
1290+ | LinkerFlavor :: Darwin ( Cc :: Yes ( cc_flavor) , _)
1291+ | LinkerFlavor :: WasmLld ( Cc :: Yes ( cc_flavor) )
1292+ | LinkerFlavor :: Unix ( Cc :: Yes ( cc_flavor) ) => {
1293+ if cfg ! ( any( target_os = "solaris" , target_os = "illumos" ) )
1294+ && cc_flavor == CcFlavor :: AnyCc
1295+ {
12941296 // On historical Solaris systems, "cc" may have
12951297 // been Sun Studio, which is not flag-compatible
12961298 // with "gcc". This history casts a long shadow,
@@ -1299,7 +1301,7 @@ pub fn linker_and_flavor(sess: &Session) -> (PathBuf, LinkerFlavor) {
12991301 // available as "cc".
13001302 "gcc"
13011303 } else {
1302- "cc"
1304+ cc_flavor . default_bin_name ( )
13031305 }
13041306 }
13051307 LinkerFlavor :: Gnu ( _, Lld :: Yes )
@@ -1745,7 +1747,7 @@ fn add_pre_link_objects(
17451747 let empty = Default :: default ( ) ;
17461748 let objects = if self_contained {
17471749 & opts. pre_link_objects_self_contained
1748- } else if !( sess. target . os == "fuchsia" && matches ! ( flavor, LinkerFlavor :: Gnu ( Cc :: Yes , _) ) ) {
1750+ } else if !( sess. target . os == "fuchsia" && matches ! ( flavor, LinkerFlavor :: Gnu ( Cc :: Yes ( _ ) , _) ) ) {
17491751 & opts. pre_link_objects
17501752 } else {
17511753 & empty
@@ -2276,7 +2278,7 @@ fn add_order_independent_options(
22762278
22772279 if sess. target . os == "fuchsia"
22782280 && crate_type == CrateType :: Executable
2279- && !matches ! ( flavor, LinkerFlavor :: Gnu ( Cc :: Yes , _) )
2281+ && !matches ! ( flavor, LinkerFlavor :: Gnu ( Cc :: Yes ( _ ) , _) )
22802282 {
22812283 let prefix = if sess. opts . unstable_opts . sanitizer . contains ( SanitizerSet :: ADDRESS ) {
22822284 "asan/"
@@ -2906,7 +2908,7 @@ fn add_apple_sdk(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavor) {
29062908 } ;
29072909
29082910 match flavor {
2909- LinkerFlavor :: Darwin ( Cc :: Yes , _) => {
2911+ LinkerFlavor :: Darwin ( Cc :: Yes ( _ ) , _) => {
29102912 cmd. args ( & [ "-isysroot" , & sdk_root, "-Wl,-syslibroot" , & sdk_root] ) ;
29112913 }
29122914 LinkerFlavor :: Darwin ( Cc :: No , _) => {
0 commit comments