Skip to content

Debug builds of compiler_builtins fail to link due to references to precondition_check in libcore  #121552

@Amanieu

Description

@Amanieu

Likely caused by #120594. cc @saethlin

CI for compiler_builtins is failing with:

error: linking with `link.exe` failed: exit code: 1120
  |
  = note: "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Tools\\MSVC\\14.38.33130\\bin\\HostX64\\x64\\link.exe" "/NOLOGO" "C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\rustccNjGuE\\symbols.o" "D:\\a\\compiler-builtins\\compiler-builtins\\target\\x86_64-pc-windows-msvc\\debug\\examples\\intrinsics.intrinsics.94b4869361004a03-cgu.0.rcgu.o" "/LIBPATH:D:\\a\\compiler-builtins\\compiler-builtins\\target\\x86_64-pc-windows-msvc\\debug\\deps" "/LIBPATH:D:\\a\\compiler-builtins\\compiler-builtins\\target\\debug\\deps" "/LIBPATH:C:\\Users\\runneradmin\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib" "kernel32.lib" "msvcrt.lib" "D:\\a\\compiler-builtins\\compiler-builtins\\target\\x86_64-pc-windows-msvc\\debug\\deps\\libcompiler_builtins-b84df12ffea9ddc5.rlib" "/NXCOMPAT" "/LIBPATH:C:\\Users\\runneradmin\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib" "/OUT:D:\\a\\compiler-builtins\\compiler-builtins\\target\\x86_64-pc-windows-msvc\\debug\\examples\\intrinsics.exe" "/OPT:REF,NOICF" "/DEBUG" "/NATVIS:C:\\Users\\runneradmin\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\intrinsic.natvis" "/NATVIS:C:\\Users\\runneradmin\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\liballoc.natvis" "/NATVIS:C:\\Users\\runneradmin\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\libcore.natvis" "/NATVIS:C:\\Users\\runneradmin\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\libstd.natvis"
  = note: libcompiler_builtins-b84df12ffea9ddc5.rlib(compiler_builtins-b84df12ffea9ddc5.compiler_builtins.ca00aaabc6ad635b-cgu.2.rcgu.o) : error LNK2019: unresolved external symbol _ZN4core3ptr13read_volatile18precondition_check17ha1e11d6217b519e2E referenced in function _ZN4core3ptr13read_volatile17h3fd78456f42a46ecE
          libcompiler_builtins-b84df12ffea9ddc5.rlib(compiler_builtins-b84df12ffea9ddc5.compiler_builtins.ca00aaabc6ad635b-cgu.2.rcgu.o) : error LNK2019: unresolved external symbol _ZN4core10intrinsics19copy_nonoverlapping18precondition_check17h5ef2e74b4a074627E referenced in function _ZN4core3ptr14read_unaligned17h327557c7a8527effE
          D:\a\compiler-builtins\compiler-builtins\target\x86_64-pc-windows-msvc\debug\examples\intrinsics.exe : fatal error LNK1120: 2 unresolved externals

The cause seems to be from a combination of factors:

  • compiler-builtins cannot reference any symbols in libcore. It can only call functions marked with #[inline], since those are codegen'ed into compiler_builtins.rlib.
  • precondition_check is marked as #[inline(never)], which breaks this.
  • The call is not eliminated because core::intrinsics::debug_assertions is resolved late in the codegen backend, after any MIR optimizations.
  • This failure happens in debug builds, so LLVM isn't eliminating the if branch either.

Metadata

Metadata

Assignees

Labels

A-linkageArea: linking into static, shared libraries and binariesC-bugCategory: This is a bug.O-windows-msvcToolchain: MSVC, Operating system: WindowsP-mediumMedium priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.T-libsRelevant to the library team, which will review and decide on the PR/issue.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions