<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJztWklz2zgW_jXyBSUWwZ0HH2RZ6faMYnts9zYXFgiCEhOSYBOgbc2vn_dASpYdJ-0ESfWlq7QRAL-3LwCVy2J3-ttWtIQVRdVuCK9Zu5nrqtgRvhX8oyJakvX61_fzuso5uSA9a0nVwiB-KzUI8rAVvSCyhXdJ9FaQRsI1l01Xi0dYVpCtYPdVvSNawBjToiBdJbhQeAOXBSxmg4LLI-JAgPdMbc39vfhzEEoDONPIguhkrwkj-bBxyB1QLIe6ntZPk5UiTBtucqm1bGbekjxUemuGOoY_JGl2ZCsbQYqqF1zLfod314wDg2btLF6RUvZEdTBGFAjRbpyZez5zF-Pnzyg5gzcgKS06ZZYDSC-LgaM-Dble5rVoZv6CHN9MHXIuH9passIsq-v7xrCvKsPLzEuaCrQ6igL6bCpNZpHrBXEsopRHRRkyQWOPujG-YprT0o28POEud30KS40OqsZY5qGvNHA089KRvOeAoe4F6mFPfQ6cfgBNzLx3-VDVxZNixlt8h7CuQ0NugSnQIt-iUFutOwU_4DZ49eK-Eg_KQUBH9kDw3TmlEfWiESRwQMiRMlquqgVyCcy-4AD9Db40GB6-VI8XSvdGhHcNIPS7bNBVreDSefIcABrphEBnaEcisq7lg3Hvhn00vtmgX4HoomVgmyMPx_FKK1KDkyMtNFrkjvc5DvKFZpr_RC6r9gMj83O8NVtdLs7Wq-z65upfq-Xd7cw_n3meYWrmn03MSVmruXjUPYMxRMEvI6QHMMv3i3-vsrNfLtbn2d0f1yuAOBfg4IepZba8en99sV7dwJSBfJr6_fdPJmfeGbz2_K0vzpbZu1_W65ECLLq6fDY3CbC-uLy7uPzJzB80GY2ahOvWyIxMO2gXB6zijDZxji3imM_MmG4PMn7eoeOorRzAucYgGd1A9D0ETi7ATGNE471wjTZD2mMMzMIzOz954svhXYe8hWCo5LkDbyD0h9zhmDSMtaev4-ioZY7orGrtOPBS43CoApMIK0CIlZEeRf9rsb9MTUDaEa1WzvY7y_pmsl76LGEiG-PLXL5bgMueY4xN9NTXBv6RPrMMYzbDfKc0a7oswwT-ikCY2uD7B5E0gvHiddpvJgTZP4LXlyXIjUmOquZ8zC9zBmnXP5-XrZxzKE96XlRs00pwKq5g0Z9DJbRZjLVyXlaPQmHK-gHaOlLWjjU1mXdfEInsHecQIGSCYxzahaPh52F0UBbQU_2TYkzSnq8gzw98-zc4w-QLT7UJi8lrXEwZG0nD561mYKhFy-rd_wSKs4SGCscrbKluf2X1GXItepNC_AXFYg_Q91WvB1aTqe4s4AXKlOMvvA1bCtbKdtfIQZGWAaPY2WBLMK55SWACuYeBqr3q1pcA8Cr6dS83PWuQc3EjSuy24A7W76460TPoIMZlVx1mOZx9FWUt-WfnLmX76fR_QNy7XTdJQBZKiV5X0tSqmUdfY6FSS-hMWV8pCRKBPNJk4YMHeRA7g3FC04Me1hIJ3V0zmKq0b3QVaJBoQ9-DvE1KBt1MMSW86_VqcbsiasixbzPN6r45BeDnaRjmnjVMYxfS8nooxvo49rY54x8hvLmYSIC6-UdSDA16wTjkwlQ6WYMcRPms4_2TSV4U5KkzByXO_KWQ5cxfQaPbg19hJRZgFrA9Nq37JhpW_rY1TayJV6zaCs1y3O2nM893yZLVNU5DngCOMyO7cUnkGMr9eHG2v1hCTK_GMS67HUbelvXgoYss6wVqCcWFcJAtOOVrcymyXOMW4ku16M2l3F9EbgKf4bFY9PNiKc5qNkXd7fR7ObSq2rSwwUKGDwIqbTLcQUKU6_nK7y9MmMYvhfG-jzC4x82U0C8EGg31o8WKsRT4x1L5X5Dq21ilUG-OCASfJ7CGyzVcvTccr_ZBeYt0QYHfquZJ0zcDZK3ksKP1Tdh-J--gvvEOiOKV2ZtgERyYnuJbm6X7De3fQvYp-ZvDCjloonZNLuuxsGOtF60aekF2ciBbdj_t8cdFFXQWUGFwrifXi7ufCZ5ziPHIRLTQSsgWaZF79IrINTvF2z_en12tL_67usnwFjxggFLWSWh78AduXtJDJfqqegNbHPcxLGMeCob7FAuEOM_tEFiRhpY8lBAgB4R9W_eYRFkUzCFQhsf5ph3GiU5ve8EKR0nHNc4MENRPhIu6RLy4FGkpyiTFsTeCcoSDhibZYOSwekQN6DPMIvBcEb-Z0QMmy6HUj4jUe4HostCPvhrRgHlRQMtP4HDsm-D8MC5fckdTHPt203qx64dBaoVAUwodtx1ClNi4OCLE1EYPlHtFEhR2CJwV1A6BeV5kheDHnJWWCDlPbGwR8gC6ejsEmlvpAQKv5MwqLgAhD2ySphfRIAxs_AEQqFtaaTKirnB9K1sUBYutNAkItLDxSUDgBbORguYsYCy2QkiTwrWKbkCIS5vIojnk2dAmTwJCnqd2mqR55AU21kzj1PesIouHTCRWFSf10ySx8mpA8AKrPJlEPLaSguauC72LDQJLfMHtvNp1qW_jD5SVZXDcB34LDzRMraoeS2iR2-ghCKBg2JgiCMLYPfLINzaGmdlpZrCR6nU2PtAAMNhxvOg6cxFYchfRJwDz0Ax3dOPJlNKy60SBA2rI948inx0dHp6SnBSnfgHBw07YAFu8_rSpYA8s6v7DfCPlphYnQ1-ffvUjHfPcHveeoZd44cn2NCzdMBXchcYQOE_CksVl5KZulAZJXBTFSc1yUatTfBI1PdccxcVzzyWemrbiYfw7AA6F5yf2XFWnnuvBDsOjHg0T6joRLTzIpiJ1oe-LQ28WuAKMWB8OTk_6UwOJp6kwWVdKP52qnjBlThGEEQI41JWuxenx_x3wjBX_lNDiU_yGabPr_vS_C-ODuvbpmfGJ4fzUsP1_aLGgnA>52825</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            clang-tidy crashes on formatting heavily templated code in LLVM-libc
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang-tidy,
            new issue
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          michaelrj-google
      </td>
    </tr>
