Skip to content

Commit d04ca00

Browse files
committedSep 16, 2020
Remove unnecessary clone()s in bootstrap
The performance difference is negligible, but it makes me feel better. Note that this does not remove some clones in `config`, because it would require changing the logic around (and performance doesn't matter for bootstrap).
1 parent 5fae569 commit d04ca00

File tree

4 files changed

+39
-40
lines changed

4 files changed

+39
-40
lines changed
 

‎src/bootstrap/builder.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1209,7 +1209,7 @@ impl<'a> Builder<'a> {
12091209
cargo.env(format!("CC_{}", target.triple), &cc);
12101210

12111211
let cflags = self.cflags(target, GitRepo::Rustc).join(" ");
1212-
cargo.env(format!("CFLAGS_{}", target.triple), cflags.clone());
1212+
cargo.env(format!("CFLAGS_{}", target.triple), &cflags);
12131213

12141214
if let Some(ar) = self.ar(target) {
12151215
let ranlib = format!("{} s", ar.display());

‎src/bootstrap/config.rs

+33-32
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,7 @@ impl Config {
500500

501501
pub fn parse(args: &[String]) -> Config {
502502
let flags = Flags::parse(&args);
503+
503504
let mut config = Config::default_opts();
504505
config.exclude = flags.exclude;
505506
config.rustc_error_format = flags.rustc_error_format;
@@ -551,14 +552,14 @@ impl Config {
551552
let has_targets = build.target.is_some() || flags.target.is_some();
552553
config.skip_only_host_steps = !has_hosts && has_targets;
553554

554-
config.hosts = if let Some(arg_host) = flags.host.clone() {
555+
config.hosts = if let Some(arg_host) = flags.host {
555556
arg_host
556557
} else if let Some(file_host) = build.host {
557558
file_host.iter().map(|h| TargetSelection::from_user(h)).collect()
558559
} else {
559560
vec![config.build]
560561
};
561-
config.targets = if let Some(arg_target) = flags.target.clone() {
562+
config.targets = if let Some(arg_target) = flags.target {
562563
arg_target
563564
} else if let Some(file_target) = build.target {
564565
file_target.iter().map(|h| TargetSelection::from_user(h)).collect()
@@ -628,14 +629,14 @@ impl Config {
628629

629630
config.verbose = cmp::max(config.verbose, flags.verbose);
630631

631-
if let Some(ref install) = toml.install {
632-
config.prefix = install.prefix.clone().map(PathBuf::from);
633-
config.sysconfdir = install.sysconfdir.clone().map(PathBuf::from);
634-
config.datadir = install.datadir.clone().map(PathBuf::from);
635-
config.docdir = install.docdir.clone().map(PathBuf::from);
636-
set(&mut config.bindir, install.bindir.clone().map(PathBuf::from));
637-
config.libdir = install.libdir.clone().map(PathBuf::from);
638-
config.mandir = install.mandir.clone().map(PathBuf::from);
632+
if let Some(install) = toml.install {
633+
config.prefix = install.prefix.map(PathBuf::from);
634+
config.sysconfdir = install.sysconfdir.map(PathBuf::from);
635+
config.datadir = install.datadir.map(PathBuf::from);
636+
config.docdir = install.docdir.map(PathBuf::from);
637+
set(&mut config.bindir, install.bindir.map(PathBuf::from));
638+
config.libdir = install.libdir.map(PathBuf::from);
639+
config.mandir = install.mandir.map(PathBuf::from);
639640
}
640641

641642
// We want the llvm-skip-rebuild flag to take precedence over the
@@ -658,7 +659,7 @@ impl Config {
658659
let mut optimize = None;
659660
let mut ignore_git = None;
660661

661-
if let Some(ref llvm) = toml.llvm {
662+
if let Some(llvm) = toml.llvm {
662663
match llvm.ccache {
663664
Some(StringOrBool::String(ref s)) => config.ccache = Some(s.to_string()),
664665
Some(StringOrBool::Bool(true)) => {
@@ -726,7 +727,7 @@ impl Config {
726727
}
727728
}
728729

729-
if let Some(ref rust) = toml.rust {
730+
if let Some(rust) = toml.rust {
730731
debug = rust.debug;
731732
debug_assertions = rust.debug_assertions;
732733
debug_assertions_std = rust.debug_assertions_std;
@@ -746,7 +747,7 @@ impl Config {
746747
set(&mut config.test_compare_mode, rust.test_compare_mode);
747748
set(&mut config.llvm_libunwind, rust.llvm_libunwind);
748749
set(&mut config.backtrace, rust.backtrace);
749-
set(&mut config.channel, rust.channel.clone());
750+
set(&mut config.channel, rust.channel);
750751
set(&mut config.rust_dist_src, rust.dist_src);
751752
set(&mut config.verbose_tests, rust.verbose_tests);
752753
// in the case "false" is set explicitly, do not overwrite the command line args
@@ -757,9 +758,9 @@ impl Config {
757758
set(&mut config.lld_enabled, rust.lld);
758759
set(&mut config.llvm_tools_enabled, rust.llvm_tools);
759760
config.rustc_parallel = rust.parallel_compiler.unwrap_or(false);
760-
config.rustc_default_linker = rust.default_linker.clone();
761-
config.musl_root = rust.musl_root.clone().map(PathBuf::from);
762-
config.save_toolstates = rust.save_toolstates.clone().map(PathBuf::from);
761+
config.rustc_default_linker = rust.default_linker;
762+
config.musl_root = rust.musl_root.map(PathBuf::from);
763+
config.save_toolstates = rust.save_toolstates.map(PathBuf::from);
763764
set(&mut config.deny_warnings, flags.deny_warnings.or(rust.deny_warnings));
764765
set(&mut config.backtrace_on_ice, rust.backtrace_on_ice);
765766
set(&mut config.rust_verify_llvm_ir, rust.verify_llvm_ir);
@@ -776,9 +777,9 @@ impl Config {
776777
config.rust_codegen_units_std = rust.codegen_units_std.map(threads_from_config);
777778
}
778779

779-
if let Some(ref t) = toml.target {
780+
if let Some(t) = toml.target {
780781
for (triple, cfg) in t {
781-
let mut target = Target::from_triple(triple);
782+
let mut target = Target::from_triple(&triple);
782783

783784
if let Some(ref s) = cfg.llvm_config {
784785
target.llvm_config = Some(config.src.join(s));
@@ -792,18 +793,18 @@ impl Config {
792793
if let Some(s) = cfg.no_std {
793794
target.no_std = s;
794795
}
795-
target.cc = cfg.cc.clone().map(PathBuf::from);
796-
target.cxx = cfg.cxx.clone().map(PathBuf::from);
797-
target.ar = cfg.ar.clone().map(PathBuf::from);
798-
target.ranlib = cfg.ranlib.clone().map(PathBuf::from);
799-
target.linker = cfg.linker.clone().map(PathBuf::from);
796+
target.cc = cfg.cc.map(PathBuf::from);
797+
target.cxx = cfg.cxx.map(PathBuf::from);
798+
target.ar = cfg.ar.map(PathBuf::from);
799+
target.ranlib = cfg.ranlib.map(PathBuf::from);
800+
target.linker = cfg.linker.map(PathBuf::from);
800801
target.crt_static = cfg.crt_static;
801-
target.musl_root = cfg.musl_root.clone().map(PathBuf::from);
802-
target.musl_libdir = cfg.musl_libdir.clone().map(PathBuf::from);
803-
target.wasi_root = cfg.wasi_root.clone().map(PathBuf::from);
804-
target.qemu_rootfs = cfg.qemu_rootfs.clone().map(PathBuf::from);
802+
target.musl_root = cfg.musl_root.map(PathBuf::from);
803+
target.musl_libdir = cfg.musl_libdir.map(PathBuf::from);
804+
target.wasi_root = cfg.wasi_root.map(PathBuf::from);
805+
target.qemu_rootfs = cfg.qemu_rootfs.map(PathBuf::from);
805806

806-
config.target_config.insert(TargetSelection::from_user(triple), target);
807+
config.target_config.insert(TargetSelection::from_user(&triple), target);
807808
}
808809
}
809810

@@ -821,10 +822,10 @@ impl Config {
821822
build_target.llvm_filecheck = Some(ci_llvm_bin.join(exe("FileCheck", config.build)));
822823
}
823824

824-
if let Some(ref t) = toml.dist {
825-
config.dist_sign_folder = t.sign_folder.clone().map(PathBuf::from);
826-
config.dist_gpg_password_file = t.gpg_password_file.clone().map(PathBuf::from);
827-
config.dist_upload_addr = t.upload_addr.clone();
825+
if let Some(t) = toml.dist {
826+
config.dist_sign_folder = t.sign_folder.map(PathBuf::from);
827+
config.dist_gpg_password_file = t.gpg_password_file.map(PathBuf::from);
828+
config.dist_upload_addr = t.upload_addr;
828829
set(&mut config.rust_dist_src, t.src_tarball);
829830
set(&mut config.missing_tools, t.missing_tools);
830831
}

‎src/bootstrap/format.rs

+3-5
Original file line numberDiff line numberDiff line change
@@ -105,15 +105,13 @@ pub fn format(build: &Build, check: bool) {
105105
eprintln!("./x.py fmt is not supported on this channel");
106106
std::process::exit(1);
107107
});
108-
let src = build.src.clone();
109-
let walker = WalkBuilder::new(&build.src).types(matcher).overrides(ignore_fmt).build_parallel();
108+
let src = &build.src;
109+
let walker = WalkBuilder::new(src).types(matcher).overrides(ignore_fmt).build_parallel();
110110
walker.run(|| {
111-
let src = src.clone();
112-
let rustfmt_path = rustfmt_path.clone();
113111
Box::new(move |entry| {
114112
let entry = t!(entry);
115113
if entry.file_type().map_or(false, |t| t.is_file()) {
116-
rustfmt(&src, &rustfmt_path, &entry.path(), check);
114+
rustfmt(src, &rustfmt_path, &entry.path(), check);
117115
}
118116
ignore::WalkState::Continue
119117
})

‎src/bootstrap/sanity.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ impl Finder {
3030
Self { cache: HashMap::new(), path: env::var_os("PATH").unwrap_or_default() }
3131
}
3232

33-
pub fn maybe_have<S: AsRef<OsStr>>(&mut self, cmd: S) -> Option<PathBuf> {
34-
let cmd: OsString = cmd.as_ref().into();
33+
pub fn maybe_have<S: Into<OsString>>(&mut self, cmd: S) -> Option<PathBuf> {
34+
let cmd: OsString = cmd.into();
3535
let path = &self.path;
3636
self.cache
3737
.entry(cmd.clone())

0 commit comments

Comments
 (0)