tests: Fix cdylib-export-c-library-symbols to work with LTO-enabled CFLAGS#156012
tests: Fix cdylib-export-c-library-symbols to work with LTO-enabled CFLAGS#156012jchecahi wants to merge 1 commit intorust-lang:mainfrom
Conversation
|
rustbot has assigned @jdonszelmann. Use Why was this reviewer chosen?The reviewer was selected based on:
|
This comment has been minimized.
This comment has been minimized.
…FLAGS The test fails on systems where default CFLAGS include LTO flags (e.g., `-flto=auto -ffat-lto-objects`), which is common in RHEL, Fedora, and CentOS distributions. The issue occurs because `build_native_static_lib()` recompiles the C source using system CFLAGS, which may include LTO. When rustc tries to process this static library with the `+export-symbols` modifier, it correctly rejects it as LTO objects in C static libraries are not supported. Fix by manually compiling the C code with `-fno-lto` to override system defaults, then using llvm-ar directly to create the static library. This ensures the test validates the `+export-symbols` feature rather than LTO compatibility.
b503a5d to
8d5eac2
Compare
|
Hi @jchecahi! Thanks for fixing this LTO issue on RHEL/Fedora/CentOS systems, I wasn't aware that system CFLAGS could include LTO flags by default. I have an open PR #155535 that also modifies this same test file to add Windows/macOS support for the +export-symbols feature. Our PRs will conflict since we're both changing rmake.rs. I think it makes sense to incorporate your |
Hi @cezarbbb! Absolutely, I have no problem incorporating this PR into #155535 if that makes your life any easier :) |
|
I have updated PR #155535, please check :> |
|
@cezarbbb thank you! Should I close this PR already? |
|
I think we should wait for the assignee's reply first? |
The test fails on systems where default CFLAGS include LTO flags (e.g.,
-flto=auto -ffat-lto-objects), which is common in RHEL, Fedora, and CentOS distributions:The issue occurs because
build_native_static_lib()recompiles the C source using system CFLAGS, which may include LTO. When rustc tries to process this static library with the+export-symbolsmodifier, it correctly rejects it as LTO objects in C static libraries are not supported (see #150992).Fix by manually compiling the C code passing
-fno-ltotocc()to override system defaults, then usingllvm-ar()directly to create the static library. This ensures the test validates the+export-symbolsfeature rather than LTO compatibility.