Skip to content

Commit 8ef3d5b

Browse files
committed
add tests for LinkerFlavorCli options parsing
1 parent 3c08036 commit 8ef3d5b

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

compiler/rustc_session/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ pub mod output;
3434

3535
pub use getopts;
3636

37+
#[cfg(test)]
38+
mod tests;
39+
3740
/// Requirements for a `StableHashingContext` to be used in this crate.
3841
/// This is a hack to allow using the `HashStable_Generic` derive macro
3942
/// instead of implementing everything in `rustc_middle`.

compiler/rustc_session/src/tests.rs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
use std::str::FromStr;
2+
3+
use crate::config::*;
4+
use rustc_target::spec::{LinkerFlavor, LldFlavor};
5+
6+
/// When adding enrichments to `-C linker-flavor`, we want to ensure the existing `rustc_target`
7+
/// `LinkerFlavor`s are still supported as-is: they are option values that can be used on
8+
/// stable.
9+
#[test]
10+
pub fn parse_well_known_linker_flavor() {
11+
// All `LinkerFlavor`s are wrapped as a whole, so there's no particular need to be
12+
// exhaustive here.
13+
assert_eq!(LinkerFlavorCli::from_str("gcc"), Ok(LinkerFlavorCli::WellKnown(LinkerFlavor::Gcc)));
14+
assert_eq!(
15+
LinkerFlavorCli::from_str("msvc"),
16+
Ok(LinkerFlavorCli::WellKnown(LinkerFlavor::Msvc))
17+
);
18+
assert_eq!(
19+
LinkerFlavorCli::from_str("bpf-linker"),
20+
Ok(LinkerFlavorCli::WellKnown(LinkerFlavor::BpfLinker))
21+
);
22+
assert_eq!(
23+
LinkerFlavorCli::from_str("lld-link"),
24+
Ok(LinkerFlavorCli::WellKnown(LinkerFlavor::Lld(LldFlavor::Link)))
25+
);
26+
assert_eq!(
27+
LinkerFlavorCli::from_str("ld64.lld"),
28+
Ok(LinkerFlavorCli::WellKnown(LinkerFlavor::Lld(LldFlavor::Ld64)))
29+
);
30+
31+
// While other invalid values for well-known flavors are already errors
32+
assert_eq!(LinkerFlavorCli::from_str("unknown_linker"), Err(()));
33+
}
34+
35+
/// Enrichments can currently allow for the `gcc` flavor to specify for a given linker to be
36+
/// used, much like you'd use `-fuse-ld` as a link arg. When using `-C
37+
/// linker-flavor=gcc:$linker`, the `$linker` will be passed directly to `cc`.
38+
#[test]
39+
pub fn parse_gcc_enrichment_linker_flavor() {
40+
assert_eq!(
41+
LinkerFlavorCli::from_str("gcc:lld"),
42+
Ok(LinkerFlavorCli::Gcc { use_ld: "lld".to_string() })
43+
);
44+
assert_eq!(
45+
LinkerFlavorCli::from_str("gcc:gold"),
46+
Ok(LinkerFlavorCli::Gcc { use_ld: "gold".to_string() })
47+
);
48+
49+
// No linker actually mentioned
50+
assert_eq!(LinkerFlavorCli::from_str("gcc:"), Err(()));
51+
52+
// Only one `gcc:` separator allowed
53+
assert_eq!(LinkerFlavorCli::from_str("gcc:gcc:"), Err(()));
54+
assert_eq!(LinkerFlavorCli::from_str("gcc:gcc:linker"), Err(()));
55+
}

0 commit comments

Comments
 (0)