Issue 55431
Summary lld runs LTO even if -fno-lto is passed
Labels new issue
Assignees
Reporter simone-gaia
    Posted a SO question about this: https://stackoverflow.com/questions/72190379/lld-runs-lto-even-if-fno-lto-is-passed. Copying here the content:

I have a CMake project with several subprojects that create static libraries built with `-flto=thin`.

The project has a lot of tests that are linked against the aforementioned libraries. With LTO it takes a lot of time to build tests, therefore I have disabled LTO for tests using `-fno-lto`.

What I noticed though, is that `lld` performs LTO on tests even with `-fno-lto`. If I run the linker with `--time-trace` I can see that the majority of the time is spent on LTO.

My questions are:
1. Is this expected? If so I can assume that `lld` performs LTO whenever it finds the LTO info in the object it links.
2. If not, is there a way to disable this behavior? Adding `-fno-lto` to the compiler does not seem to work, and `lld` does not have a param to explicitly disable LTO.
3. If not, is this a bug? If this is a bug I will submit a repro.

This is how I handle `lto` in CMake:

```
# Enable Thin LTO only on non-test targets.
if(ENABLE_LTO)
  if (IS_TEST)
    target_compile_options(${TARGET} PRIVATE -fno-lto)
    # Probably pointless.
    target_link_options(${TARGET} PRIVATE -fno-lto)
  else()
    message(STATUS "ENABLE_LTO on target ${TARGET})")
    target_compile_options(${TARGET} PRIVATE -flto=thin)
    target_link_options(${TARGET} PRIVATE -flto=thin -Wl,--thinlto-cache-dir=${CMAKE_BINARY_DIR}/lto.cache)
  endif()
endif()
``` 

The command that builds the tests does not contain `-flto=thin` at all, it only contains `-fno-lto`

_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to