Skip to content

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

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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