<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/60657>60657</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang-tidy crash when using std::bit_cast with C++20
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
diegohavenstein
</td>
</tr>
</table>
<pre>
We've noticed that the clang-tidy tool (version 15.0.7) on Linux, we run into a crash. In our code, we have a member function using a std::bit_cast to interpret bits of a pointer as uint64_t. Using a reinterpret_cast is our current workaround, since that does not crash clang-tidy
The callstack looks as follows
```
(anonymous namespace)::SimpleSValBuilder::evalBinOpLN(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::BinaryOperatorKind, clang::ento::Loc, clang::ento::NonLoc, clang::QualType) (.llvm.15951751361112993616) (@(anonymous namespace)::SimpleSValBuilder::evalBinOpLN(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::BinaryOperatorKind, clang::ento::Loc, clang::ento::NonLoc, clang::QualType) (.llvm.15951751361112993616):397)
clang::ento::SValBuilder::evalBinOp(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::BinaryOperatorKind, clang::ento::SVal, clang::ento::SVal, clang::QualType) (@clang::ento::SValBuilder::evalBinOp(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::BinaryOperatorKind, clang::ento::SVal, clang::ento::SVal, clang::QualType):130)
clang::ento::ExprEngine::VisitBinaryOperator(clang::BinaryOperator const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&) (@clang::ento::ExprEngine::VisitBinaryOperator(clang::BinaryOperator const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&):1572)
clang::ento::ExprEngine::Visit(clang::Stmt const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&) (@clang::ento::ExprEngine::Visit(clang::Stmt const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&):1588)
clang::ento::ExprEngine::ProcessStmt(clang::Stmt const*, clang::ento::ExplodedNode*) (@clang::ento::ExprEngine::ProcessStmt(clang::Stmt const*, clang::ento::ExplodedNode*):144)
clang::ento::ExprEngine::processCFGElement(clang::CFGElement, clang::ento::ExplodedNode*, unsigned int, clang::ento::NodeBuilderContext*) (@clang::ento::ExprEngine::processCFGElement(clang::CFGElement, clang::ento::ExplodedNode*, unsigned int, clang::ento::NodeBuilderContext*):49)
clang::ento::CoreEngine::dispatchWorkItem(clang::ento::ExplodedNode*, clang::ProgramPoint, clang::ento::WorkListUnit const&) (@clang::ento::CoreEngine::dispatchWorkItem(clang::ento::ExplodedNode*, clang::ProgramPoint, clang::ento::WorkListUnit const&):123)
clang::ento::CoreEngine::ExecuteWorkList(clang::LocationContext const*, unsigned int, llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>) (@clang::ento::CoreEngine::ExecuteWorkList(clang::LocationContext const*, unsigned int, llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>):305)
(anonymous namespace)::AnalysisConsumer::HandleCode(clang::Decl*, unsigned int, clang::ento::ExprEngine::InliningModes, llvm::DenseSet<clang::Decl const*, llvm::DenseMapInfo<clang::Decl const*, void>>*) (@(anonymous namespace)::AnalysisConsumer::HandleCode(clang::Decl*, unsigned int, clang::ento::ExprEngine::InliningModes, llvm::DenseSet<clang::Decl const*, llvm::DenseMapInfo<clang::Decl const*, void>>*):528)
(anonymous namespace)::AnalysisConsumer::HandleTranslationUnit(clang::ASTContext&) (@(anonymous namespace)::AnalysisConsumer::HandleTranslationUnit(clang::ASTContext&):402)
clang::MultiplexConsumer::HandleTranslationUnit(clang::ASTContext&) (@clang::MultiplexConsumer::HandleTranslationUnit(clang::ASTContext&):16)
clang::ParseAST(clang::Sema&, bool, bool) (@clang::ParseAST(clang::Sema&, bool, bool):236)
clang::FrontendAction::Execute() (@clang::FrontendAction::Execute():32)
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (@clang::CompilerInstance::ExecuteAction(clang::FrontendAction&):202)
clang::tooling::FrontendActionFactory::runInvocation(std::__1::shared_ptr<clang::CompilerInvocation>, clang::FileManager*, std::__1::shared_ptr<clang::PCHContainerOperations>, clang::DiagnosticConsumer*) (@clang::tooling::FrontendActionFactory::runInvocation(std::__1::shared_ptr<clang::CompilerInvocation>, clang::FileManager*, std::__1::shared_ptr<clang::PCHContainerOperations>, clang::DiagnosticConsumer*):109)
clang::tidy::runClangTidy(clang::tidy::ClangTidyContext&, clang::tooling::CompilationDatabase const&, llvm::ArrayRef<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>, llvm::IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem>, bool, bool, llvm::StringRef)::ActionFactory::runInvocation(std::__1::shared_ptr<clang::CompilerInvocation>, clang::FileManager*, std::__1::shared_ptr<clang::PCHContainerOperations>, clang::DiagnosticConsumer*) (@clang::tidy::runClangTidy(clang::tidy::ClangTidyContext&, clang::tooling::CompilationDatabase const&, llvm::ArrayRef<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>, llvm::IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem>, bool, bool, llvm::StringRef)::ActionFactory::runInvocation(std::__1::shared_ptr<clang::CompilerInvocation>, clang::FileManager*, std::__1::shared_ptr<clang::PCHContainerOperations>, clang::DiagnosticConsumer*):29)
clang::tooling::ToolInvocation::runInvocation(char const*, clang::driver::Compilation*, std::__1::shared_ptr<clang::CompilerInvocation>, std::__1::shared_ptr<clang::PCHContainerOperations>) (@clang::tooling::ToolInvocation::runInvocation(char const*, clang::driver::Compilation*, std::__1::shared_ptr<clang::CompilerInvocation>, std::__1::shared_ptr<clang::PCHContainerOperations>):88)
clang::tooling::ToolInvocation::run() (@clang::tooling::ToolInvocation::run():274)
clang::tooling::ClangTool::run(clang::tooling::ToolAction*) (@clang::tooling::ClangTool::run(clang::tooling::ToolAction*):783)
clang::tidy::runClangTidy(clang::tidy::ClangTidyContext&, clang::tooling::CompilationDatabase const&, llvm::ArrayRef<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>, llvm::IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem>, bool, bool, llvm::StringRef) (@clang::tidy::runClangTidy(clang::tidy::ClangTidyContext&, clang::tooling::CompilationDatabase const&, llvm::ArrayRef<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>, llvm::IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem>, bool, bool, llvm::StringRef):287)
clang::tidy::clangTidyMain(int, char const**) (@clang::tidy::clangTidyMain(int, char const**):2690)
__libc_start_main (@__libc_start_main:61)
_start (@_start:14)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWt1y4rgSfhpxoxrKlgGbCy4cJ5xJnWQmZ8jMXFLCbkAnsuSSZBLefks2PzaYALvsLlVJVSqAflpff93qbsuiWrOZABig7g3q3rZobuZSDRIGMzmnCxDaABOtiUyWg9-AiL8ALKRhMSTYzKnBZg445lTMvhiWLLGRkmNEggUozaTAbrfttH1E-lgK_MBE_oZIhF8Bq1xgJozEFMeK6nkb3wssc4VjmcBqjAWAKU4hnYDC01zExsrMNRMzTLE2CfJC5IUTZsYx1QYbaWWCyhQYPGFGYznFFGeyaMVU45wJ0-uMTRv_XElRsJlSCmG6xJErBcLgV6leqJK5SCwqzUQMpeaJBG25KPFXSEDOLXLC8v-zpYdyrg2NXzCX8kVbGFPJuXzV1ZGo56z-yp8koEKKZSpzjQVNQWc0BkT6pcojlmYcRr8ov8kZT0CVzbCg_IaJ79nDN0QCzhdp2X4vjMo1W8APmEbCPBmFvKhAvJonjCy_PSk5UzQdGWoAx1Jog7w7q3ll9A0TVC2_Z6Cokeq_rKSmUdyDjA_2fZNiv_t_OeXPy8xqav2obXVou91-1_W7rtdzXZf0-17P7a0GoI7zSdVxqpAXen27D0vvalzkMEXXQZDFd07nDj-o43w0tZEXup7zvtXv3jJ1J2ZMQPn7F9PM1OEhEhyEvlKQhAch3r1lXCaQfCsC-2njRmAQ6R0x3HUjt9x3ffInyK-DHpnUXBvJ_zjCgswgOI_MJyVj0NrCuwjgs3i6-OKWgk7nPAayEkQ0_M8dhxTEDpRq--lWy0VRMia21HonYSWwCqqRFAbezPkUXh965IWd_vsmiKSCqhIJ0xk18fy3VC_3BtK6Dqduj1VKeZLvobZLPDBtfgq28bBj2_sK4VpHJ955LN-9QZwbWIuso36QMbUPDitT1jbfrjtcMN-fxftVKmCLRqe7scSROjsUlC8105EUOk_XxdRXKhIOUeEmVZ1uIebnbMnd4HAvOBNMzB5lArqu-C0IXaSOmrp2wRpzOxMeaXYvpvLIpIVkiSXH8hOe_AjyIalBXtglwSW851lRoXmxBWywqLMVjp43Mfr0h8KLLWdTgtNY5T3m3LCMw9ulVPpbZNto22uC_0SVhnD0vFO9QEqLiRGeSMm3nw0gz5WAvJB4jViGykIWSVgcANUiJipcbH_xo1NscGu0WyTTjHFQ90IbKuJ6gF6Jq2m0s9QBk11ErKWo2duMlJw1Tx3S2Ei1LLtULu7FYpVQEAk2h2jjsVt-0XOqIBlnu_liq8Bm-t5j7ZBxeKSCzkCtosLp8p-ir9YzKROgymc0JoXeX-OW0ZmQ2rB44_wHSstPTuzudhor1uKgcq19ZNufbUvNA7djNgOqsaOGoMZ1SUsB9pYaOqEaKhVeNb-EStHlD5giL9pnZUI1i8faqEJwFM-paqbP9oyNoszo9biSov2hlHNrKakqA1dJ62jxtO1eTHX55fsCFKdLa-PRUtuCuZRUD21VyaNCHavyJhd9JI9s2KWfnvjpif9ObCTNobHqQM9S8qoGTZxY6x060kkUW6zLs4oznq3tQTYvQtix5PlBWEBe2HzIeAoZhyrR0-daj_Qbj_jqMa0IgXY7V6a_t-C6gjyhSvpLspEX-kHjyc1njL-CGP-Zeq_SLHbXB42vZrfUx2vqHymzO3J9HFQPucfqq9OlWEy9_vbN4XjM2cRagSozTikTq2X22pEX9tzttKJjPbb4UbzG2B4KrS89tJKBl_S9Pm3BwO35PYe4fidozQcdZ0oC4jtBEHjudDLtTTt06tMA_Imf-G63xQbEIZ5DXMfpe91O0O7H08CLu93E8SfdIPFQx4GUMl6-H5dq1mJa5zDoOb2u3-J0Alyvr7-ogR30ZZLPNOo4nGmjt9MMMxwGBYnlZZfy4sfrHNZ3UvZvpLwyM8cRIjeI3BCnlSs-mBuTFY5DhogMZ8zM80k7likiw8JByo8vmZL_h9ggMizgakSGBeI_AgAA__9rTya9">