<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/55239>55239</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            VTable Optimizations; Invalid application of 'sizeof' to an incomplete type llvm::pdb::PDBSymbolFunc / llvm::lto::InputFile
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          EmmaJaneBonestell
      </td>
    </tr>
</table>

<pre>
    Tested with clang 13, 14, 15. 
If attempting to compile LLVM with '-fforce-emit-vtables' and/or '-fwhole-program-vtables', the following files will fail with the respective errors:

<details>
  <summary>llvm/lib/DebugInfo/PDB/Native/LinePrinter.cpp</summary>

  ```
  In file included from /opt/venv/llvm- 
  project/llvm/lib/DebugInfo/PDB/Native/LinePrinter.cpp:9:
  In file included from /opt/venv/llvm- 
  project/llvm/include/llvm/DebugInfo/PDB/Native/LinePrinter.h:12:
  In file included from /opt/venv/llvm-project/llvm/include/llvm/ADT/ArrayRef.h:14:
  In file included from /opt/venv/llvm- 
  project/llvm/include/llvm/ADT/SmallVector.h:28:
  In file included from /usr/bin/../lib/gcc/x86_64-linux- 
  gnu/11/../../../../include/c++/11/memory:76:
  /usr/bin/../lib/gcc/x86_64-linux- 
  gnu/11/../../../../include/c++/11/bits/unique_ptr.h:83:16: error: invalid application of 
  'sizeof' to an incomplete type 'llvm::pdb::PDBSymbolFunc'
          static_assert(sizeof(_Tp)>0,
                        ^~~~~~~~~~~
  /usr/bin/../lib/gcc/x86_64-linux- 
  gnu/11/../../../../include/c++/11/bits/unique_ptr.h:361:4: note: in instantiation of 
  member function 'std::default_delete<llvm::pdb::PDBSymbolFunc>::operator()' 
  requested here
            get_deleter()(std::move(__ptr));
            ^
  /usr/bin/../lib/gcc/x86_64-linux- 
  gnu/11/../../../../include/c++/11/bits/stl_construct.h:140:19: note: in instantiation 
  of member function 'std::unique_ptr<llvm::pdb::PDBSymbolFunc>::~unique_ptr' 
  requested here
        __pointer->~_Tp();
                    ^
  /usr/bin/../lib/gcc/x86_64-linux- 
  gnu/11/../../../../include/c++/11/bits/stl_construct.h:185:2: note: in instantiation of 
  function template specialization 
  'std::_Destroy_aux<false>::__destroy<std::unique_ptr<llvm::pdb::PDBSymbolFunc> *>' 
  requested here
          __destroy(__first, __last);
          ^
  /usr/bin/../lib/gcc/x86_64-linux- 
  gnu/11/../../../../include/c++/11/bits/alloc_traits.h:746:7: note: in instantiation of 
  function template specialization 
  'std::_Destroy<std::unique_ptr<llvm::pdb::PDBSymbolFunc> *>' requested here
        _Destroy(__first, __last);
        ^
  /usr/bin/../lib/gcc/x86_64-linux- 
  gnu/11/../../../../include/c++/11/bits/stl_vector.h:680:7: note: in instantiation of 
  function template specialization 
  'std::_Destroy<std::unique_ptr<llvm::pdb::PDBSymbolFunc> *, 
  std::unique_ptr<llvm::pdb::PDBSymbolFunc>>' requested here
          std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
               ^
  /opt/venv/llvm-project/llvm/include/llvm/DebugInfo/PDB/UDTLayout.h:109:7: note: 
  in instantiation of member function 
  'std::vector<std::unique_ptr<llvm::pdb::PDBSymbolFunc>>::~vector' requested here
  class UDTLayoutBase : public LayoutItemBase {
        ^
  /opt/venv/llvm-project/llvm/include/llvm/DebugInfo/PDB/PDBTypes.h:41:7: note: 
  forward declaration of 'llvm::pdb::PDBSymbolFunc'
  class PDBSymbolFunc;
        ^
  1 error generated

  ```
</details>

<details>

  <summary>tools/lld/MachO/CMakeFiles/lldMachO.dir/...</summary>

  Arch/ARM64_32.cpp 
  Arch/ARM64Common.cpp 
  Arch/ARM64.cpp 
  Arch/ARM.cpp 
  Arch/X86_64.cpp 
  ConcatOutputSection.cpp 
  Dwarf.cpp 
  ExportTrie.cpp 
  ICF.cpp 
  InputSection.cpp 
  MapFile.cpp 
  MarkLive.cpp 
  ObjC.cpp 
  OutputSection.cpp 
  OutputSegment.cpp 
  Relocations.cpp 
  SectionPriorities.cpp 
  Symbols.cpp 
  SymbolTable.cpp 
  SyntheticSections.cpp 
  UnwindInfoSection.cpp 
  Writer.cpp

  ```
  In file included from /opt/venv/llvm-project/lld/MachO/Arch/ARM64Common.cpp:9:
  In file included from /opt/venv/llvm-project/lld/MachO/Arch/ARM64Common.h:12:
  In file included from /opt/venv/llvm-project/lld/MachO/InputFiles.h:13:
  In file included from /opt/venv/llvm-project/lld/MachO/Target.h:13:
  In file included from /opt/venv/llvm-project/lld/MachO/Relocations.h:13:
  In file included from /opt/venv/llvm- 
  project/llvm/include/llvm/ADT/PointerUnion.h:20:
  In file included from /opt/venv/llvm-project/llvm/include/llvm/ADT/STLExtras.h:38:
  In file included from /usr/bin/../lib/gcc/x86_64-linux- 
  gnu/11/../../../../include/c++/11/memory:76:
  /usr/bin/../lib/gcc/x86_64-linux- 
  gnu/11/../../../../include/c++/11/bits/unique_ptr.h:83:16: error: invalid application of 
  'sizeof' to an incomplete type 'llvm::lto::InputFile'
          static_assert(sizeof(_Tp)>0,
                        ^~~~~~~~~~~
  /usr/bin/../lib/gcc/x86_64-linux- 
  gnu/11/../../../../include/c++/11/bits/unique_ptr.h:361:4: note: in instantiation of 
  member function 'std::default_delete<llvm::lto::InputFile>::operator()' requested here
            get_deleter()(std::move(__ptr));
            ^
  /opt/venv/llvm-project/lld/MachO/InputFiles.h:247:7: note: in instantiation of 
  member function 'std::unique_ptr<llvm::lto::InputFile>::~unique_ptr' requested here
  class BitcodeFile final : public InputFile {
        ^
  /opt/venv/llvm-project/lld/MachO/InputFiles.h:30:7: note: forward declaration of 
  'llvm::lto::InputFile'
  class InputFile;
        ^
  1 error generated
  ```

