<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/109450>109450</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
`<QVariant>` causes big clang-tidy slowdown
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang-tidy,
performance
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
firewave
</td>
</tr>
</table>
<pre>
```cpp
#include <QVariant>
```
`.clang-tidy`
```yml
---
Checks: >
*,
-abseil-*,
-altera-*,
-android-*,
-boost-*,
-cert-*,
-cppcoreguidelines-*,
-darwin-*,
-fuchsia-*,
-google-*,
-hicpp-*,
-linuxkernel-*,
-llvm-*,
-llvmlibc-*,
-mpi-*,
-objc-*,
-openmp-*,
-zircon-*,
cert-err34-c,
cppcoreguidelines-pro-type-static-cast-downcast,
cppcoreguidelines-rvalue-reference-param-not-moved,
google-explicit-constructor,
-bugprone-assignment-in-if-condition,
-bugprone-branch-clone,
-bugprone-easily-swappable-parameters,
-bugprone-empty-catch,
-bugprone-macro-parentheses,
-bugprone-narrowing-conversions,
-bugprone-signed-char-misuse,
-bugprone-switch-missing-default-case,
-bugprone-unchecked-optional-access,
-clang-analyzer-*,
-concurrency-mt-unsafe,
-misc-const-correctness,
-misc-no-recursion,
-misc-non-private-member-variables-in-classes,
-misc-throw-by-value-catch-by-reference,
-misc-use-anonymous-namespace,
-modernize-avoid-c-arrays,
-modernize-deprecated-ios-base-aliases,
-misc-include-cleaner,
-misc-unused-using-decls,
-modernize-loop-convert,
-modernize-macro-to-enum,
-modernize-raw-string-literal,
-modernize-replace-auto-ptr,
-modernize-return-braced-init-list,
-modernize-type-traits,
-modernize-use-auto,
-modernize-use-designated-initializers,
-modernize-use-nodiscard,
-modernize-use-trailing-return-type,
-performance-avoid-endl,
-performance-inefficient-string-concatenation,
-performance-no-automatic-move,
-portability-simd-intrinsics,
-portability-std-allocator-const,
-readability-avoid-nested-conditional-operator,
-readability-braces-around-statements,
-readability-container-data-pointer,
-readability-enum-initial-value,
-readability-function-cognitive-complexity,
-readability-function-size,
-readability-identifier-length,
-readability-identifier-naming,
-readability-implicit-bool-conversion,
-readability-isolate-declaration,
-readability-magic-numbers,
-readability-suspicious-call-argument,
-readability-uppercase-literal-suffix
```
```
$ clang-tidy common.cpp --enable-check-profile -- $(pkg-config --cflags-only-I Qt6Core)
===-------------------------------------------------------------------------===
clang-tidy checks profiling
===-------------------------------------------------------------------------===
Total Execution Time: 20.2481 seconds (20.2487 wall clock)
```
It does not appear to be a single check:
```
---User Time--- --System Time-- --User+System-- ---Wall Time--- --- Name ---
0.2992 ( 4.3%) 0.6637 ( 5.0%) 0.9629 ( 4.8%) 0.9630 ( 4.8%) bugprone-stringview-nullptr
0.2908 ( 4.2%) 0.5689 ( 4.3%) 0.8597 ( 4.2%) 0.8546 ( 4.2%) bugprone-use-after-move
0.2382 ( 3.4%) 0.4826 ( 3.6%) 0.7208 ( 3.6%) 0.7190 ( 3.6%) bugprone-standalone-empty
0.2108 ( 3.0%) 0.4565 ( 3.4%) 0.6673 ( 3.3%) 0.6749 ( 3.3%) readability-non-const-parameter
0.1952 ( 2.8%) 0.4015 ( 3.0%) 0.5967 ( 2.9%) 0.5966 ( 2.9%) readability-container-size-empty
0.1794 ( 2.6%) 0.3919 ( 2.9%) 0.5713 ( 2.8%) 0.5736 ( 2.8%) readability-redundant-control-flow
0.1849 ( 2.7%) 0.3881 ( 2.9%) 0.5730 ( 2.8%) 0.5732 ( 2.8%) bugprone-unused-return-value
0.1779 ( 2.6%) 0.3838 ( 2.9%) 0.5617 ( 2.8%) 0.5650 ( 2.8%) bugprone-suspicious-string-compare
0.1769 ( 2.6%) 0.3742 ( 2.8%) 0.5511 ( 2.7%) 0.5504 ( 2.7%) bugprone-infinite-loop
0.1712 ( 2.5%) 0.3727 ( 2.8%) 0.5439 ( 2.7%) 0.5448 ( 2.7%) modernize-use-nullptr
0.1626 ( 2.3%) 0.3733 ( 2.8%) 0.5360 ( 2.6%) 0.5357 ( 2.6%) modernize-use-transparent-functors
0.1664 ( 2.4%) 0.3590 ( 2.7%) 0.5255 ( 2.6%) 0.5253 ( 2.6%) performance-move-const-arg
0.1655 ( 2.4%) 0.3583 ( 2.7%) 0.5238 ( 2.6%) 0.5241 ( 2.6%) bugprone-assert-side-effect
0.1624 ( 2.3%) 0.3531 ( 2.7%) 0.5155 ( 2.5%) 0.5158 ( 2.5%) bugprone-multiple-statement-macro
0.1613 ( 2.3%) 0.3512 ( 2.6%) 0.5124 ( 2.5%) 0.5126 ( 2.5%) bugprone-suspicious-semicolon
0.1561 ( 2.3%) 0.3383 ( 2.5%) 0.4944 ( 2.4%) 0.4948 ( 2.4%) bugprone-unused-raii
0.4487 ( 6.5%) 0.0238 ( 0.2%) 0.4725 ( 2.3%) 0.4725 ( 2.3%) bugprone-reserved-identifier
0.1431 ( 2.1%) 0.3162 ( 2.4%) 0.4593 ( 2.3%) 0.4589 ( 2.3%) bugprone-sizeof-expression
0.1439 ( 2.1%) 0.3134 ( 2.4%) 0.4573 ( 2.3%) 0.4575 ( 2.3%) bugprone-inc-dec-in-conditions
0.1391 ( 2.0%) 0.3045 ( 2.3%) 0.4436 ( 2.2%) 0.4448 ( 2.2%) bugprone-chained-comparison
0.1209 ( 1.7%) 0.2578 ( 1.9%) 0.3787 ( 1.9%) 0.3782 ( 1.9%) misc-confusable-identifiers
0.2194 ( 3.2%) 0.0992 ( 0.7%) 0.3186 ( 1.6%) 0.3181 ( 1.6%) modernize-use-using
0.0861 ( 1.2%) 0.1997 ( 1.5%) 0.2858 ( 1.4%) 0.2864 ( 1.4%) readability-redundant-declaration
[...]
```
`pkg-config` contains `-I` options for for includes and I manually modified them to `-isystem` but it does not make any difference.
There are other headers which are also quite slow (e.g. `<Qt>` and `<QFileInfo>` ) for just being included but they are not as bad as this one.
I can reproduce this with LLVM 18.1.8 and 19 using Qt 6.7.2. Unfortunately Qt6 is not available on the system I have all my older LLVM versions installed on so I cannot check when/if this is regressed.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8WUtv4zgS_jXKhaAgUQ9LhxxmuidAgNkFGjsze6bJksVuitSSlN3Or19QkiXKljOXxQbpTlIqVn31YD1kaq04KYDXqPg1Kr6-0MG12rw2wsCFnuHlqPn1NSqT6Zv1fZR8jZJfIpIJxeTAAUXZl29_USOoclH22_z4dmD-80aMmaTqhJ3g1_XhjffayYmCMZ5--dIC-2Gj7Be0SEYR-SUiX-Y_5i9MjxaExPvPpANDnzxT3GjBtw_xUWvr9g8wMM-e9D3TBk6D4CCFAnsnlFNzEWr_bDOw1oonGE9anyTcSWsF6_t9finU8PMHGAVPHCLlubsT50lSHNn-ga4X-w_08fuTI7oH1d0BxB_CML3vgtGvYEyWY7Y-fPRpbzR21x6wddQJhhm1DnN9Uf6Xzw6aM5UDYAMNGFAMcE8N7bDSDnf6DHw9O_sbfvZSMOEw08o6MzCnTZgjw6k3WgGeLlAHymGhsGg8PxdOaPXoleXQ0VDFWsykVrAnFKgV8orthfY9PcoZLTgwdpe9690VM-pY-4nSjjKjvSRQrgULu6IUNUZfhDp5O85grNDKfiJ0rB4cs5Ya3Ak72F177EU41noG60VzaOggnY_eLvugmL_5wLHuvSepxJQxsDtApoJCFZXXDzB3Cce0YoPx8b7izuFBWdrATn4Ly6YwY6aNAebURtfEoDQ2wIbRI4_PFO6NOFMHuIPuCAaffUk8SrA-LZikduvw8Zhrjb7g4xVPyTkG0P-5ZOn9gcECpkqra6cHixXtwPaU7ZmkORglPgDTsy9wDFNj6HWDYGHh0Btg1AHHQlt8pF6LFHQH8Vz0MZNAFZgnvhzUYIHjYQ42k_t6pdb9nGbuMxOmxHUagxq6XUmGXrB1xquTwpd7-Zk8A72kDDAdnMa9M_siwQ1G-ZvKvF-UcFiKsMYEvGNFcoYKt5OhK9sYvcHpXRn-IQd_naZAKOEEleJje-W3_EpzYRk1_O-0emzSe2e2ygMOpPZgGm066uvilC-guHzCIBQ0jWDCV7zZ5_6eUQeKbsve5pjSo-3dWLZ9yX3E3Gvj6FFI4a7Yis47wcu3goUu2HA5jqmUmlGnzXSFA04DlN84J7MUWO_cpURT6TuVodvaHp4b428xNXpQfOw64Gu9fcLOtHJUKDCYU0dxr4Vy8Ey2T-dboKcS8ISxGRTzcDHTJ89-Bsx010v4Kdz1785Y8bHj65BVcFBONAIMlqBOrn0iMuBTtBPq9Iyvm1vnUWsZ9JFn7FZLXzh9oaCG7rfO8EBHT4JhNfg6-ywQdrC9YMKXSUalxNScBh-4J-xD34Px7ehWP7Admkb8_Hyc3RBJjtbpFjHddVrFrO8RxqDGJj42NT_CNEICwhhFJI9I1f8Yb1AjTghj1kh6slgrecXv6Jsrv2gDEalnJdnX6Rv_r74WibfJKTBhnL7RhNdH-_8E4Q_tqES__QQ2-FxAf4gO_A5AkpjkVYos-PtrUUSqiXRAFyolYlKzH6ur9mL27hDXYJHSDtG-B2qQ0-gIiCLfqyRMRkfZfox9ImL8pwUzgsIYj5R_Xa2DbiaNFM8SkV-nBzMN_9uDXM75__5JO58HeJGexKSuibcM5XEWkSIi9Uguy-wwklERJwG9Lkk90fO42tCz5J6-TmNj1T4LuGA1SOk7YAggqW4nSSCxKKtFU4isKurDHn9V5OUDfZ3wfCtsHJipFQTqs2qyH2VxPh9L4rwi5Y1aBkoO5Ab2jp7WyT09MJ8qTuUyOIfa01Ve6Oa8KIt7VFNYDtlIz7bROuT1jX2hh-VGjbXcD5zLYB-gSOti8gHZxDRP0mIPXFGXcwRIXG_p5T19v1f5FvHgi_RQ57fjoW-zOq3vxSZxcUizGzUEXRyy8oEeojDAB8WpGhctZ7TEjdSXGUcSp1W-aDuEKKoq3TX6cEv8Bxzknh7sG-O8Og9HUycOHXGodx1RZdUuhDI97EIoi0doa1auDWuZqjq_rG2QlPWcGBsgh_zBtlFhkaZ7viuKJL-nLziEavxIMk3nG93poqTYKCf71ubZDetGd55XD5juptqHmpSWZEmibKM720-6rEz2IlZkxeGe_jAoKzutyNMEpY3dACkXz4V1ICvq5N6qJC5IUezCIEX2QA9nZV8T5_pAzWmjf5Z4r77KdgNN1gzdAsjTe3r4QgOMw1ZwwNA0wNw2EvluJIpsP9XS1QXFll490Nc3FYN0opewztvTDrgBMtebexxrlm4sTlfcWxxrZhUPjSK4ktAJpqVWIYSiTHd9ka3RKNYWVue7qZPX64XIH_vkXJmoEIHm3M8845ky0JAs0U42nTg_kGIP5x59UWzAgjn7RXQZ-kPT8zXcaWh6WpJdI4s624VQVPUDPXi39AG6wfCzN2DHBWKDoL5H4PVn-04uDk_0H567QCjmd5Lx_c1tYdwUg6xenBD24yzJH4T6mK2NcBOdoCA-zkms9R2az71A2K0PSDL5IN3cOVIcZonppi9lh1vWPNDJPf32SqwZ7Li6rFlgN-PSbUTINjYltyHWj2Kb9KjKm6ZyS08f6NvCPL5LClQnVbkcIYuT07peTAyvOamKxSX5hn6r5yt9fzgJl9NpNSh-jeM4Kr5-viKuy11UJmgeuSyKygS_e8r0gtOiRpvx3_yCzSKqOHpHHVUDlfLqveHdz5FrofNLi5cg7LhgeDnHwSERbDcd_QGIqivioplfJsYhtD9aMICoAaRdCwa1QDkYiy6tYO1Ip9Jq9J9BOEBW6ot3E8Sn2CuOsi_fxg97ymTEOZPehIR31ej5iXemN-n7YB06glCnm3V8hOtauI6axm3MoiPl_odrhUVabeG-I0YVMtAbzQcGE9NFuBb9_vtf_0BpFadxNWJJazTmCvrmUBkfYhKjP1WjjRsUdSCvfqdGYl4Bz1RIn99IKw8HTf5E76ilZ-8Bibor0pKDmfTcXogjoayjUgL3J61GIz4vctwf0aUFFZE30UxAhUUGTr6IAY9f-GvG66ymL_CaHkjpFyWSvbSvQFhyyCpeHrNDSeqy5illx4rnNMtrXuQv4pUkJE9qkqSHIiEkLklZH5o8JzxvivTYRHkCHRUylvLcxdqcXoS1A7ymSZ0XyYukR5B2_KSPkOCTOEIi8iUiJBhBPK34-mJexw-LjsPJRnkihXV2le2Ek_A6xz74BNDnOR0sWHQUp_CFgk8jri_qZTDytXWut37RJm8ReTsJ1w7HmOkuIm9ew_wD90Z_9yMIeRtNsRF5m605v5L_BgAA___KqvB3">