https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118961

Nathaniel Shead <nshead at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2025-02-23
                 CC|                            |nshead at gcc dot gnu.org

--- Comment #2 from Nathaniel Shead <nshead at gcc dot gnu.org> ---
Confirmed.  It looks like LTO in general doesn't work particularly well,
especially with header units.  I'm not 100% sure if this is related but the
following sample fails with a link error:

  // header.hpp
  template <typename> struct S {
    S() {}
  };
  template struct S<char>;

  // main.cpp
  import "header.hpp";
  S<char> s;
  int main() {}

g++ -flto -fmodules header.hpp main.cpp:

/usr/bin/ld: /tmp/ccDEUr8J.ltrans0.ltrans.o: in function
`__static_initialization_and_destruction_0()':
<artificial>:(.text+0x15): undefined reference to `S<char>::S()'
collect2: error: ld returned 1 exit status

So there's something going wrong with the determination of external symbols.

Reply via email to