Description
Hi!
A person on Reddit posted a strange build error when ThinLTO is enabled. I performed additional build tests in different configurations and I can confirm the error on current Rustc compilers (see the versions below). My environment is Fedora 41 + AMD Ryzen 5900x (x86-64). The test project is https://github.com/anza-xyz/agave on the master
branch with 144925eda5eba98ef28a47a659be68b93211cdb2
. The test command is cargo +stable test --profile release-with-debug
/cargo +nightly test --profile release-with-debug
.
The original report is when ThinLTO is enabled, some binaries fail to be built with the duplicate split compilation unit
error. I performed the build in multiple configurations and here are my results:
Build ok:
[profile.release-with-debug]
inherits = "release"
debug = true
#split-debuginfo = "packed"
lto = "thin"
Build ok:
[profile.release-with-debug]
inherits = "release"
debug = true
split-debuginfo = "packed"
#lto = "thin"
Build ok:
[profile.release-with-debug]
inherits = "release"
debug = true
split-debuginfo = "packed"
lto = "fat"
Build ok:
[profile.release-with-debug]
inherits = "release"
debug = true
split-debuginfo = "unpacked"
lto = "thin"
Build fails:
[profile.release-with-debug]
inherits = "release"
debug = true
split-debuginfo = "packed"
lto = "thin"
Build fails:
[profile.release-with-debug]
inherits = "release"
debug = true
split-debuginfo = "packed"
lto = "thin"
codegen-units = 1
According to the tests, the buggy is only the combination of ThinLTO and split-debuginfo = "packed"
. Disabling one of these options or enabling Fat LTO instead of ThinLTO resolves the issue.
I expected to see this happen: the build with lto = "thin"
+ split-debuginfo = "packed"
is successful
Instead, this happened: the build fails with the duplicate split compilation unit
error
Meta
The issue is reproduced on both Rustc versions: stable and current nightly
rustc --version --verbose
:
rustc 1.82.0 (f6e511eec 2024-10-15)
binary: rustc
commit-hash: f6e511eec7342f59a25f7c0534f1dbea00d01b14
commit-date: 2024-10-15
host: x86_64-unknown-linux-gnu
release: 1.82.0
LLVM version: 19.1.1
rustc +nightly --version --verbose
rustc 1.84.0-nightly (fbab78289 2024-11-04)
binary: rustc
commit-hash: fbab78289dd8c6e8860034e0048cfb538f217700
commit-date: 2024-11-04
host: x86_64-unknown-linux-gnu
release: 1.84.0-nightly
LLVM version: 19.1.3
Providing RUST_BACKTRACE=1
doesn't give more information so no backtraces here.