</details>


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztWVtv2zoM_jXJi5DAl9z6kIfcCvSgPS3WbOe8GbItJ9pkyUeS02a_fpTsJM61Tdp1O8CKQHFIiaT4iTSphiJe9qdEaRKjJ6rnKGKYz5Dr17wRclt2bDdRzRnXnMFNgrDWJM00hTlaoEikGWUE3d5-uSuW17xuI0mEjEiDpFQ3FhqHjCggI8zjmnctZDHnaS4YaWRSzCROK9OMRj0nKBGMiSejJwENCqQzhhJMWaHHTJFEZSTSdEEQkVJIVfMHhaHl6I9iomEJMCYFCSEgqjxNsVwCkbFFCjYxGsI4JmE-u-GJgOeH8RDGv7ERDg-3lJMHSbkmshllGcgA4kZMVSlo6DjlpyTccLsHRHnE8hgcnUiRIuOLTMO4IHxhjABbGmi1BhzzFfZW0i-ycXC19sc72VAu3hBeac4cDHG9y6x52YjBeGpGKfHyE0kKZa2fvvVC62OKGfsCM0WxS6_3GsW5kjCGlMPYbK7BnUURjM-9TtBpNRjl-fPGoBnPgee6qxU7w8Y8EDG0n2JySlJhzuig26lY9rE2hFQro5HT_3ISZLpwVc83QBmriug1D5QvMKMxwlnGaARHSXAkErQxu6vodyISk04g_WBufAs5iBFNkF5mxEyxAMFe_UEWh8UDnM3HZRoKBkZEJsmUAld_SoOuKMBKEQmg91ZaesE0q3kQRxMH8tLuqu2_WntS6578_EbO9zsujCZKEBeaFL6HDziCa7rneDhFIZEoAe9ZlgFCx4VvY5LgnOkgJgYFSI0v-h8SpqWKjEgMkQN-Nk4GTFf6JAFj7TtpTiTZ9_uMrPStF_fWBqXCJKBeYDZrWYDfcF-GwetXIqI0CyIBHpd5pMus5Zjx6iQqK-2AzilUNnifgwic0srCVwICjhY2zzeMnO7ExkzvmNt_Y_f32iaDvzYm1m43BRHDkIBMNUIhf33fRqoKSzAGL0qxDHD-DMAkmCmy9n4AZ9pyTY1yKZCgbmAkvjqaNlpNzCRUKm1qsCBg2DwdQvFXYwfvXBEFWmL4aaHrtsx7pPsh0L0TOCcjanweIr8aDxNLi00R1Ok5_x80wLEr-W9Ini9CWpFeQVfPqTJZM7gLKOy9Cd_gJKmLJmiPl1BO1fxYJbJ9Ci6ppPfL-c_j6S1eirzMkM7VLrArjYcA3ns_HcCxODZvQbH68iqlHcUCmlul0HpTQ6ygYoRdZHkI9SYqqDdwDgtO92ScvY-HYZxC4VrksZZ7zL_QUj9hGaOYwB7kJobOKneL7e848Pge3aIwh2qLm0KNxCf73KIp3m24j3biB_txLQRT1lvmquAOR_N7-B7d4W_kmtr7AcOy9GZMpc1PzdPd-EBGEDHXg093nVbge6Y1Rod4I5Gmgh9lH2EcIv9rU-wWZyQ4dDP3uc5y_UhsNGzxx4BtskWZPGdC6qmkZIt8M7re_s2PSLzDmfHYDk1-u4XufIt4H34dbROOWrnizFLC9RbnE4EXsj2UaoteSnmQVEiqKdnh2lN4iDY1t0E7dK7nBJq0UuT2qs_8ifLYxNUhu_8B3eWlyLtd1FRDvXpWDx-pyy9jztDzXrcsVTX2fNnQK8T77yt-iiW0cj9FdPVIvkX-2VdCD0Uz9JnTEhPP-bk3X4_T28kzFMPFPv0_N1BH69SPv4FiWhQP60D6c_v0UbdPB3x__Obp42-cLk7CXqt7Tnt1wS3RCc_t3RCdKrSHVEcitqUb5CGOWbXYXst-W519wlH-Xht6rIreRPcrQ7fYX8U9Z1fR-_Xzi1V0Pe778ZV_heuaakb6X2yZhO4zTdOyV4YlQzDrcA57OXe91EsYONApF9VzyfpzrTP7vzjv2qQVqud52ARFmxfXDopUqdwW9-2251_V5323R9qJ47U7bdIi7Zbjuo7r9eLII27YabteneGQMNWvtYe19rhO-57jeU7b8WFax_Wa3SgJI6cbx3HH7Vw5fq3lkBQ82jSKm0LO6rJvbYBuTAGTUaXVhgnY0hknZCUf53ouZH8CHcZfmJOh4ObEM1a3hvet1T8ArtKr5g">