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

    <tr>
        <th>Summary</th>
        <td>
            [lld/mac] Crash with thinlto and --start-lib / --end-lib
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    https://drive.google.com/file/d/1ju1O-uXLu4JGq_FbVb3wu4ugiZ_MAWPR/view?usp=sharing

```
Assertion failed: (file.lazy), function extract, file InputFiles.cpp, line 2224.
Process 12725 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = hit program assert
    frame #4: 0x00000001007dae48 ld64.lld`lld::macho::extract(lld::macho::InputFile&, llvm::StringRef) + 300
ld64.lld`lld::macho::extract:
->  0x1007dae48 <+300>: bl     0x106b3f788               ; symbol stub for: __asan_handle_no_return
    0x1007dae4c <+304>: adrp   x0, 27829
    0x1007dae50 <+308>: add    x0, x0, #0xb80            ; __func__._ZN4llvm4castIN3lld5macho18ConcatInputSectionENS2_12InputSectionEEEDcPT0_
    0x1007dae54 <+312>: adrp   x1, 27829
Target 0: (ld64.lld) stopped.
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = hit program assert
    frame #0: 0x0000000185632d98 libsystem_kernel.dylib`__pthread_kill + 8
    frame #1: 0x0000000185667ee0 libsystem_pthread.dylib`pthread_kill + 288
    frame #2: 0x00000001855a2340 libsystem_c.dylib`abort + 168
    frame #3: 0x00000001855a1754 libsystem_c.dylib`__assert_rtn + 272
  * frame #4: 0x00000001007dae48 ld64.lld`lld::macho::extract(lld::macho::InputFile&, llvm::StringRef) + 300
    frame #5: 0x0000000100835dc0 ld64.lld`lld::macho::SymbolTable::addUndefined(llvm::StringRef, lld::macho::InputFile*, bool) + 1096
    frame #6: 0x00000001007da798 ld64.lld`lld::macho::BitcodeFile::parse() + 2056
    frame #7: 0x0000000100835dc0 ld64.lld`lld::macho::SymbolTable::addUndefined(llvm::StringRef, lld::macho::InputFile*, bool) + 1096
    frame #8: 0x00000001007da798 ld64.lld`lld::macho::BitcodeFile::parse() + 2056
    frame #9: 0x0000000100837168 ld64.lld`lld::macho::SymbolTable::addLazyObject(llvm::StringRef, lld::macho::InputFile&) + 592
    frame #10: 0x00000001007d9ecc ld64.lld`lld::macho::BitcodeFile::parseLazy() + 504
    frame #11: 0x00000001007d967c ld64.lld`lld::macho::BitcodeFile::BitcodeFile(llvm::MemoryBufferRef, llvm::StringRef, unsigned long long, bool, bool) + 3960
    frame #12: 0x000000010078109c ld64.lld`addFile(llvm::StringRef, LoadType, bool, bool, bool, bool) + 2464
    frame #13: 0x0000000100777da8 ld64.lld`lld::macho::link(llvm::ArrayRef<char const*>, llvm::raw_ostream&, llvm::raw_ostream&, bool, bool) + 64400
    frame #14: 0x00000001000022fc ld64.lld`lldMain(int, char const**, llvm::raw_ostream&, llvm::raw_ostream&, bool) + 3068
    frame #15: 0x00000001000013d0 ld64.lld`lld_main(int, char**) + 696
    frame #16: 0x000000010b1c108c dyld`start + 520
```

If you link with `-t -why_load`, it prints

```
...
obj/content/shell/content_shell_app/shell_crash_reporter_client.o
__ZN7content24ShellCrashReporterClientC1Ev forced load of obj/content/shell/content_shell_app/shell_crash_reporter_client.o
obj/content/shell/content_shell_app/shell_crash_reporter_client.o
__ZTVN7content24ShellCrashReporterClientE forced load of obj/content/shell/content_shell_app/shell_crash_reporter_client.o
```

So the file forces a load of itself!

We should definitely do 72e7c7e85630 in the MachO port (see also D106293), but doing just that isn't enough: We hit some other assert later on then.

Need to understand what's going on first and make a reduced repro.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzVWG1z2ygQ_jXyF8YaAXr94A_Oi296k6SdJtfe9IsGSdhWgoUKKIn7629BshPbmrbX6715HCLBsvvsw7IsLmS1na2NabVH5x5ZwLdS9SP3V1KuBPdLuYGuZS24HYE_fN_ht9Pu96su_PWXz_mi-FDQpy7sVvWn_Hr-8d17kHms-ZNHF51uPXqh10zVzcoLLrxgPrRxMHzd61xrrkwtG7RkYKgCJMgjqTXqC_Zl65HMI-do2TWlk-LPRrHSuD6QQW-atjMLeNJ-2ba2W9QNR4SQ0O8tvFOy5FojTBISIW1k24KZHguZI7NWnFVgk2I7-3PHO44AOvQkQIDP2hagbFjdTHtR6LeCVhGCdw2grPi6NqhVcqXYBjHnVG8DwWcJndyaCK17wXPQf3AQJBXjYYpEFYe-EBXQYltYDTrfsHIt-8e90-nY6J4Cj8SOAPG46UdujWX_PV8Ci2D-DNFgoP07DdJh0aYevUQA_AWxR89BodVHL61ThbCOOpG4oMskTdHhx6NnSG83hRRAXVegpVR2Xp4zzZp8zZpK8LyRueKmU80Ldy9Gy73RcDDKKtWCyHNg3SZJCrFyOi8K9vPS_bwK7ef1LSxO8FykwTHkPLehl-d-_ukmtMyGJdPmzQ0F2iLHGE7PZVMy45bhlrswvby5JTkmB12Xlxflu7sgH4MY7iBicuQaPnLtjqkVNygY9sl-HWGBh9D2d7Ftg6WwA4X5l8I9OAz3NIopqTII97rQW234Jn_gquHCr7bQBbGY521vNX-ohXAhm47oxSd644Tz4JXeQc1e8Ylako4pJseKIwab9rXicq-SFVIZpwvHY7roqS6cwEqP6bK7wHKYK9P08BKyU2lX7b-XQA5cjY5RpTSqyuBbqG5dOrhjBVh2HbAvf2sqvoQMXjmsIzgsvK-6MLcyhZRihxkHWTwCOh6hMsm-SeVZbUpZcWfLdbRMaTCb7syRIBozl_wfOUr_WY6yU44S2Fw_wtEV1A5vi3s-BP2PkBTv0EYZGUtCwSk5GS_LHyPnytU6e4IiOONGTOIRk3Hy502-7nhNzzXfSLU965ZLrvYkjXLXNbpeQQgiIZuVa15C6jC0aBaP5QxMTnxJIQoPfIF1PIF4gOJKsupu2_JT2-NYSBiP8kpPsCQQ6d8MPCg1Hw7AzZViW4uNnpdQ-qJSNtrY7QaH-gGXij3lUhs4kzYnSfd0bMyVOAxHczE-OSKCgJDlcYxcwwkP0OvGldKHYPv08NfA7o6L0aMRnxwY0NDqOBnmmxOQO3gDB6NJCx9n9gKXOEhLBKet1awNGw7uiASjl5K-fbNEW9nZ-8QDeqrNGsH41KDp03qbCwg8Kw6wXCEEEPVXbjm-P1RlsriHOxIwbbh1aqHXXIiXnty958zeZPqxvFRMr6EqbqHa4CovRQ1yvuzV5VCVJsNcEt7aCedW_v0gfu6kz_Hlo623S7ddofqTS_STgfx8v-4-fIdnl3-zW6NxcSuhiub99dOZ14jtAdRGcwG5Cb-e8ZEjvZadqJA7uGvDxRZVEiWEJ2XCbV0coLpxaq8hvbxFbV9bpppzxISW6ALuVSSjw3W46AzMhzyI7jttYB4zqNawVxKDeCO71dpuATBry3QtYV9I0K2GSh0JBq4i6Qw2_mukNxzINBLSe8UVbJSmQk-gHBRrtHIG7U29hiFkxzbsAfDBvaDq7CoAi0r6Ez7DcZwRKHmDdFLNaJXRjE1MbQSfedGZu64sII160QVyi9pvL7OuGwG2reLp1O3SKZTHQMMC3nlT2bdJp8TRbxYrmNwVw68VLjP1_6YApi8AFrXWHdfwEGU4JpP1LM3KGNMoKNOElFFWlZSHGFMeFFlUMkYnghVcaAvXI6ThT8ipgGcAPalnBHIqxjaThSlOfUKLZBnFPA6SJaUl9sKAQ_ISvsXhS7WaqJmDVHQrDYOi1ka_DMKy2MPUsWP1s86spZo1dSknzu7M4f4DRm43Lg">