Auto merge of #84794 - ChrisDenton:dedup-native-libs, r=petrochenkov

Deduplicate native libs before they are passed to the linker

Stop spamming the linker with the same native library over and over again, if they directly follow from each other. This would help prevent [this situation](https://github.com/MSxDOS/ntapi/issues/2).

Issue #38460 has been open since 2016 so I think it's worth making an incomplete fix that at least addresses the most common symptom and without otherwise changing how Rust handles native libs. This PR is intended to be easy to revert (if necessary) when a more permanent fix is implemented.
This commit is contained in:
bors 2021-05-05 03:56:26 +00:00
commit 2d11e25794

View File

@ -1803,7 +1803,11 @@ fn add_local_native_libraries(
codegen_results.crate_info.used_libraries.iter().filter(|l| relevant_lib(sess, l));
let search_path = archive_search_paths(sess);
let mut last = (NativeLibKind::Unspecified, None);
for lib in relevant_libs {
// Skip if this library is the same as the last.
last = if (lib.kind, lib.name) == last { continue } else { (lib.kind, lib.name) };
let name = match lib.name {
Some(l) => l,
None => continue,
@ -2127,8 +2131,12 @@ fn add_upstream_native_libraries(
.expect("failed to find crate type in dependency format list");
let crates = &codegen_results.crate_info.used_crates_static;
let mut last = (NativeLibKind::Unspecified, None);
for &(cnum, _) in crates {
for lib in codegen_results.crate_info.native_libraries[&cnum].iter() {
// Skip if this library is the same as the last.
last = if (lib.kind, lib.name) == last { continue } else { (lib.kind, lib.name) };
let name = match lib.name {
Some(l) => l,
None => continue,