</table>

<pre>
    When adding clang-tidy checks to LLVM-libc I ran into an issue where one of the more complex and heavily templated pieces of code causes clang-tidy to crash and request that I report a bug. The full crash report is at the bottom, with the path to my home directory replaced with ~ for space saving.

Here are my steps for reproducing the problem: 

1. Download the llvm repository (mine is at commit `2477e69c6df5ae172107107171b1f062b8c0c031` at time of writing)
2. move to the llvm-project/build directory
3. apply this patch: https://reviews.llvm.org/D116126
4. remove the file at `llvm-project/libc/test/src/string/memory_utils/.clang-tidy`
5. run the following cmake command to enable LLVM-libc and its linting: `cmake ../llvm -G Ninja -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;llvm;libc" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DLLVM_LIBC_FULL_BUILD=ON -DLLVM_LIBC_ENABLE_LINTING=ON`
6. run `ninja libc.test.src.string.memory_utils.utils_test`

This should produce the error below. The test being run is at [`llvm-project/libc/test/src/string/memory_utils/utils_test.cpp`](https://github.com/llvm/llvm-project/blob/main/libc/test/src/string/memory_utils/utils_test.cpp) and the code it's testing is at [`llvm-project/libc/src/string/memory_utils/elements.h`](https://github.com/llvm/llvm-project/blob/main/libc/src/string/memory_utils/elements.h).

```
FAILED: projects/libc/test/src/string/memory_utils/.utils_test.__lint_timestamp__ ~/llvm-project/build/projects/libc/test/src/string/memory_utils/.utils_test.__lint_timestamp__ 
cd ~/llvm-project/libc/test/src/string/memory_utils && ~/llvm-project/build/bin/clang-tidy --extra-arg=-fno-caret-diagnostics --quiet --export-fixes=~/llvm-project/build/projects/libc/test/src/string/memory_utils/utils_test.yaml -p ~/llvm-project/build elements_test.cpp memory_access_test.cpp utils_test.cpp && /usr/bin/cmake -E touch ~/llvm-project/build/projects/libc/test/src/string/memory_utils/.utils_test.__lint_timestamp__
clang-tidy: ~/llvm-project/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp:1031: virtual clang::ento::SVal (anonymous namespace)::SimpleSValBuilder::evalBinOpLN(clang::ento::ProgramStateRef, BinaryOperator::Opcode, clang::ento::Loc, clang::ento::NonLoc, clang::QualType): Assertion `!BinaryOperator::isComparisonOp(op) && "arguments to comparison ops must be of the same type"' failed.
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0.      Program arguments: ~/llvm-project/build/bin/clang-tidy --extra-arg=-fno-caret-diagnostics --quiet --export-fixes=~/llvm-project/build/projects/libc/test/src/string/memory_utils/utils_test.yaml -p ~/llvm-project/build elements_test.cpp memory_access_test.cpp utils_test.cpp
1.      <eof> parser at end of file
2.      While analyzing stack: 
        #0 Calling __llvm_libc::builtin::Builtin<1>::copy(char *__restrict, const char *__restrict) at line ~/llvm-project/libc/src/string/memory_utils/elements.h:608:5
        #1 Calling __llvm_libc::scalar::Scalar<unsigned char>::store(char *, unsigned char) at line ~/llvm-project/libc/src/string/memory_utils/elements.h:597:5
        #2 Calling __llvm_libc::scalar::Scalar<unsigned char>::splat_set(char *, const unsigned char) at line ~/llvm-project/libc/src/string/memory_utils/elements.h:71:3
        #3 Calling __llvm_libc::splat_set(char *, const unsigned char) at line 131
        #4 Calling __llvm_libc::LlvmLibcMemoryElements_Splat<__llvm_libc::scalar::Scalar<unsigned char>>::Run()
3.      ~/llvm-project/libc/src/string/memory_utils/elements.h:513:5: Error evaluating statement
4.      ~/llvm-project/libc/src/string/memory_utils/elements.h:513:5: Error evaluating statement
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
~/llvm-project/build/bin/clang-tidy[0x5f7c5ea]
~/llvm-project/build/bin/clang-tidy[0x5f7c7bb]
~/llvm-project/build/bin/clang-tidy[0x5f7ad95]
~/llvm-project/build/bin/clang-tidy[0x5f7cf31]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x138e0)[0x7fe9fef898e0]
/lib/x86_64-linux-gnu/libc.so.6(gsignal+0x141)[0x7fe9fd420e71]
/lib/x86_64-linux-gnu/libc.so.6(abort+0x112)[0x7fe9fd40a536]
/lib/x86_64-linux-gnu/libc.so.6(+0x2641f)[0x7fe9fd40a41f]
/lib/x86_64-linux-gnu/libc.so.6(+0x357f2)[0x7fe9fd4197f2]
~/llvm-project/build/bin/clang-tidy[0x2703549]
~/llvm-project/build/bin/clang-tidy[0x27191ce]
~/llvm-project/build/bin/clang-tidy[0x271968b]
~/llvm-project/build/bin/clang-tidy[0x2719712]
~/llvm-project/build/bin/clang-tidy[0x1c2d84d]
~/llvm-project/build/bin/clang-tidy[0x1c2cad1]
~/llvm-project/build/bin/clang-tidy[0x1c2a226]
~/llvm-project/build/bin/clang-tidy[0x1c37caf]
~/llvm-project/build/bin/clang-tidy[0x1c37bc8]
~/llvm-project/build/bin/clang-tidy[0x25c4bac]
~/llvm-project/build/bin/clang-tidy[0x25c1b26]
~/llvm-project/build/bin/clang-tidy[0x264fca2]
~/llvm-project/build/bin/clang-tidy[0x264fb45]
~/llvm-project/build/bin/clang-tidy[0x2614541]
~/llvm-project/build/bin/clang-tidy[0x26110fc]
~/llvm-project/build/bin/clang-tidy[0x2610e03]
~/llvm-project/build/bin/clang-tidy[0x25dda72]
~/llvm-project/build/bin/clang-tidy[0x25dd1df]
~/llvm-project/build/bin/clang-tidy[0x25dcda3]
~/llvm-project/build/bin/clang-tidy[0x1ba4aa7]
~/llvm-project/build/bin/clang-tidy[0x1b98d01]
~/llvm-project/build/bin/clang-tidy[0x1b987f8]
~/llvm-project/build/bin/clang-tidy[0x1b1ce5b]
~/llvm-project/build/bin/clang-tidy[0x1b1bb93]
~/llvm-project/build/bin/clang-tidy[0x1b1b624]
~/llvm-project/build/bin/clang-tidy[0x2979325]
~/llvm-project/build/bin/clang-tidy[0x2c5ae8e]
~/llvm-project/build/bin/clang-tidy[0x2939882]
~/llvm-project/build/bin/clang-tidy[0x2939248]
~/llvm-project/build/bin/clang-tidy[0x286c78e]
~/llvm-project/build/bin/clang-tidy[0x1b0028a]
~/llvm-project/build/bin/clang-tidy[0x1a83ec1]
~/llvm-project/build/bin/clang-tidy[0x1b00134]
~/llvm-project/build/bin/clang-tidy[0x1aff4e0]
~/llvm-project/build/bin/clang-tidy[0x1b0159f]
~/llvm-project/build/bin/clang-tidy[0x1a81db1]
~/llvm-project/build/bin/clang-tidy[0x4464fa]
~/llvm-project/build/bin/clang-tidy[0x445702]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xea)[0x7fe9fd40be4a]
~/llvm-project/build/bin/clang-tidy[0x44561a]
ninja: build stopped: subcommand failed.
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztWltT4zgW_jXhRRWXJd8feAghPcNuGlhgbvvikmU5cbdteSwZyP76PUd2QqDpHrrdXfMyVSGOJfk794ssMpXvTn_byobwPC-bDREVbzZzU-Y7IrZSfNTEKLJe__p-XpWZIBek4w0pGxjEq9a9JA9b2UmiGvgriNlKUiu4F6puK_kIy3Kylfy-rHbESBjjRuakLaWQGh8QKofFvNdwe0QcCIiO6619vpN_9lIbAOcGWZCt6gzhJOs3DrkDikVfVeP6cbLUhBvLTaaMUfWMLclDabZ2qOX4Q5F6R7aqliQvOymM6nb4dMUFMGjXzqIVKVRHdAtjRIMQzcaZueczdzF8_4ySc_gDJG1kq-1yAOlU3gvUpyXXqayS9cxbkOOHqUPO1UNTKZ7bZVV1X1v2dWl5mbG4LkGrgyigz7o0ZBa6zI8iGSYizIuASxox6kb4iWhGCzdkWSxc4XoUllodlLW1zENXGuBoxpKBPHPAUPcS9bCnPgdOP4AmZuxd1pdV_qSY4RHPIbxt0ZBbYAq0KLYo1NaYVsMPeAw-nbwv5YN2ENBRHRB8d05pSFk4gPgOCDlQRsuVlUQugdkXHKC_wcWA4eGiO7zRprMivKsBodulvSkrDbfOk-cA0EAnADp9MxBRVaUerHvX_KP1zRr9CkSXDQfbHHk4jpdGkwqcHGmh0UJ3eM5xkC800_wnclk2HziZn-Oj6epycbZepdc3V_9aLe9uZ975jDHL1Mw7G5lTqtJz-Wg6DmOIghcrJAOY5fvFv1fp2S8X6_P07o_rFUCcS3Dww9QyXV69v75Yr25gykI-Tf3--yeTM3YGnz1_64uzZfrul_V6oACLri6fzY0CrC8u7y4uf7LzB02GgybhvrEyI9MO2sUBqziDTZxjizj2O7Wm24MM33foOHqrenCuIUgGN5BdB4GTSTDTENH4LNyjzZD2EAOz4Gyanzzx5Yi2Rd4CMFT83IE3EPp95ghMGtba4-U4OiqVITovm2kcsMQ6HKrAJsISECJtpUfR_1rsL1OTkHZkY7Sz_c6yvpksS54lTGRj-Njbdwtw2XOMsZGe_trAP9JnmmLMppjvtOF1m6aYwF8RCFMbXH8QSSuYyF-n_WZCkP1D-HxZgsya5Khqzof8MueQdr3zedGouYDyZOZ5yTeNAqcSGhb92ZfS2MVYK-dF-Sg1pqwfoK0jZe14XZF5-wWRyN5xDgFCRjguoF04Gn4eRgdlAT3dPSnGJu35CvJ8L7Z_gzOMvvBUm7CYvMbFmLGRNHzfGg6GWjS82v1PojhLaKhwvMSW6vZXXp0h17KzKcRbUCz2AH1fdqbnFRnrzgI-oEw1_MLHsKXgjWp2teo1aTgwip0NtgTDmpcERpB7GCibq3Z9CQCvol93atPxGjmXN7LAbgue4N3uqpUdhw5iWHbVYpbD2VdR1kp8du5SNZ9O_wfEvdu1owRkobXsTKlsrZox-hoLpV5CZ8q7UiuQCORRNgsfPIhB7PTWCW0PelhLFHR3dW-r0r7R1aBBYix9BnmbFBy6mXxMeNfr1eJ2RXSfYd9mm9V9cwrAz9MwzD1rmIYupBFVnw_1cehtMy4-QngLOZIAdYuPJO9r9IJhyIWpZLQGOYjyWcf7J5O8KMhjZw5KnHlLqYqZt4JGtwO_wkoswSxge2xa9000rPxta5tYG69YtTWa5bjbT2bMc8mSVxVOQ54AjlMru3VJ5BjK_XBztr9ZQkyvhjGh2h1G3pZ34KGLNO0kagnFhXBQDTjla3MJslzhFuJLtejNpdxbhG4M38GxWPTzYmnBKz5G3e34e9k3utw0sMFChg8CamMz3EFClOv5yu8vTJBEL4Vh30cY3OOmWpoXAg2G-tFiRVgKvGOpvC9I9W2sUqg3RwT8zxNYw-0a7t5bjlf7oLxFuqDAb1XzqOmbHrJWfNjRejZsv5N3UM96B0Txyu5NsAj23IzxbezS_Yb2byH7lPztywrVG6J3daaqobBjrZeN7jtJdqonW34_7vGHRSV0FlBhcK4j14u7nwm-55DDKxPZQCuhGqRF7tErQtfuFG__eH92tb747-omxUfwBQOUslZB24M_cPOSHCrRV9Ub2OK4j0ERiUBy3KdMQIiybBoCz5NgIg8FBMgBYd_WPcZhGvpzCJT-cb5p-mGiNdtO8tzRynGtMwME9WLpoi4RLypkUsgiTnDsjaAC4aChiTcYObwaUH36DDP3mSujNzN6wOQZlPoBkbIXiC4PvPCrES0YC31afAKHY98E5wVR8ZI7muDYt5uWRa4X-MkkBJpQ6LinIYTxFBdHhIhO0QMVLI_9fBqC4DmdhsAZCycheJHgxUSETMRTbBEIH7r6aQg0m6QHCLxC8ElxAQiZPyVpspD6gT_FHwCBusUkTYbUla43yRZ5zqNJmgQEmk_xSUAQOZ8iBc24z3k0CSGJc3dSdANCVEyJLJpBng2m5ElAyLJkmiZpFjJ_ijWTKPHYpMgSAZfxpIqTeEkcT_JqQGD-pDwZhyKaJAXNXBd6lykIPPakmObVrku9Kf5AeVH4x33gt_BAg2RS1eMxzbMpevB9KBhTTOH7QeQeeeQbG8PU7jRT2Eh1Jh0ONAAMdhwvus5M-hO5C-kTgD00wx3d8GZKG9W2MscB3Wf7o8hnrw4PpyQn-amXQ_DwE1OaSp4en87jG0E8Qm_wzLnmxu4RPz1pH46VmqcTzpO-q06_-hTIHvXjdjVgMQtOtqdZWFA_537iRoL6sUuhpZSsYBHzg4wzflLxTFb6FA-vxqPQQUP4qnSJL1ob-TD8BwEOBecn5SlzGWwpGGU0iKnrhDRnkD5l4kKjFwVs5rsSrFYd3pSedKeWTXx9CpNVqc3Ta9QTru1rA2lZAHzewy65O61LseWy6j7MN0ptKnlieTi1cv0fzVCK_Q">