Skip to content

Commit ccff48f

Browse files
committed
Replace every String in Target(Options) with Cow<'static, str>
1 parent 15a242a commit ccff48f

File tree

223 files changed

+1252
-1243
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

223 files changed

+1252
-1243
lines changed

compiler/rustc_codegen_llvm/src/attributes.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ fn instrument_function_attr<'ll>(cx: &CodegenCx<'ll, '_>) -> Option<&'ll Attribu
116116

117117
// The function name varies on platforms.
118118
// See test/CodeGen/mcount.c in clang.
119-
let mcount_name = cx.sess().target.mcount.as_str();
119+
let mcount_name = cx.sess().target.mcount.as_ref();
120120

121121
Some(llvm::CreateAttrStringValue(
122122
cx.llcx,

compiler/rustc_codegen_llvm/src/builder.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1452,7 +1452,7 @@ impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx> {
14521452
}
14531453

14541454
fn fptoint_sat_broken_in_llvm(&self) -> bool {
1455-
match self.tcx.sess.target.arch.as_str() {
1455+
match self.tcx.sess.target.arch.as_ref() {
14561456
// FIXME - https://bugs.llvm.org/show_bug.cgi?id=50083
14571457
"riscv64" => llvm_util::get_version() < (13, 0, 0),
14581458
_ => false,

compiler/rustc_codegen_llvm/src/context.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ pub unsafe fn create_module<'ll>(
134134
let mod_name = SmallCStr::new(mod_name);
135135
let llmod = llvm::LLVMModuleCreateWithNameInContext(mod_name.as_ptr(), llcx);
136136

137-
let mut target_data_layout = sess.target.data_layout.clone();
137+
let mut target_data_layout = sess.target.data_layout.to_string();
138138
let llvm_version = llvm_util::get_version();
139139
if llvm_version < (13, 0, 0) {
140140
if sess.target.arch == "powerpc64" {
@@ -859,7 +859,7 @@ impl<'ll> CodegenCx<'ll, '_> {
859859

860860
// This isn't an "LLVM intrinsic", but LLVM's optimization passes
861861
// recognize it like one and we assume it exists in `core::slice::cmp`
862-
match self.sess().target.arch.as_str() {
862+
match self.sess().target.arch.as_ref() {
863863
"avr" | "msp430" => ifn!("memcmp", fn(i8p, i8p, t_isize) -> t_i16),
864864
_ => ifn!("memcmp", fn(i8p, i8p, t_isize) -> t_i32),
865865
}

compiler/rustc_codegen_llvm/src/intrinsic.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ impl<'ll, 'tcx> IntrinsicCallMethods<'tcx> for Builder<'_, 'll, 'tcx> {
329329
let b_ptr = self.bitcast(b, i8p_ty);
330330
let n = self.const_usize(layout.size().bytes());
331331
let cmp = self.call_intrinsic("memcmp", &[a_ptr, b_ptr, n]);
332-
match self.cx.sess().target.arch.as_str() {
332+
match self.cx.sess().target.arch.as_ref() {
333333
"avr" | "msp430" => self.icmp(IntPredicate::IntEQ, cmp, self.const_i16(0)),
334334
_ => self.icmp(IntPredicate::IntEQ, cmp, self.const_i32(0)),
335335
}

compiler/rustc_codegen_llvm/src/llvm_util.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ unsafe fn configure_llvm(sess: &Session) {
6161
full_arg.trim().split(|c: char| c == '=' || c.is_whitespace()).next().unwrap_or("")
6262
}
6363

64-
let cg_opts = sess.opts.cg.llvm_args.iter();
65-
let tg_opts = sess.target.llvm_args.iter();
64+
let cg_opts = sess.opts.cg.llvm_args.iter().map(AsRef::as_ref);
65+
let tg_opts = sess.target.llvm_args.iter().map(AsRef::as_ref);
6666
let sess_args = cg_opts.chain(tg_opts);
6767

6868
let user_specified_args: FxHashSet<_> =
@@ -375,8 +375,10 @@ fn handle_native(name: &str) -> &str {
375375
}
376376

377377
pub fn target_cpu(sess: &Session) -> &str {
378-
let name = sess.opts.cg.target_cpu.as_ref().unwrap_or(&sess.target.cpu);
379-
handle_native(name)
378+
match sess.opts.cg.target_cpu {
379+
Some(ref name) => handle_native(name),
380+
None => handle_native(sess.target.cpu.as_ref()),
381+
}
380382
}
381383

382384
/// The list of LLVM features computed from CLI flags (`-Ctarget-cpu`, `-Ctarget-feature`,

compiler/rustc_codegen_ssa/src/back/link.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -675,10 +675,10 @@ fn link_natively<'a, B: ArchiveBuilder<'a>>(
675675
linker::disable_localization(&mut cmd);
676676

677677
for &(ref k, ref v) in &sess.target.link_env {
678-
cmd.env(k, v);
678+
cmd.env(k.as_ref(), v.as_ref());
679679
}
680680
for k in &sess.target.link_env_remove {
681-
cmd.env_remove(k);
681+
cmd.env_remove(k.as_ref());
682682
}
683683

684684
if sess.opts.prints.contains(&PrintRequest::LinkArgs) {
@@ -1216,7 +1216,7 @@ pub fn linker_and_flavor(sess: &Session) -> (PathBuf, LinkerFlavor) {
12161216

12171217
if let Some(ret) = infer_from(
12181218
sess,
1219-
sess.target.linker.clone().map(PathBuf::from),
1219+
sess.target.linker.as_ref().map(|l| PathBuf::from(l.as_ref())),
12201220
Some(sess.target.linker_flavor),
12211221
) {
12221222
return ret;
@@ -1602,7 +1602,7 @@ fn add_link_script(cmd: &mut dyn Linker, sess: &Session, tmpdir: &Path, crate_ty
16021602
let file_name = ["rustc", &sess.target.llvm_target, "linkfile.ld"].join("-");
16031603

16041604
let path = tmpdir.join(file_name);
1605-
if let Err(e) = fs::write(&path, script) {
1605+
if let Err(e) = fs::write(&path, script.as_ref()) {
16061606
sess.fatal(&format!("failed to write link script to {}: {}", path.display(), e));
16071607
}
16081608

@@ -1960,8 +1960,8 @@ fn add_order_independent_options(
19601960
cmd.arg(&codegen_results.crate_info.target_cpu);
19611961
cmd.arg("--cpu-features");
19621962
cmd.arg(match &sess.opts.cg.target_feature {
1963-
feat if !feat.is_empty() => feat,
1964-
_ => &sess.target.options.features,
1963+
feat if !feat.is_empty() => feat.as_ref(),
1964+
_ => sess.target.options.features.as_ref(),
19651965
});
19661966
}
19671967

@@ -2478,12 +2478,12 @@ fn add_apple_sdk(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavor) {
24782478
let os = &sess.target.os;
24792479
let llvm_target = &sess.target.llvm_target;
24802480
if sess.target.vendor != "apple"
2481-
|| !matches!(os.as_str(), "ios" | "tvos")
2481+
|| !matches!(os.as_ref(), "ios" | "tvos")
24822482
|| flavor != LinkerFlavor::Gcc
24832483
{
24842484
return;
24852485
}
2486-
let sdk_name = match (arch.as_str(), os.as_str()) {
2486+
let sdk_name = match (arch.as_ref(), os.as_ref()) {
24872487
("aarch64", "tvos") => "appletvos",
24882488
("x86_64", "tvos") => "appletvsimulator",
24892489
("arm", "ios") => "iphoneos",

compiler/rustc_codegen_ssa/src/back/linker.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ pub fn get_linker<'a>(
7575
if let Some(ref tool) = msvc_tool {
7676
let original_path = tool.path();
7777
if let Some(ref root_lib_path) = original_path.ancestors().nth(4) {
78-
let arch = match t.arch.as_str() {
78+
let arch = match t.arch.as_ref() {
7979
"x86_64" => Some("x64"),
8080
"x86" => Some("x86"),
8181
"aarch64" => Some("arm64"),
@@ -1520,7 +1520,7 @@ impl<'a> L4Bender<'a> {
15201520

15211521
pub(crate) fn exported_symbols(tcx: TyCtxt<'_>, crate_type: CrateType) -> Vec<String> {
15221522
if let Some(ref exports) = tcx.sess.target.override_export_symbols {
1523-
return exports.clone();
1523+
return exports.iter().map(ToString::to_string).collect();
15241524
}
15251525

15261526
let mut symbols = Vec::new();

compiler/rustc_codegen_ssa/src/back/write.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ impl ModuleConfig {
218218
false
219219
),
220220
emit_obj,
221-
bc_cmdline: sess.target.bitcode_llvm_cmdline.clone(),
221+
bc_cmdline: sess.target.bitcode_llvm_cmdline.to_string(),
222222

223223
verify_llvm_ir: sess.verify_llvm_ir(),
224224
no_prepopulate_passes: sess.opts.cg.no_prepopulate_passes,
@@ -1061,7 +1061,7 @@ fn start_executing_work<B: ExtraBackendMethods>(
10611061
is_pe_coff: tcx.sess.target.is_like_windows,
10621062
target_can_use_split_dwarf: tcx.sess.target_can_use_split_dwarf(),
10631063
target_pointer_width: tcx.sess.target.pointer_width,
1064-
target_arch: tcx.sess.target.arch.clone(),
1064+
target_arch: tcx.sess.target.arch.to_string(),
10651065
debuginfo: tcx.sess.opts.debuginfo,
10661066
split_debuginfo: tcx.sess.split_debuginfo(),
10671067
split_dwarf_kind: tcx.sess.opts.debugging_opts.split_dwarf_kind,

compiler/rustc_metadata/src/locator.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -416,10 +416,10 @@ impl<'a> CrateLocator<'a> {
416416
(&f[rlib_prefix.len()..(f.len() - rlib_suffix.len())], CrateFlavor::Rlib)
417417
} else if f.starts_with(rmeta_prefix) && f.ends_with(rmeta_suffix) {
418418
(&f[rmeta_prefix.len()..(f.len() - rmeta_suffix.len())], CrateFlavor::Rmeta)
419-
} else if f.starts_with(dylib_prefix) && f.ends_with(dylib_suffix) {
419+
} else if f.starts_with(dylib_prefix) && f.ends_with(dylib_suffix.as_ref()) {
420420
(&f[dylib_prefix.len()..(f.len() - dylib_suffix.len())], CrateFlavor::Dylib)
421421
} else {
422-
if f.starts_with(staticlib_prefix) && f.ends_with(staticlib_suffix) {
422+
if f.starts_with(staticlib_prefix) && f.ends_with(staticlib_suffix.as_ref()) {
423423
self.crate_rejections.via_kind.push(CrateMismatch {
424424
path: spf.path.clone(),
425425
got: "static".to_string(),
@@ -698,8 +698,8 @@ impl<'a> CrateLocator<'a> {
698698
};
699699

700700
if file.starts_with("lib") && (file.ends_with(".rlib") || file.ends_with(".rmeta"))
701-
|| file.starts_with(&self.target.dll_prefix)
702-
&& file.ends_with(&self.target.dll_suffix)
701+
|| file.starts_with(self.target.dll_prefix.as_ref())
702+
&& file.ends_with(self.target.dll_suffix.as_ref())
703703
{
704704
// Make sure there's at most one rlib and at most one dylib.
705705
// Note to take care and match against the non-canonicalized name:
@@ -733,8 +733,8 @@ impl<'a> CrateLocator<'a> {
733733
crate_name: self.crate_name,
734734
root,
735735
triple: self.triple,
736-
dll_prefix: self.target.dll_prefix.clone(),
737-
dll_suffix: self.target.dll_suffix.clone(),
736+
dll_prefix: self.target.dll_prefix.to_string(),
737+
dll_suffix: self.target.dll_suffix.to_string(),
738738
crate_rejections: self.crate_rejections,
739739
})
740740
}

compiler/rustc_serialize/src/json.rs

+7
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ use self::JsonEvent::*;
170170
use self::ParserError::*;
171171
use self::ParserState::*;
172172

173+
use std::borrow::Cow;
173174
use std::collections::{BTreeMap, HashMap};
174175
use std::mem::swap;
175176
use std::num::FpCategory as Fp;
@@ -2196,6 +2197,12 @@ impl ToJson for string::String {
21962197
}
21972198
}
21982199

2200+
impl<'a> ToJson for Cow<'a, str> {
2201+
fn to_json(&self) -> Json {
2202+
Json::String(self.to_string())
2203+
}
2204+
}
2205+
21992206
macro_rules! tuple_impl {
22002207
// use variables to indicate the arity of the tuple
22012208
($($tyvar:ident),* ) => {

compiler/rustc_target/src/spec/aarch64_apple_darwin.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ use crate::spec::{FramePointer, LinkerFlavor, SanitizerSet, Target, TargetOption
22

33
pub fn target() -> Target {
44
let mut base = super::apple_base::opts("macos");
5-
base.cpu = "apple-a14".to_string();
5+
base.cpu = "apple-a14".into();
66
base.max_atomic_width = Some(128);
77

88
// FIXME: The leak sanitizer currently fails the tests, see #88132.
99
base.supported_sanitizers = SanitizerSet::ADDRESS | SanitizerSet::CFI | SanitizerSet::THREAD;
1010

11-
base.pre_link_args.insert(LinkerFlavor::Gcc, vec!["-arch".to_string(), "arm64".to_string()]);
11+
base.pre_link_args.insert(LinkerFlavor::Gcc, vec!["-arch".into(), "arm64".into()]);
1212
base.link_env_remove.extend(super::apple_base::macos_link_env_remove());
1313

1414
// Clang automatically chooses a more specific target based on
@@ -17,12 +17,12 @@ pub fn target() -> Target {
1717
let llvm_target = super::apple_base::macos_llvm_target("arm64");
1818

1919
Target {
20-
llvm_target,
20+
llvm_target: llvm_target.into(),
2121
pointer_width: 64,
22-
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".to_string(),
23-
arch: "aarch64".to_string(),
22+
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".into(),
23+
arch: "aarch64".into(),
2424
options: TargetOptions {
25-
mcount: "\u{1}mcount".to_string(),
25+
mcount: "\u{1}mcount".into(),
2626
frame_pointer: FramePointer::NonLeaf,
2727
..base
2828
},

compiler/rustc_target/src/spec/aarch64_apple_ios.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ pub fn target() -> Target {
1010
let llvm_target = super::apple_base::ios_llvm_target(arch);
1111

1212
Target {
13-
llvm_target,
13+
llvm_target: llvm_target.into(),
1414
pointer_width: 64,
15-
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".to_string(),
16-
arch: "aarch64".to_string(),
15+
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".into(),
16+
arch: "aarch64".into(),
1717
options: TargetOptions {
18-
features: "+neon,+fp-armv8,+apple-a7".to_string(),
18+
features: "+neon,+fp-armv8,+apple-a7".into(),
1919
max_atomic_width: Some(128),
2020
forces_embed_bitcode: true,
2121
frame_pointer: FramePointer::NonLeaf,
@@ -29,7 +29,7 @@ pub fn target() -> Target {
2929
-target-abi\0\
3030
darwinpcs\0\
3131
-Os\0"
32-
.to_string(),
32+
.into(),
3333
..opts("ios", Arch::Arm64)
3434
},
3535
}

compiler/rustc_target/src/spec/aarch64_apple_ios_macabi.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ use crate::spec::{FramePointer, Target, TargetOptions};
33

44
pub fn target() -> Target {
55
Target {
6-
llvm_target: "arm64-apple-ios14.0-macabi".to_string(),
6+
llvm_target: "arm64-apple-ios14.0-macabi".into(),
77
pointer_width: 64,
8-
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".to_string(),
9-
arch: "aarch64".to_string(),
8+
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".into(),
9+
arch: "aarch64".into(),
1010
options: TargetOptions {
11-
features: "+neon,+fp-armv8,+apple-a12".to_string(),
11+
features: "+neon,+fp-armv8,+apple-a12".into(),
1212
max_atomic_width: Some(128),
1313
forces_embed_bitcode: true,
1414
frame_pointer: FramePointer::NonLeaf,
@@ -20,7 +20,7 @@ pub fn target() -> Target {
2020
-emit-obj\0\
2121
-disable-llvm-passes\0\
2222
-Os\0"
23-
.to_string(),
23+
.into(),
2424
..opts("ios", Arch::Arm64_macabi)
2525
},
2626
}

compiler/rustc_target/src/spec/aarch64_apple_ios_sim.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ pub fn target() -> Target {
1212
let llvm_target = super::apple_base::ios_sim_llvm_target(arch);
1313

1414
Target {
15-
llvm_target: llvm_target,
15+
llvm_target: llvm_target.into(),
1616
pointer_width: 64,
17-
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".to_string(),
18-
arch: "aarch64".to_string(),
17+
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".into(),
18+
arch: "aarch64".into(),
1919
options: TargetOptions {
20-
features: "+neon,+fp-armv8,+apple-a7".to_string(),
20+
features: "+neon,+fp-armv8,+apple-a7".into(),
2121
max_atomic_width: Some(128),
2222
forces_embed_bitcode: true,
2323
frame_pointer: FramePointer::NonLeaf,
@@ -31,7 +31,7 @@ pub fn target() -> Target {
3131
-target-abi\0\
3232
darwinpcs\0\
3333
-Os\0"
34-
.to_string(),
34+
.into(),
3535
..base
3636
},
3737
}

compiler/rustc_target/src/spec/aarch64_apple_tvos.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ use crate::spec::{FramePointer, Target, TargetOptions};
33

44
pub fn target() -> Target {
55
Target {
6-
llvm_target: "arm64-apple-tvos".to_string(),
6+
llvm_target: "arm64-apple-tvos".into(),
77
pointer_width: 64,
8-
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".to_string(),
9-
arch: "aarch64".to_string(),
8+
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".into(),
9+
arch: "aarch64".into(),
1010
options: TargetOptions {
11-
features: "+neon,+fp-armv8,+apple-a7".to_string(),
11+
features: "+neon,+fp-armv8,+apple-a7".into(),
1212
max_atomic_width: Some(128),
1313
forces_embed_bitcode: true,
1414
frame_pointer: FramePointer::NonLeaf,

compiler/rustc_target/src/spec/aarch64_be_unknown_linux_gnu.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ use crate::spec::{Target, TargetOptions};
33

44
pub fn target() -> Target {
55
Target {
6-
llvm_target: "aarch64_be-unknown-linux-gnu".to_string(),
6+
llvm_target: "aarch64_be-unknown-linux-gnu".into(),
77
pointer_width: 64,
8-
data_layout: "E-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".to_string(),
9-
arch: "aarch64".to_string(),
8+
data_layout: "E-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
9+
arch: "aarch64".into(),
1010
options: TargetOptions {
11-
features: "+outline-atomics".to_string(),
11+
features: "+outline-atomics".into(),
1212
max_atomic_width: Some(128),
13-
mcount: "\u{1}_mcount".to_string(),
13+
mcount: "\u{1}_mcount".into(),
1414
endian: Endian::Big,
1515
..super::linux_gnu_base::opts()
1616
},

compiler/rustc_target/src/spec/aarch64_be_unknown_linux_gnu_ilp32.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ pub fn target() -> Target {
66
base.max_atomic_width = Some(128);
77

88
Target {
9-
llvm_target: "aarch64_be-unknown-linux-gnu_ilp32".to_string(),
9+
llvm_target: "aarch64_be-unknown-linux-gnu_ilp32".into(),
1010
pointer_width: 32,
11-
data_layout: "E-m:e-p:32:32-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".to_string(),
12-
arch: "aarch64".to_string(),
11+
data_layout: "E-m:e-p:32:32-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
12+
arch: "aarch64".into(),
1313
options: TargetOptions {
14-
abi: "ilp32".to_string(),
15-
features: "+outline-atomics".to_string(),
16-
mcount: "\u{1}_mcount".to_string(),
14+
abi: "ilp32".into(),
15+
features: "+outline-atomics".into(),
16+
mcount: "\u{1}_mcount".into(),
1717
endian: Endian::Big,
1818
..base
1919
},

0 commit comments

Comments
 (0)