Skip to content

Commit 48df2ef

Browse files
committed
add tests for LinkerFlavorCli options parsing
1 parent 7a6f23c commit 48df2ef

File tree

1 file changed

+53
-1
lines changed

1 file changed

+53
-1
lines changed

compiler/rustc_session/src/tests.rs

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::str::FromStr;
22

3-
use crate::config::{LinkSelfContained, LinkSelfContainedCrt, LinkSelfContainedLinker};
3+
use crate::config::*;
4+
use rustc_target::spec::{LinkerFlavor, LldFlavor};
45

56
/// When adding support for `-C link-self-contained=linker`, we want to ensure the existing
67
/// values are still supported as-is: they are option values that can be used on stable.
@@ -69,3 +70,54 @@ pub fn parse_self_contained_with_linker() {
6970
})
7071
);
7172
}
73+
74+
/// When adding enrichments to `-C linker-flavor`, we want to ensure the existing `rustc_target`
75+
/// `LinkerFlavor`s are still supported as-is: they are option values that can be used on
76+
/// stable.
77+
#[test]
78+
pub fn parse_well_known_linker_flavor() {
79+
// All `LinkerFlavor`s are wrapped as a whole, so there's no particular need to be
80+
// exhaustive here.
81+
assert_eq!(LinkerFlavorCli::from_str("gcc"), Ok(LinkerFlavorCli::WellKnown(LinkerFlavor::Gcc)));
82+
assert_eq!(
83+
LinkerFlavorCli::from_str("msvc"),
84+
Ok(LinkerFlavorCli::WellKnown(LinkerFlavor::Msvc))
85+
);
86+
assert_eq!(
87+
LinkerFlavorCli::from_str("bpf-linker"),
88+
Ok(LinkerFlavorCli::WellKnown(LinkerFlavor::BpfLinker))
89+
);
90+
assert_eq!(
91+
LinkerFlavorCli::from_str("lld-link"),
92+
Ok(LinkerFlavorCli::WellKnown(LinkerFlavor::Lld(LldFlavor::Link)))
93+
);
94+
assert_eq!(
95+
LinkerFlavorCli::from_str("ld64.lld"),
96+
Ok(LinkerFlavorCli::WellKnown(LinkerFlavor::Lld(LldFlavor::Ld64)))
97+
);
98+
99+
// While other invalid values for well-known flavors are already errors
100+
assert_eq!(LinkerFlavorCli::from_str("unknown_linker"), Err(()));
101+
}
102+
103+
/// Enrichments can currently allow for the `gcc` flavor to specify for a given linker to be
104+
/// used, much like you'd use `-fuse-ld` as a link arg. When using `-C
105+
/// linker-flavor=gcc:$linker`, the `$linker` will be passed directly to `cc`.
106+
#[test]
107+
pub fn parse_gcc_enrichment_linker_flavor() {
108+
assert_eq!(
109+
LinkerFlavorCli::from_str("gcc:lld"),
110+
Ok(LinkerFlavorCli::Gcc { use_ld: "lld".to_string() })
111+
);
112+
assert_eq!(
113+
LinkerFlavorCli::from_str("gcc:gold"),
114+
Ok(LinkerFlavorCli::Gcc { use_ld: "gold".to_string() })
115+
);
116+
117+
// No linker actually mentioned
118+
assert_eq!(LinkerFlavorCli::from_str("gcc:"), Err(()));
119+
120+
// Only one `gcc:` separator allowed
121+
assert_eq!(LinkerFlavorCli::from_str("gcc:gcc:"), Err(()));
122+
assert_eq!(LinkerFlavorCli::from_str("gcc:gcc:linker"), Err(()));
123+
}

0 commit comments

Comments
 (0)