<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">