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

    <tr>
        <th>Summary</th>
        <td>
            Consider adding an option to disable the use of __ulock_wait in libc++
        </td>
    </tr>

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

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

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

<pre>
    Uses of `__ulock_wait` / `__ulock_wake` in libc++ have been added to support C++20's `std::atomic<T>::wait`.

https://reviews.llvm.org/D68480
https://github.com/llvm/llvm-project/blob/0ce25b12357b24d06cf08cc02719c144d567d5db/libcxx/src/atomic.cpp#L59
https://github.com/llvm/llvm-project/blob/0ce25b12357b24d06cf08cc02719c144d567d5db/libcxx/src/include/apple_availability.h

These APIs are considered private APIs and will result in App Store rejection.

[boostorg/atomic](https://github.com/boostorg/atomic/issues/55)
[rust-lang/rust](https://github.com/rust-lang/rust/issues/93740#issuecomment-1032223557)

libc++ comes natively on Apple platforms, but some projects, e.g., Chromium, WebRTC, etc., prefer to static link their own libc++ builds.

https://source.chromium.org/chromium/chromium/src/+/a2a378674abbcd56a824df4b779f90a2b5a0fb3e:build/config/c++/c++.gni;l=13
```gn
 # Use in-tree libc++ (buildtools/third_party/libc++ and
  # buildtools/third_party/libc++abi) instead of the system C++ library for C++
  # standard library support.
  # Don't check in changes that set this to false for more platforms; doing so
  # is not supported.
 use_custom_libcxx = is_fuchsia || is_android || is_apple || is_linux ||
 is_chromeos || (is_win && is_clang)
```

Fortunately, Chromium does not currently use C++20's `std::atomic<T>::wait`, so code using `__ublock_wait` is not currently shipped, but this may change in the future.

So it would be nice to have an option (macro) to disable the use of `__ulock_wait` on Apple platforms.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEVslu4zgTfhr6UohBk9p88CFxfgE_MIfBdDfmaHApWZxQpEBScfvtB5TkxOlu9CyXAQSJKhZr-2qhiNGcHeKBlE-kfN6IKfU-HKR6sIgb6fX18CViBN8BqejpNFmvXk4XYRKpKBDWfiS_YCYbB9ZIRdgTYU_Qi1cEiehAaI0akoc4jaMPCY4LC6OE1TFLikkT_kj4o0h-MIrw42fC_7eQVqVbQp8JfVzefUpjzNusJawN-GrwErfWvg5bH86Etc9VUzT0R8xnk_pJbpUfCGvzifXzMAb_B6pEWCutl4S1VCEr5Y7xspas0LRSHW2Uoqze7dWuKHRZ1brUmTW7_fUrYW0MirB28WKrxpEw_ku5_6_sME7ZSWO2aBwtnsSrMFZIY026bvv7gH7uMSI8_vr_CCIgKO-i0RhQwxjMq0i3PafhYqyFgHGyKSP-OI7wKfmAEDDbbbz7ABUpn6T3MS24rPiWz4Q1P4nH9ydYa2KcMBLWliVh-zfhYYrpwQqXefP6L2V_d-BO9J7XBSWMzwTlhwFdethRzhjjZVm_653fd8mu_IARnEjmFe0V_BwXizBakTofhkjYEeSUIPoBYYV4JuL2vM3fYx_8YKYhr39H-dvn47yb1Lw7BuwwzDWURDIKrHEvkHo0AfzlQ93JyVgdf1Iu0U9B4VatCteKUW_675dLHs2SW8EEr5uqLoSUSpeVaFihu0LW9b7bU8FkKWgnORL-ONuQJXnXmVn6Ytz7ant2hvAnS_jzjq-2VnR5zm4hAGEcvkQE4x5SQLz3krBmVpK8txm51JugT6MI6brWwcoonF6lzeL-1iEhDWF7MC4mFDo3wdQjxGtMONyaVzYmiHCFzocb7V5RTMJpEfQb39r8tvdMz94RVidQPaqXXE2qF-6MEVIvEkRMkHoTM-ydsBFnXUOutfe84k-gvXFniP5esongfLopRX1TO0U8qSkmP5yWZgGEP4OJp25SfTQCSH0k9TFThNPBG31PmXP6_d8aN31d_1f5Jp7m9EEfb4yENSaeLsYBYRVh1cyzFOD-G-Tvk7b1IU1OJLTX-_oA7XHxTU0hoEv2mp36VzMly40elNcIU8xBXKaa_DDtzLfqYm_GEfWtpGeIBnFdwcsw5nTppjQF_FCHnzyYBBc_WQ0SwRmFGdt5UgoHfszdM8drECr4nILJgzZRSIuzzOzoj0fy9x1n1bzRB673fC82eNhVdclp0zTNpj8oLlhV1DXfl0XZYS27cr_Tu7rjWlVNozbmwCjjlFFGOS-KZiv5jkoqUJZ8p5B3pKA4CGPfBu9m7puHihZVtbFCoo3zBYMxhxeYNwlj-b4RDvOsk9M5koJaE9P7-N4kkywejusMyteHDM17gH4clPuIfLyKbKZgD_94-r4NhdmdPwMAAP__n5Ti2A">