<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/63346>63346</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Incorrect include-what-you-use (IWYU) mappings file for libcxx 16
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
percona-ysorokin
</td>
</tr>
</table>
<pre>
`libcxx/include/libcxx.imp` IWYU mappings file has several incorrect entries referring non-existing `#include <>` files:
* `<fwd>`
https://github.com/llvm/llvm-project/blob/7cbf1a2591520c2491aa35339f227775f4d3adf6/libcxx/include/libcxx.imp#L30
* `<debug_utils>`
https://github.com/llvm/llvm-project/blob/7cbf1a2591520c2491aa35339f227775f4d3adf6/libcxx/include/libcxx.imp#L25
* `<support>`
https://github.com/llvm/llvm-project/blob/7cbf1a2591520c2491aa35339f227775f4d3adf6/libcxx/include/libcxx.imp#L39
I suggest the following mappings for `__fwd/*`:
```diff
diff --git a/libcxx_clang16.imp b/libcxx_clang16_fixed.imp
index 575ce0f..f818891 100644
--- a/libcxx_clang16.imp
+++ b/libcxx_clang16_fixed.imp
@@ -27,7 +27,16 @@
{ include: [ "@<__filesystem/.*>", "private", "<filesystem>", "public" ] },
{ include: [ "@<__format/.*>", "private", "<format>", "public" ] },
{ include: [ "@<__functional/.*>", "private", "<functional>", "public" ] },
- { include: [ "@<__fwd/.*>", "private", "<fwd>", "public" ] },
+ { include: [ "<__fwd/array.h>", "private", "<array>", "public" ] },
+ { include: [ "<__fwd/get.h>", "private", "<tuple>", "public" ] },
+ { include: [ "<__fwd/hash.h>", "private", "<functional>", "public" ] },
+ { include: [ "<__fwd/memory_resource.h>", "private", "<memory_resource>", "public" ] },
+ { include: [ "<__fwd/pair.h>", "private", "<utility>", "public" ] },
+ { include: [ "<__fwd/span.h>", "private", "<span>", "public" ] },
+ { include: [ "<__fwd/string.h>", "private", "<string>", "public" ] },
+ { include: [ "<__fwd/string_view.h>", "private", "<string_view>", "public" ] },
+ { include: [ "<__fwd/subrange.h>", "private", "<ranges>", "public" ] },
+ { include: [ "<__fwd/tuple.h>", "private", "<tuple>", "public" ] },
{ include: [ "@<__ios/.*>", "private", "<ios>", "public" ] },
{ include: [ "@<__iterator/.*>", "private", "<iterator>", "public" ] },
{ include: [ "@<__memory/.*>", "private", "<memory>", "public" ] },
```
`__debug_utils/*` has only one file `randomize_range.h`, which is used only in 3 algorithms: `std::partial_sort`, `std::nth_element` and `std::sort`, so most probably `__debug_utils/randomize_range.h` should be mapped to `<algorithm>`.
`__support/*` are included either from `__locale` or from `__threading support`, so public headers for them should be either `<thread>` (for `__support_ibm_nanosleep.h`) or `<locale>` (for everything else).
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMV11vqzgQ_TXOy4gI7ADhIQ9teitdaV9Xq31CBg_gXWMj27TN_vqVTZKm90PlSnm4UtSm9vGcM56BnuHOyV4jHkj-SPKnDZ_9YOxhQtsazZOTM9b8K_WmMeJ0IEWqZNO-vRH6LHWrZoGEPi9LWzlOpEjh619__wkjnyapewedVAgDd-DwBS1XIHVrrMXWA2pvJTqw2KG1UvegjU7wTTof_iBFSig7swBhR8K-hPghoiPsgaRPJH0g9CEi2bF7FQti2YDB-yni6DOhz730w9xsWzMGwerl8iuZrPkHW0_oc6NMQ-hz2TZdxmleZTlNW7qrMs5ZzljVUVqWZd7tBOOiK66J_-wuKPuDpd-qFNjMfT17qdxvp5bm36p18zQZ6387paw6K40_v4Kb-x6dBz8gdEYp8xo66L0JjQ0J1XXokSD7IaZ3aaEiXT5Cdt2yFL5BkvTSA7-S163ius-KIAKa75brTr6hiApjDKkFvkFe5i2m3Xbb7bP9vsogS9Nit1sgSZL8JP6lEI_LZwUd2aVkl0JCS0KPJRD6GL9lBSw75-oBkPIRLvfKHoDkj0AoDQh2rOv4dJ2cx1DIbbgp9iVs02NATVa-cI_vC-G5ez_xATo3SraEUiD5E5DyidDjWg3Gjtyv5l_Q9-Kedeul0Vyt5n8_sU5D8pmE2KTruJd33grS0EQ_430n5dby03b4lDfi7srco1_B6-dJ4V15B-6GFcS_XOR17COOxp5qi87MtsUVQr45cVc1E5d2hYTwz0v6-5bfTVyvoA6wX-D9nNYH37GGOALvm3IMWb9IfF0tIKLvq2JuLNf9mtaLOHdX9vg83_m5__QVL41b-34N0HuxerTcG7ua-oK_E__y4ljLfkavrPXFQN2asui3bt3uxXfFacBodQKjcZkPSJFaroUZ5X9YX9ox2P8jvA6yHUA6mB2K5ZjUwICr3ljph9HFXIvUeREcHXuYuPWSq9oF47oEud3WfqhR4Yg67ALX4sP2zSlnYDTOw2RNwxt1gh-k9CPZ4AYzKwENRgeKArw5--mr6sVRb7-7sIvhvl4Wt3gpqgCUfkALnTXjIkaZlisMOHO77AeLXAQLfIl3zWipIgzIBdrFGfsBxxvNZ5JF8BLpPHkRur866XPgWjZjrbk2TiFO56pVYC7nzwI_nA-D4MkPQR4qh4RW53vYiAMTFav4Bg9ZsS8qmlbVbjMcaIV7xmi7qzLKm30pRFN2ZZfneS4QRb6RB5pSlhZZkbG0ynfbQhRFy_K26bDk-2xPdimOXKptmE22xvYb6dyMh4KxXbFRvEHl4gRMqcZXiJuh9fOnjT3EeaaZe0d2qZLOu_coXnqFh6_XmfZcquR14D45mTmZHYa8w1AcLubjXBxuY3H1kBWb2arDLw9XUWnoxJjJ_wEAAP__7cJ5lQ">