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

    <tr>
        <th>Summary</th>
        <td>
            libLTO-based LTO doesn't handle mix of opaque-pointer enabled/disabled bitcode well by default
        </td>
    </tr>

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

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

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

<pre>
    When building Firefox with clang 15 and rustc 1.63 with cross-language LTO enabled, linking the XUL library fails with:
```
ThinLTO: ../../../modules/libpref/Unified_cpp_modules_libpref0.o76: error: Opaque pointers are only supported in -opaque-pointers mode (Producer: 'LLVM15.0.0' Reader: 'LLVM 15.0.0')
```

This is only a problem when using ld64, not lld.

What happens is that a same `LLVMContext` is used to load both bitcode using opaque pointers and not using opaque pointers, the latter coming first. So when loading bitcode without opaque pointers, we first hit
https://github.com/llvm/llvm-project/blob/llvmorg-15.0.0/llvm/lib/Bitcode/Reader/BitcodeReader.cpp#L2266-L2267

then when loading another bitcode with opaque pointers, we get to
https://github.com/llvm/llvm-project/blob/llvmorg-15.0.0/llvm/lib/Bitcode/Reader/BitcodeReader.cpp#L2275-L2279

The reason it's not a problem with lld is that lld is using a `llvm::lto::Config`, which has
https://github.com/llvm/llvm-project/blob/llvmorg-15.0.0/llvm/include/llvm/LTO/Config.h#L182

and it uses `LTOLLVMContext`, which does
https://github.com/llvm/llvm-project/blob/llvmorg-15.0.0/llvm/include/llvm/LTO/Config.h#L299-L300

ld64, however, using libLTO.dylib, doesn't have such a default applied to its `LLVMContext`s, and needs an explicit `-mllvm --opaque-pointers` to do the equivalent of what lld does.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzNVU2P4zYM_TXOhbDhyIkdH3yYnUVOKaZoZ7t7G0gWE6tVLK8lz0z-fUnlezs99FC0gJFIokS-Rz5RyulD87XDHtRkrDb9DtZmxK17hzcTOmitpKX5EmSvYZx8aGGelcXJODrvU94xyR3C5vkJsJfKok7EI1jT_8H-Qofw7cuG5mqU4wG20lgfHSTFQ5J_TvKHpMxPX5w-d6YnZ2SGLEvE-vqzd3qy6GlE3gbCSaMvvdka1C_tMLyc7C8na565qmQ3OI5u5MHTIL9PCIMzfcDRgxwRXG8P4KdhcGNADaaH1MVt6WUb-UVIxOrnkQK0GF0lotpsfvtpvszyLKcJ_IJS35ngYktE_SHTC18P9EUgEobRUQ738MZlmTzn0OpywTntXQBrdXZ7-msnA3RyGLCPXgLPJXi5J8hlzkAeHdF4DzTjDZMnlsGBdVKDclRIZULLDI_B3I85otJz4A-tjIorbGWgKbRuz5u2ZvQhg1_dkQRH4uVzHC6-m8JHvt7weBg6E478uhAGz1IRa_p2dHRSGcVhEdjX819KWfsd20BTZZ06rbpxl56LcNlt2PrpCIVGp7Jdlo7zjOSUiGIjRFmm_Fvd5jwwqztqkjLUUQJuKf4Nvx0GSv__g1y1ZHJVfS9HhBGldz1QDUTlY_VvdMnUSIUXsZ3GR31IFl1EQ6yKB0tM44A0uDU7Vj5noTNtR6L1_04WTN_aKfI_LXA3EesjhKxj6vOVuOXMGjcscfTx0jw_3d-bK2jt8L9DLeo63RT5Xfc494bOveEr1_rx3DSMIg-ZPkRRPEbkPdWTu8UrUscjNhI0buVkqb7DYM2xMZjg_9o5onpjK0DU3BQA3-lES1kja7pnzJD-2Dm55ZBH7WKTwO-TeZUWe7r6W8rnSTsMLJthMy_LYr4QVVnPdFPouqjlLJhgsTlSSZXk1sXvzC2XXluEvXlnn_fhr8_RWhsfh9cLitaCOpz5z6bRNv-4osb7KT5Hy6oqFrOuUSoX5Wrb5gJzhcV2IVuhc6lX2Ba5rtTMSoXWN8nyU7L8PDONyIXI6_kiX-VlXmdlWy_LSglVlHVZzpfJIsc9PZgZB85INbOxiRjUtPNktMYHfzVK782OCnT2LydqtGOzozdam2k_i3ibCPZPxCKWNw">