summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_codegen_ssa/src/back
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-07 05:48:48 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-07 05:48:48 +0000
commitef24de24a82fe681581cc130f342363c47c0969a (patch)
tree0d494f7e1a38b95c92426f58fe6eaa877303a86c /compiler/rustc_codegen_ssa/src/back
parentReleasing progress-linux version 1.74.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-ef24de24a82fe681581cc130f342363c47c0969a.tar.xz
rustc-ef24de24a82fe681581cc130f342363c47c0969a.zip
Merging upstream version 1.75.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'compiler/rustc_codegen_ssa/src/back')
-rw-r--r--compiler/rustc_codegen_ssa/src/back/link.rs209
-rw-r--r--compiler/rustc_codegen_ssa/src/back/linker.rs9
-rw-r--r--compiler/rustc_codegen_ssa/src/back/metadata.rs29
-rw-r--r--compiler/rustc_codegen_ssa/src/back/rpath.rs14
-rw-r--r--compiler/rustc_codegen_ssa/src/back/write.rs6
5 files changed, 161 insertions, 106 deletions
diff --git a/compiler/rustc_codegen_ssa/src/back/link.rs b/compiler/rustc_codegen_ssa/src/back/link.rs
index c4a0f6291..dd9d277fb 100644
--- a/compiler/rustc_codegen_ssa/src/back/link.rs
+++ b/compiler/rustc_codegen_ssa/src/back/link.rs
@@ -22,7 +22,9 @@ use rustc_session::utils::NativeLibKind;
/// need out of the shared crate context before we get rid of it.
use rustc_session::{filesearch, Session};
use rustc_span::symbol::Symbol;
-use rustc_target::spec::crt_objects::{CrtObjects, LinkSelfContainedDefault};
+use rustc_target::spec::crt_objects::CrtObjects;
+use rustc_target::spec::LinkSelfContainedComponents;
+use rustc_target::spec::LinkSelfContainedDefault;
use rustc_target::spec::{Cc, LinkOutputKind, LinkerFlavor, Lld, PanicStrategy};
use rustc_target::spec::{RelocModel, RelroLevel, SanitizerSet, SplitDebuginfo};
@@ -368,17 +370,25 @@ fn link_rlib<'a>(
let NativeLibKind::Static { bundle: None | Some(true), .. } = lib.kind else {
continue;
};
- if flavor == RlibFlavor::Normal && let Some(filename) = lib.filename {
+ if flavor == RlibFlavor::Normal
+ && let Some(filename) = lib.filename
+ {
let path = find_native_static_library(filename.as_str(), true, &lib_search_paths, sess);
- let src = read(path).map_err(|e| sess.emit_fatal(errors::ReadFileError {message: e }))?;
+ let src =
+ read(path).map_err(|e| sess.emit_fatal(errors::ReadFileError { message: e }))?;
let (data, _) = create_wrapper_file(sess, b".bundled_lib".to_vec(), &src);
let wrapper_file = emit_wrapper_file(sess, &data, tmpdir, filename.as_str());
packed_bundled_libs.push(wrapper_file);
} else {
- let path =
- find_native_static_library(lib.name.as_str(), lib.verbatim, &lib_search_paths, sess);
+ let path = find_native_static_library(
+ lib.name.as_str(),
+ lib.verbatim,
+ &lib_search_paths,
+ sess,
+ );
ab.add_archive(&path, Box::new(|_| false)).unwrap_or_else(|error| {
- sess.emit_fatal(errors::AddNativeLibrary { library_path: path, error })});
+ sess.emit_fatal(errors::AddNativeLibrary { library_path: path, error })
+ });
}
}
@@ -720,6 +730,7 @@ fn link_natively<'a>(
) -> Result<(), ErrorGuaranteed> {
info!("preparing {:?} to {:?}", crate_type, out_filename);
let (linker_path, flavor) = linker_and_flavor(sess);
+ let self_contained_components = self_contained_components(sess, crate_type);
let mut cmd = linker_with_args(
&linker_path,
flavor,
@@ -729,6 +740,7 @@ fn link_natively<'a>(
tmpdir,
out_filename,
codegen_results,
+ self_contained_components,
)?;
linker::disable_localization(&mut cmd);
@@ -804,14 +816,14 @@ fn link_natively<'a>(
"Linker does not support -static-pie command line option. Retrying with -static instead."
);
// Mirror `add_(pre,post)_link_objects` to replace CRT objects.
- let self_contained = self_contained(sess, crate_type);
+ let self_contained_crt_objects = self_contained_components.is_crt_objects_enabled();
let opts = &sess.target;
- let pre_objects = if self_contained {
+ let pre_objects = if self_contained_crt_objects {
&opts.pre_link_objects_self_contained
} else {
&opts.pre_link_objects
};
- let post_objects = if self_contained {
+ let post_objects = if self_contained_crt_objects {
&opts.post_link_objects_self_contained
} else {
&opts.post_link_objects
@@ -822,7 +834,9 @@ fn link_natively<'a>(
.iter()
.copied()
.flatten()
- .map(|obj| get_object_file_path(sess, obj, self_contained).into_os_string())
+ .map(|obj| {
+ get_object_file_path(sess, obj, self_contained_crt_objects).into_os_string()
+ })
.collect::<Vec<_>>()
};
let pre_objects_static_pie = get_objects(pre_objects, LinkOutputKind::StaticPicExe);
@@ -1019,7 +1033,7 @@ fn link_natively<'a>(
SplitDebuginfo::Packed => link_dwarf_object(sess, codegen_results, out_filename),
}
- let strip = strip_value(sess);
+ let strip = sess.opts.cg.strip;
if sess.target.is_like_osx {
match (strip, crate_type) {
@@ -1056,14 +1070,6 @@ fn link_natively<'a>(
Ok(())
}
-// Temporarily support both -Z strip and -C strip
-fn strip_value(sess: &Session) -> Strip {
- match (sess.opts.unstable_opts.strip, sess.opts.cg.strip) {
- (s, Strip::None) => s,
- (_, s) => s,
- }
-}
-
fn strip_symbols_with_external_utility<'a>(
sess: &'a Session,
util: &str,
@@ -1702,26 +1708,43 @@ fn detect_self_contained_mingw(sess: &Session) -> bool {
/// Various toolchain components used during linking are used from rustc distribution
/// instead of being found somewhere on the host system.
/// We only provide such support for a very limited number of targets.
-fn self_contained(sess: &Session, crate_type: CrateType) -> bool {
- if let Some(self_contained) = sess.opts.cg.link_self_contained.explicitly_set {
- if sess.target.link_self_contained == LinkSelfContainedDefault::False {
- sess.emit_err(errors::UnsupportedLinkSelfContained);
- }
- return self_contained;
- }
+fn self_contained_components(sess: &Session, crate_type: CrateType) -> LinkSelfContainedComponents {
+ // Turn the backwards compatible bool values for `self_contained` into fully inferred
+ // `LinkSelfContainedComponents`.
+ let self_contained =
+ if let Some(self_contained) = sess.opts.cg.link_self_contained.explicitly_set {
+ // Emit an error if the user requested self-contained mode on the CLI but the target
+ // explicitly refuses it.
+ if sess.target.link_self_contained.is_disabled() {
+ sess.emit_err(errors::UnsupportedLinkSelfContained);
+ }
+ self_contained
+ } else {
+ match sess.target.link_self_contained {
+ LinkSelfContainedDefault::False => false,
+ LinkSelfContainedDefault::True => true,
+
+ LinkSelfContainedDefault::WithComponents(components) => {
+ // For target specs with explicitly enabled components, we can return them
+ // directly.
+ return components;
+ }
- match sess.target.link_self_contained {
- LinkSelfContainedDefault::False => false,
- LinkSelfContainedDefault::True => true,
- // FIXME: Find a better heuristic for "native musl toolchain is available",
- // based on host and linker path, for example.
- // (https://github.com/rust-lang/rust/pull/71769#issuecomment-626330237).
- LinkSelfContainedDefault::Musl => sess.crt_static(Some(crate_type)),
- LinkSelfContainedDefault::Mingw => {
- sess.host == sess.target
- && sess.target.vendor != "uwp"
- && detect_self_contained_mingw(&sess)
- }
+ // FIXME: Find a better heuristic for "native musl toolchain is available",
+ // based on host and linker path, for example.
+ // (https://github.com/rust-lang/rust/pull/71769#issuecomment-626330237).
+ LinkSelfContainedDefault::InferredForMusl => sess.crt_static(Some(crate_type)),
+ LinkSelfContainedDefault::InferredForMingw => {
+ sess.host == sess.target
+ && sess.target.vendor != "uwp"
+ && detect_self_contained_mingw(&sess)
+ }
+ }
+ };
+ if self_contained {
+ LinkSelfContainedComponents::all()
+ } else {
+ LinkSelfContainedComponents::empty()
}
}
@@ -1881,37 +1904,14 @@ fn add_linked_symbol_object(
return;
};
- // NOTE(nbdd0121): MSVC will hang if the input object file contains no sections,
- // so add an empty section.
if file.format() == object::BinaryFormat::Coff {
+ // NOTE(nbdd0121): MSVC will hang if the input object file contains no sections,
+ // so add an empty section.
file.add_section(Vec::new(), ".text".into(), object::SectionKind::Text);
// We handle the name decoration of COFF targets in `symbol_export.rs`, so disable the
// default mangler in `object` crate.
file.set_mangling(object::write::Mangling::None);
-
- // Add feature flags to the object file. On MSVC this is optional but LLD will complain if
- // not present.
- let mut feature = 0;
-
- if file.architecture() == object::Architecture::I386 {
- // Indicate that all SEH handlers are registered in .sxdata section.
- // We don't have generate any code, so we don't need .sxdata section but LLD still
- // expects us to set this bit (see #96498).
- // Reference: https://docs.microsoft.com/en-us/windows/win32/debug/pe-format
- feature |= 1;
- }
-
- file.add_symbol(object::write::Symbol {
- name: "@feat.00".into(),
- value: feature,
- size: 0,
- kind: object::SymbolKind::Data,
- scope: object::SymbolScope::Compilation,
- weak: false,
- section: object::write::SymbolSection::Absolute,
- flags: object::SymbolFlags::None,
- });
}
for (sym, kind) in symbols.iter() {
@@ -2045,13 +2045,14 @@ fn linker_with_args<'a>(
tmpdir: &Path,
out_filename: &Path,
codegen_results: &CodegenResults,
+ self_contained_components: LinkSelfContainedComponents,
) -> Result<Command, ErrorGuaranteed> {
- let self_contained = self_contained(sess, crate_type);
+ let self_contained_crt_objects = self_contained_components.is_crt_objects_enabled();
let cmd = &mut *super::linker::get_linker(
sess,
path,
flavor,
- self_contained,
+ self_contained_components.are_any_components_enabled(),
&codegen_results.crate_info.target_cpu,
);
let link_output_kind = link_output_kind(sess, crate_type);
@@ -2078,7 +2079,7 @@ fn linker_with_args<'a>(
// ------------ Object code and libraries, order-dependent ------------
// Pre-link CRT objects.
- add_pre_link_objects(cmd, sess, flavor, link_output_kind, self_contained);
+ add_pre_link_objects(cmd, sess, flavor, link_output_kind, self_contained_crt_objects);
add_linked_symbol_object(
cmd,
@@ -2221,7 +2222,7 @@ fn linker_with_args<'a>(
cmd,
sess,
link_output_kind,
- self_contained,
+ self_contained_components,
flavor,
crate_type,
codegen_results,
@@ -2237,7 +2238,7 @@ fn linker_with_args<'a>(
// ------------ Object code and libraries, order-dependent ------------
// Post-link CRT objects.
- add_post_link_objects(cmd, sess, link_output_kind, self_contained);
+ add_post_link_objects(cmd, sess, link_output_kind, self_contained_crt_objects);
// ------------ Late order-dependent options ------------
@@ -2254,7 +2255,7 @@ fn add_order_independent_options(
cmd: &mut dyn Linker,
sess: &Session,
link_output_kind: LinkOutputKind,
- self_contained: bool,
+ self_contained_components: LinkSelfContainedComponents,
flavor: LinkerFlavor,
crate_type: CrateType,
codegen_results: &CodegenResults,
@@ -2262,7 +2263,7 @@ fn add_order_independent_options(
tmpdir: &Path,
) {
// Take care of the flavors and CLI options requesting the `lld` linker.
- add_lld_args(cmd, sess, flavor);
+ add_lld_args(cmd, sess, flavor, self_contained_components);
add_apple_sdk(cmd, sess, flavor);
@@ -2287,7 +2288,7 @@ fn add_order_independent_options(
// Make the binary compatible with data execution prevention schemes.
cmd.add_no_exec();
- if self_contained {
+ if self_contained_components.is_crt_objects_enabled() {
cmd.no_crt_objects();
}
@@ -2318,7 +2319,7 @@ fn add_order_independent_options(
cmd.linker_plugin_lto();
- add_library_search_dirs(cmd, sess, self_contained);
+ add_library_search_dirs(cmd, sess, self_contained_components.are_any_components_enabled());
cmd.output_filename(out_filename);
@@ -2361,7 +2362,7 @@ fn add_order_independent_options(
);
// Pass debuginfo, NatVis debugger visualizers and strip flags down to the linker.
- cmd.debuginfo(strip_value(sess), &natvis_visualizers);
+ cmd.debuginfo(sess.opts.cg.strip, &natvis_visualizers);
// We want to prevent the compiler from accidentally leaking in any system libraries,
// so by default we tell linkers not to link to any default libraries.
@@ -2871,6 +2872,7 @@ fn add_apple_sdk(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavor) {
}
let sdk_name = match (arch.as_ref(), os.as_ref()) {
+ ("aarch64", "tvos") if llvm_target.ends_with("-simulator") => "appletvsimulator",
("aarch64", "tvos") => "appletvos",
("x86_64", "tvos") => "appletvsimulator",
("arm", "ios") => "iphoneos",
@@ -2964,31 +2966,54 @@ fn get_apple_sdk_root(sdk_name: &str) -> Result<String, errors::AppleSdkRootErro
}
}
-/// When using the linker flavors opting in to `lld`, or the unstable `-Zgcc-ld=lld` flag, add the
-/// necessary paths and arguments to invoke it:
+/// When using the linker flavors opting in to `lld`, add the necessary paths and arguments to
+/// invoke it:
/// - when the self-contained linker flag is active: the build of `lld` distributed with rustc,
/// - or any `lld` available to `cc`.
-fn add_lld_args(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavor) {
- let unstable_use_lld = sess.opts.unstable_opts.gcc_ld.is_some();
- debug!("add_lld_args requested, flavor: '{flavor:?}', `-Zgcc-ld=lld`: {unstable_use_lld}");
-
- // Sanity check: using the old unstable `-Zgcc-ld=lld` option requires a `cc`-using flavor.
- let flavor_uses_cc = flavor.uses_cc();
- if unstable_use_lld && !flavor_uses_cc {
- sess.emit_fatal(errors::OptionGccOnly);
- }
+fn add_lld_args(
+ cmd: &mut dyn Linker,
+ sess: &Session,
+ flavor: LinkerFlavor,
+ self_contained_components: LinkSelfContainedComponents,
+) {
+ debug!(
+ "add_lld_args requested, flavor: '{:?}', target self-contained components: {:?}",
+ flavor, self_contained_components,
+ );
// If the flavor doesn't use a C/C++ compiler to invoke the linker, or doesn't opt in to `lld`,
// we don't need to do anything.
- let use_lld = flavor.uses_lld() || unstable_use_lld;
- if !flavor_uses_cc || !use_lld {
+ if !(flavor.uses_cc() && flavor.uses_lld()) {
return;
}
// 1. Implement the "self-contained" part of this feature by adding rustc distribution
- // directories to the tool's search path.
- let self_contained_linker = sess.opts.cg.link_self_contained.linker() || unstable_use_lld;
- if self_contained_linker {
+ // directories to the tool's search path, depending on a mix between what users can specify on
+ // the CLI, and what the target spec enables (as it can't disable components):
+ // - if the self-contained linker is enabled on the CLI or by the target spec,
+ // - and if the self-contained linker is not disabled on the CLI.
+ let self_contained_cli = sess.opts.cg.link_self_contained.is_linker_enabled();
+ let self_contained_target = self_contained_components.is_linker_enabled();
+
+ // FIXME: in the future, codegen backends may need to have more control over this process: they
+ // don't always support all the features the linker expects here, and vice versa. For example,
+ // at the time of writing this, lld expects a newer style of aarch64 TLS relocations that
+ // cranelift doesn't implement yet. That in turn can impact whether linking would succeed on
+ // such a target when using the `cg_clif` backend and lld.
+ //
+ // Until interactions between backends and linker features are expressible, we limit target
+ // specs to opt-in to lld only when we're on the llvm backend, where it's expected to work and
+ // tested on CI. As usual, the CLI still has precedence over this, so that users and developers
+ // can still override this default when needed (e.g. for tests).
+ let uses_llvm_backend =
+ matches!(sess.opts.unstable_opts.codegen_backend.as_deref(), None | Some("llvm"));
+ if !uses_llvm_backend && !self_contained_cli && sess.opts.cg.linker_flavor.is_none() {
+ // We bail if we're not using llvm and lld was not explicitly requested on the CLI.
+ return;
+ }
+
+ let self_contained_linker = self_contained_cli || self_contained_target;
+ if self_contained_linker && !sess.opts.cg.link_self_contained.is_linker_disabled() {
for path in sess.get_tools_search_paths(false) {
cmd.arg({
let mut arg = OsString::from("-B");
@@ -2999,7 +3024,7 @@ fn add_lld_args(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavor) {
}
// 2. Implement the "linker flavor" part of this feature by asking `cc` to use some kind of
- // `lld` as the linker.
+ // `lld` as the linker.
cmd.arg("-fuse-ld=lld");
if !flavor.is_gnu() {
@@ -3012,13 +3037,13 @@ fn add_lld_args(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavor) {
// shown in issue #101653 and the discussion in PR #101792.
//
// It could be required in some cases of cross-compiling with
- // `-Zgcc-ld=lld`, but this is generally unspecified, and we don't know
+ // LLD, but this is generally unspecified, and we don't know
// which specific versions of clang, macOS SDK, host and target OS
// combinations impact us here.
//
// So we do a simple first-approximation until we know more of what the
// Apple targets require (and which would be handled prior to hitting this
- // `-Zgcc-ld=lld` codepath anyway), but the expectation is that until then
+ // LLD codepath anyway), but the expectation is that until then
// this should be manually passed if needed. We specify the target when
// targeting a different linker flavor on macOS, and that's also always
// the case when targeting WASM.
diff --git a/compiler/rustc_codegen_ssa/src/back/linker.rs b/compiler/rustc_codegen_ssa/src/back/linker.rs
index 11afe0fbc..09434513e 100644
--- a/compiler/rustc_codegen_ssa/src/back/linker.rs
+++ b/compiler/rustc_codegen_ssa/src/back/linker.rs
@@ -626,6 +626,15 @@ impl<'a> Linker for GccLinker<'a> {
self.linker_arg("--strip-all");
}
}
+ match self.sess.opts.unstable_opts.debuginfo_compression {
+ config::DebugInfoCompression::None => {}
+ config::DebugInfoCompression::Zlib => {
+ self.linker_arg("--compress-debug-sections=zlib");
+ }
+ config::DebugInfoCompression::Zstd => {
+ self.linker_arg("--compress-debug-sections=zstd");
+ }
+ }
}
fn no_crt_objects(&mut self) {
diff --git a/compiler/rustc_codegen_ssa/src/back/metadata.rs b/compiler/rustc_codegen_ssa/src/back/metadata.rs
index c6f4bd35e..cb60ed729 100644
--- a/compiler/rustc_codegen_ssa/src/back/metadata.rs
+++ b/compiler/rustc_codegen_ssa/src/back/metadata.rs
@@ -228,6 +228,35 @@ pub(crate) fn create_object_file(sess: &Session) -> Option<write::Object<'static
if sess.target.is_like_osx {
file.set_macho_build_version(macho_object_build_version_for_target(&sess.target))
}
+ if binary_format == BinaryFormat::Coff {
+ // Disable the default mangler to avoid mangling the special "@feat.00" symbol name.
+ let original_mangling = file.mangling();
+ file.set_mangling(object::write::Mangling::None);
+
+ let mut feature = 0;
+
+ if file.architecture() == object::Architecture::I386 {
+ // When linking with /SAFESEH on x86, lld requires that all linker inputs be marked as
+ // safe exception handling compatible. Metadata files masquerade as regular COFF
+ // objects and are treated as linker inputs, despite containing no actual code. Thus,
+ // they still need to be marked as safe exception handling compatible. See #96498.
+ // Reference: https://docs.microsoft.com/en-us/windows/win32/debug/pe-format
+ feature |= 1;
+ }
+
+ file.add_symbol(object::write::Symbol {
+ name: "@feat.00".into(),
+ value: feature,
+ size: 0,
+ kind: object::SymbolKind::Data,
+ scope: object::SymbolScope::Compilation,
+ weak: false,
+ section: object::write::SymbolSection::Absolute,
+ flags: object::SymbolFlags::None,
+ });
+
+ file.set_mangling(original_mangling);
+ }
let e_flags = match architecture {
Architecture::Mips => {
let arch = match sess.target.options.cpu.as_ref() {
diff --git a/compiler/rustc_codegen_ssa/src/back/rpath.rs b/compiler/rustc_codegen_ssa/src/back/rpath.rs
index ebf04e7a3..603462286 100644
--- a/compiler/rustc_codegen_ssa/src/back/rpath.rs
+++ b/compiler/rustc_codegen_ssa/src/back/rpath.rs
@@ -1,8 +1,7 @@
use pathdiff::diff_paths;
use rustc_data_structures::fx::FxHashSet;
-use std::env;
+use rustc_fs_util::try_canonicalize;
use std::ffi::OsString;
-use std::fs;
use std::path::{Path, PathBuf};
pub struct RPathConfig<'a> {
@@ -82,12 +81,11 @@ fn get_rpath_relative_to_output(config: &mut RPathConfig<'_>, lib: &Path) -> OsS
// Mac doesn't appear to support $ORIGIN
let prefix = if config.is_like_osx { "@loader_path" } else { "$ORIGIN" };
- let cwd = env::current_dir().unwrap();
- let mut lib = fs::canonicalize(&cwd.join(lib)).unwrap_or_else(|_| cwd.join(lib));
- lib.pop(); // strip filename
- let mut output = cwd.join(&config.out_filename);
- output.pop(); // strip filename
- let output = fs::canonicalize(&output).unwrap_or(output);
+ // Strip filenames
+ let lib = lib.parent().unwrap();
+ let output = config.out_filename.parent().unwrap();
+ let lib = try_canonicalize(lib).unwrap();
+ let output = try_canonicalize(output).unwrap();
let relative = path_relative_from(&lib, &output)
.unwrap_or_else(|| panic!("couldn't create relative path from {output:?} to {lib:?}"));
diff --git a/compiler/rustc_codegen_ssa/src/back/write.rs b/compiler/rustc_codegen_ssa/src/back/write.rs
index f192747c8..3d6a21243 100644
--- a/compiler/rustc_codegen_ssa/src/back/write.rs
+++ b/compiler/rustc_codegen_ssa/src/back/write.rs
@@ -26,7 +26,6 @@ use rustc_metadata::EncodedMetadata;
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
use rustc_middle::middle::exported_symbols::SymbolExportInfo;
use rustc_middle::ty::TyCtxt;
-use rustc_session::cgu_reuse_tracker::CguReuseTracker;
use rustc_session::config::{self, CrateType, Lto, OutFileName, OutputFilenames, OutputType};
use rustc_session::config::{Passes, SwitchWithOptPath};
use rustc_session::Session;
@@ -366,8 +365,6 @@ pub struct CodegenContext<B: WriteBackendMethods> {
/// The incremental compilation session directory, or None if we are not
/// compiling incrementally
pub incr_comp_session_dir: Option<PathBuf>,
- /// Used to update CGU re-use information during the thinlto phase.
- pub cgu_reuse_tracker: CguReuseTracker,
/// Channel back to the main control thread to send messages to
pub coordinator_send: Sender<Box<dyn Any + Send>>,
}
@@ -1119,7 +1116,6 @@ fn start_executing_work<B: ExtraBackendMethods>(
remark: sess.opts.cg.remark.clone(),
remark_dir,
incr_comp_session_dir: sess.incr_comp_session_dir_opt().map(|r| r.clone()),
- cgu_reuse_tracker: sess.cgu_reuse_tracker.clone(),
coordinator_send,
expanded_args: tcx.sess.expanded_args.clone(),
diag_emitter: shared_emitter.clone(),
@@ -1969,8 +1965,6 @@ impl<B: ExtraBackendMethods> OngoingCodegen<B> {
}
});
- sess.cgu_reuse_tracker.check_expected_reuse(sess);
-
sess.abort_if_errors();
let work_products =