Skip to content

Regression: lto = true in build.rs causes cargo test --release --doc to fail to link #8654

Closed
@briansmith

Description

@briansmith

This regression occurs in the beta:

Problem

cargo test --doc --release fails with linker error "fatal error LNK1107: invalid or corrupt file: cannot read at 0xD2A" on Windows using MSVC 2019 when lto = true is in the release build profile, in the beta and nightly channels. cargo test --doc (non-release builds) succeeds. cargo test --doc --release succeeds in the current stable release, cargo 1.45.1 (f242df6ed 2020-07-22).

Cargo.toml:

[package]
name = "lto-rustdoc"
version = "0.1.0"
edition = "2018"

[profile.release]
opt-level = 3
lto = true

src/lib.rs:

/// ```
/// lto_rustdoc::foo();
/// ```
pub fn foo() {}

The failures do not occur when the current stable cargo is used.

Possible Solution(s)

I suspect that PR #8192 or one of the follow-ups such as PR #8349 caused this regression.

Notes

$ cargo +beta version
cargo 1.47.0-beta (51b66125b 2020-08-19)

This also occurs in Nightly. It has been occurring in nightly for several weeks, and in the last few weeks it has occurred in Beta. Thus, the regression most likely happened before the last promotion of Nightly to Beta.

I used Process Monitor to capture the command lines for Cargo 1.45.1:

"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.27.29110\bin\HostX64\x64\link.exe"
/NOLOGO
/NXCOMPAT
/LIBPATH:C:\Users\b\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib
C:\Users\b\AppData\Local\Temp\rustdoctestiHYAmZ\rust_out.rust_out.7rcbfp3g-cgu.0.rcgu.o
/OUT:C:\Users\b\AppData\Local\Temp\rustdoctestiHYAmZ\rust_out
C:\Users\b\AppData\Local\Temp\rustdoctestiHYAmZ\rust_out.33dyzt1ekirinwy8.rcgu.o
/OPT:REF,NOICF
/DEBUG
/NATVIS:C:\Users\b\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\etc\intrinsic.natvis
/NATVIS:C:\Users\b\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\etc\liballoc.natvis
/NATVIS:C:\Users\b\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\etc\libcore.natvis
/NATVIS:C:\Users\b\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\etc\libstd.natvis
/LIBPATH:P:\testcases\lto-rustdoc\target\release\deps
/LIBPATH:P:\testcases\lto-rustdoc\target\release\deps
/LIBPATH:C:\Users\b\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib
P:\testcases\lto-rustdoc\target\release\deps\liblto_rustdoc-5744db2bc717fc58.rlib
C:\Users\b\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libstd-098718ea823008f4.rlib
C:\Users\b\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libpanic_unwind-6a7fb52d1138932f.rlib
C:\Users\b\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libhashbrown-6a663e98da9bc9d7.rlib
C:\Users\b\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\librustc_std_workspace_alloc-35acfeb1bd722cd7.rlib
C:\Users\b\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libbacktrace-5789469546c93c74.rlib
C:\Users\b\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\librustc_demangle-6b40c36b7a5ce598.rlib
C:\Users\b\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libunwind-ce5287493729af9a.rlib
C:\Users\b\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libcfg_if-3d66b8897882cc1e.rlib
C:\Users\b\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\liblibc-2f1bb63f49853f4b.rlib
C:\Users\b\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\liballoc-e769bcc0ed78b3c4.rlib
C:\Users\b\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\librustc_std_workspace_core-2182f71ae05a8995.rlib
C:\Users\b\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libcore-77514af2604d16ea.rlib
C:\Users\b\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libcompiler_builtins-ebafcb87dc3d8679.rlib
advapi32.lib
ws2_32.lib
userenv.lib
msvcrt.lib

and the current beta:

"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.27.29110\bin\HostX64\x64\link.exe"
/NOLOGO
/NXCOMPAT
/LIBPATH:C:\Users\b\.rustup\toolchains\beta-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib
C:\Users\b\AppData\Local\Temp\rustdoctestNeUiEv\rust_out.rust_out.7rcbfp3g-cgu.0.rcgu.o
/OUT:C:\Users\b\AppData\Local\Temp\rustdoctestNeUiEv\rust_out
C:\Users\b\AppData\Local\Temp\rustdoctestNeUiEv\rust_out.33dyzt1ekirinwy8.rcgu.o
/OPT:REF,NOICF
/DEBUG
/NATVIS:C:\Users\b\.rustup\toolchains\beta-x86_64-pc-windows-msvc\lib\rustlib\etc\intrinsic.natvis
/NATVIS:C:\Users\b\.rustup\toolchains\beta-x86_64-pc-windows-msvc\lib\rustlib\etc\liballoc.natvis
/NATVIS:C:\Users\b\.rustup\toolchains\beta-x86_64-pc-windows-msvc\lib\rustlib\etc\libcore.natvis
/NATVIS:C:\Users\b\.rustup\toolchains\beta-x86_64-pc-windows-msvc\lib\rustlib\etc\libstd.natvis
/LIBPATH:P:\testcases\lto-rustdoc\target\release\deps
/LIBPATH:P:\testcases\lto-rustdoc\target\release\deps
/LIBPATH:C:\Users\b\.rustup\toolchains\beta-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib
P:\testcases\lto-rustdoc\target\release\deps\liblto_rustdoc-c5f7efb3b772d87e.rlib
C:\Users\b\.rustup\toolchains\beta-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libstd-f5b401742159082b.rlib
C:\Users\b\.rustup\toolchains\beta-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libpanic_unwind-e179a42e3654f4e1.rlib
C:\Users\b\.rustup\toolchains\beta-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\librustc_demangle-6606b5facb12279a.rlib
C:\Users\b\.rustup\toolchains\beta-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libhashbrown-1a0e7b07a7e9bb53.rlib
C:\Users\b\.rustup\toolchains\beta-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\librustc_std_workspace_alloc-9aeb694399775ad0.rlib
C:\Users\b\.rustup\toolchains\beta-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libunwind-4fc2d77659a37b5c.rlib
C:\Users\b\.rustup\toolchains\beta-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libcfg_if-8e0f5ece44f1eaea.rlib
C:\Users\b\.rustup\toolchains\beta-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\liblibc-fad582f67483dcdf.rlib
C:\Users\b\.rustup\toolchains\beta-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\liballoc-0f8a186f598b0388.rlib
C:\Users\b\.rustup\toolchains\beta-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\librustc_std_workspace_core-ec163dda744bc8b6.rlib
C:\Users\b\.rustup\toolchains\beta-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libcore-6d2170587abafa35.rlib
C:\Users\b\.rustup\toolchains\beta-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libcompiler_builtins-e07801ab81cac207.rlib
advapi32.lib
ws2_32.lib
userenv.lib
msvcrt.lib

The command lines seem to be the same.

Metadata

Metadata

Assignees

Labels

A-ltoArea: link-time optimizationC-bugCategory: bugregression-from-stable-to-stableRegression in stable that worked in a previous stable release.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions