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

    <tr>
        <th>Summary</th>
        <td>
            lld fails to reference static symbols when using LTO
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          bc-lee
      </td>
    </tr>
</table>

<pre>
    LLVM Version (as of writing):
```
$ clang-16 --version
Ubuntu clang version 16.0.0 (++20230125042347+9b70a28e0d76-1~exp1~20230125042505.706)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
```

Dockerfile with llvm main branch. (It is also reproduced in LLVM 15)
```Dockerfile
FROM ubuntu:22.04

RUN apt-get update && \
    apt-get install -y curl ca-certificates lsb-release wget software-properties-common gnupg \
      git ninja-build

RUN curl -L https://apt.llvm.org/llvm.sh -o /tmp/llvm.sh && \
    chmod +x /tmp/llvm.sh && \
    /tmp/llvm.sh 16 all

RUN sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list && \
    apt-get update && \
    apt-get build-dep -y openttd

RUN cd /tmp \
    && git clone https://github.com/OpenTTD/OpenTTD \
 && cd OpenTTD \
    && git checkout -f 4dfd6a096f82b6a80629f373b2e2a1f11246891f

RUN cd /tmp/OpenTTD \
 && mkdir build \
    && cd build \
    && cmake .. -G Ninja \
 -DCMAKE_BUILD_TYPE=RelWithDebInfo \
 -DCMAKE_C_COMPILER=/usr/bin/clang-16 \
 -DCMAKE_CXX_COMPILER=/usr/bin/clang++-16 \
 -DCMAKE_AR=/usr/bin/llvm-ar-16 \
 -DCMAKE_RANLIB=/usr/bin/llvm-ranlib-16 \
 -DCMAKE_EXE_LINKER_FLAGS_INIT="-fuse-ld=lld" \
 -DCMAKE_MODULE_LINKER_FLAGS_INIT="-fuse-ld=lld" \
 -DCMAKE_SHARED_LINKER_FLAGS_INIT="-fuse-ld=lld" \
    && ninja
```

Expected: Link successfully.

Actual: Failed to link.

```
usr/bin/clang++-16 -O2 -g -DNDEBUG -flto=thin -fuse-ld=lld -rdynamic CMakeFiles/openttd.dir/generated/rev.cpp.o CMakeFiles/openttd.dir/src/script/api/script_accounting.cpp.o ...
ld.lld: error: undefined hidden symbol: _newgrf_textrefstack (.llvm.2775165945019663611)
>>> referenced by newgrf_text.cpp:764 (/tmp/OpenTTD/src/newgrf_text.cpp:764)
>>> lto.tmp:(DrawVehiclePurchaseInfo(int, int, int, unsigned short, TestedEngineDetails&))
>>> referenced by newgrf_text.cpp:765 (/tmp/OpenTTD/src/newgrf_text.cpp:765)
>>> lto.tmp:(DrawVehiclePurchaseInfo(int, int, int, unsigned short, TestedEngineDetails&))
>>> referenced by newgrf_text.cpp:766 (/tmp/OpenTTD/src/newgrf_text.cpp:766)
>>> lto.tmp:(DrawVehiclePurchaseInfo(int, int, int, unsigned short, TestedEngineDetails&))
```

When I modified the code ( [link](https://github.com/OpenTTD/OpenTTD/blob/1c0c4637d2d65194dcc10ab727a99ec74ea5d962/src/newgrf_text.cpp#L773) )  to use `__attribute__((used))`, the link error went away.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUV01z2zjS_jXwpYssEiRB8aCDbEp5VSPbKY-dyXtSgUBTxBgCWQAY25f57VugFH9F8U5mL7tVtPnRn083_HSbO6d2BnFOinNS1Gd89F1v542INOJZ08un-Wbz5RK-oHWqN0DojDvoW3iwyiuzI7Qi2YIkNUkWhCXH6_BKcxCam12UMoiibwcPB9ldMxo_HsRwlEDK4iROQghCzwk9pwnNkpQWSU6zvCT0vGrKhNMZJrJkUfoXPg7pX6-UiqSIy4SFlKYgt9zu0JNsAY8ztmV5NIhIKzM-RjszHlU6i1zCvpeog-LQO_V4EK2N81xrlLWyQUToanSW0FWjzGm80--6F_doW6URHpTvQOtve9hzZaCx3IguDvjWHpQDrl0PFgfby1GgBGVgqnVaPEN4DvHi9iBY3VxfwjhVkWQLSuMkf53Fzd0V8MFHO_QwDpJ7BEIZoQxIcXFQAYBnFXXACtETiNFqEDwSaL1qleAeHWjXRBY1cofwEAxc3_oHbjEabD8ETXSR6Pf73sDOjMPubRiAnfJglPmTR82otHyf6hQ02kDn_eDCeaIrQld88HEoX9zbHaGr6dF1EPWhF34_vPp2Cpzo9r0EQs8f_57-D0opA671-1wdSoiWCggtXcizWBKagcQmclYEJ68eCS3DDb04wCF05frRCnSxVs5_2JO_0baplpHEITSuH9B4_2Np5RHYe7CT29AXoXuD70q_U74bm1j0e0JX1wOa29v65emVq6MfIeFH2bswHYr7fvQQtZDLVjKeVKyd0YbxWcJo1WZl1lCkPG3TlOZsVqXtT8F8lMv-Xip7qM3JZIT8SLjn9whxDNEnuAoH9pVWVF9cLn5bbs_v1pt6e_v_n5ckq29Q_6F8V2OzNm1_Qvtie3F9-Xm9Wd6QrH5DInT1TI8nzL5-_XeGB5Y8bb44YRTOdcTtaYObxdVmff4TI8uNVs1pw-XX5XazvvptebNdbRafft-ur9a3kx8ataPDSEuS1VpLQukJ88vr-m7zH3n4_f8WN8v6n3h4afvETR-w-vJxQOFRhkGwUeYe3CgEOteOWj_FrzUXwo98miUrrjRK8D1oZe7fKL2L8UFno2sK0Q6i-qpent99gqjVvidZ7Ttl4C02iKx8MnyvBFxc8ntcKY2BoY7EEEsVouzQoOUBCl1Z_BaLYYj7jwycDeTlhFUTf_FBPb9uuRD9aMIecPQTx0ecWsah3NkC0Np-GqCjkdgqgxI6JSUacE_7pp9KtTX4sLPt1uOjt9g6z8V9mJMH-qdlWaSsqPIiSSvGMpamLwMyWx4usNiiRRMGafMErxyG1Ei2KFl-WC3e8sczwpMWJ-Jo38fBQ6DKWW35wxfslND4ebSi4w4DDRA6U8YTegFvb6OZti0Jruvt9OUWnUe5NDtlsEbPlXbTkaz-EcLilxEW_2MI2S8jZP8NCE9xyh8dGliH3VO1KhBFhyB6GUb-DEhxHliDFDWhs1-ZzYFIdN8QukpFInKWlZJKVqRVLoVIE96UtORVhaLMkReyYvSn1aPZpiwzQisIP4HIRodAWLLdcu-takaP2-3Uj9noAqNMiFkSihLQBASHv394QOOBP_DvZHkm55mssoqf4TxlZV4ls4yxs26eVZTnOUtSlmPKWiFKWVZVy2lRIUPJztT8uPLPUppWlMVsVlRlk7cNw2JWlCXJE9xzpZ93xzPl3IhzlmRFdqZ5g9p9_3fHzqf51ow7R_Ik7GTuxcwrr3EemLUNPQ0FeD6g4Dz3Shw5zMFDaObolNnB5vb6bLR6_kHXQojvs3Ww_Z8oArVOaQYCnjL9VwAAAP__l78BrA">