| Issue |
52825
|
| Summary |
clang-tidy crashes on formatting heavily templated code in LLVM-libc
|
| Labels |
clang-tidy,
new issue
|
| Assignees |
|
| Reporter |
michaelrj-google
|
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.
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs