<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/85558>85558</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang-tidy (llvm-17) crash
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang-tidy
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ksromanov
</td>
</tr>
</table>
<pre>
On our machines (Linux) clang-tidy (llvm 17) crashes when processing
```c++
#include <optional>
#include <string>
std::optional<int> g();
void f() {
std::string replace_fields[25];
const std::optional<int>& c = g();
c.has_value();
}
```
with stack dump
```
Stack dump:
0. Program arguments: clang-tidy-17 adrid059.cpp
1. <eof> parser at end of file
2. ASTMatcher: Processing 'bugprone-unchecked-optional-access' against:
FunctionDecl f : </home/kromanov1/CORE/adrid059/adrid059/adrid059.cpp:6:1, line:11:1>
--- Bound Nodes Begin ---
T - { BuiltinType : int }
fun - { FunctionDecl f : </home/kromanov1/CORE/adrid059/adrid059/adrid059.cpp:6:1, line:11:1> }
--- Bound Nodes End ---
3. runTypeErasedDataflowAnalysis
Decl:
FunctionDecl 0x70655b0 </home/kromanov1/CORE/adrid059/adrid059/adrid059.cpp:6:1, line:11:1> line:6:6 f 'void ()'
`-CompoundStmt 0x70b89b0 <col:10, line:11:1>
|-DeclStmt 0x7065890 <line:7:5, col:35>
| `-VarDecl 0x70657a8 <col:5, col:34> col:17 replace_fields 'std::string[25]' callinit destroyed
| `-CXXConstructExpr 0x7065868 <col:17> 'std::string[25]' 'void () noexcept'
|-DeclStmt 0x70b7fe8 <line:9:5, col:38>
| `-VarDecl 0x7065a00 <col:5, col:37> col:31 used c 'const std::optional<int> &' cinit
| `-ExprWithCleanups 0x70b7f78 <col:35, col:37> 'const std::optional<int>':'const std::optional<int>' lvalue
| `-MaterializeTemporaryExpr 0x70b7f18 <col:35, col:37> 'const std::optional<int>':'const std::optional<int>' lvalue extended by Var 0x7065a00 'c' 'const std::optional<int> &'
| `-ImplicitCastExpr 0x70b7f00 <col:35, col:37> 'const std::optional<int>':'const std::optional<int>' <NoOp>
| `-CallExpr 0x7065b40 <col:35, col:37> 'std::optional<int>':'std::optional<int>'
| `-ImplicitCastExpr 0x7065b28 <col:35> 'std::optional<int> (*)()' <FunctionToPointerDecay>
| `-DeclRefExpr 0x7065ab0 <col:35> 'std::optional<int> ()' lvalue Function 0x70654e8 'g' 'std::optional<int> ()'
`-CXXMemberCallExpr 0x70b83f8 <line:10:5, col:17> 'bool'
`-MemberExpr 0x70b8020 <col:5, col:7> '<bound member function type>' .has_value 0x70b3ba0
`-DeclRefExpr 0x70b8000 <col:5> 'const std::optional<int>':'const std::optional<int>' lvalue Var 0x7065a00 'c' 'const std::optional<int> &'
CFG:
[B2 (ENTRY)]
Succs (1): B1
[B1]
1: (CXXConstructExpr, std::string[25])
2: std::string replace_fields[25];
3: g
4: [B1.3] (ImplicitCastExpr, FunctionToPointerDecay, std::optional<int> (*)(void))
5: [B1.4]()
6: [B1.5] (ImplicitCastExpr, NoOp, const std::optional<int>)
7: [B1.6]
8: const std::optional<int> &c = g();
9: c
10: [B1.9].has_value
11: [B1.10]()
12: [B1.2].~std::string[25]() (Implicit destructor)
Preds (1): B2
Succs (1): B0
[B0 (EXIT)]
Preds (1): B1
4. transferCFGBlock: Element [B1.1]
Stmt:
CXXConstructExpr 0x7065868 'std::string[25]' 'void (void) noexcept'
#0 0x0000000003f7917b llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/bb/libexec/clang-tidy-17.0/bin/clang-tidy+0x3f7917b)
#1 0x0000000003f767a4 SignalHandler(int) Signals.cpp:0:0
#2 0x00007ff30cf6c630 __restore_rt sigaction.c:0:0
#3 0x00000000013dd80b clang::StmtVisitorBase<llvm::make_const_ptr, clang::dataflow::(anonymous namespace)::TransferVisitor, void>::Visit(clang::Stmt const*) Transfer.cpp:0:0
#4 0x00000000013ddaee clang::dataflow::transfer(clang::dataflow::StmtToEnvMap const&, clang::Stmt const&, clang::dataflow::Environment&) (/opt/bb/libexec/clang-tidy-17.0/bin/clang-tidy+0x13ddaee)
#5 0x00000000013c7507 clang::dataflow::transferCFGBlock(clang::CFGBlock const&, clang::dataflow::(anonymous namespace)::AnalysisContext&, std::function<void (clang::CFGElement const&, clang::dataflow::TypeErasedDataflowAnalysisState const&)>) TypeErasedDataflowAnalysis.cpp:0:0
#6 0x00000000013c8792 clang::dataflow::runTypeErasedDataflowAnalysis(clang::dataflow::ControlFlowContext const&, clang::dataflow::TypeErasedDataflowAnalysis&, clang::dataflow::Environment const&, std::function<void (clang::CFGElement const&, clang::dataflow::TypeErasedDataflowAnalysisState const&)>) (/opt/bb/libexec/clang-tidy-17.0/bin/clang-tidy+0x13c8792)
#7 0x0000000000df4f1c llvm::Expected<std::vector<std::optional<clang::dataflow::DataflowAnalysisState<clang::dataflow::UncheckedOptionalAccessModel::Lattice>>, std::allocator<std::optional<clang::dataflow::DataflowAnalysisState<clang::dataflow::UncheckedOptionalAccessModel::Lattice>>>>> clang::dataflow::runDataflowAnalysis<clang::dataflow::UncheckedOptionalAccessModel>(clang::dataflow::ControlFlowContext const&, clang::dataflow::UncheckedOptionalAccessModel&, clang::dataflow::Environment const&, std::function<void (clang::CFGElement const&, clang::dataflow::DataflowAnalysisState<clang::dataflow::UncheckedOptionalAccessModel::Lattice> const&)>) (/opt/bb/libexec/clang-tidy-17.0/bin/clang-tidy+0xdf4f1c)
#8 0x0000000000df5460 clang::tidy::bugprone::analyzeFunction(clang::FunctionDecl const&, clang::ASTContext&, clang::dataflow::UncheckedOptionalAccessModelOptions) UncheckedOptionalAccessCheck.cpp:0:0
#9 0x0000000000df58d7 clang::tidy::bugprone::UncheckedOptionalAccessCheck::check(clang::ast_matchers::MatchFinder::MatchResult const&) (/opt/bb/libexec/clang-tidy-17.0/bin/clang-tidy+0xdf58d7)
#10 0x0000000002d78179 clang::ast_matchers::internal::(anonymous namespace)::MatchASTVisitor::MatchVisitor::visitMatch(clang::ast_matchers::BoundNodes const&) ASTMatchFinder.cpp:0:0
#11 0x0000000002da9397 clang::ast_matchers::internal::BoundNodesTreeBuilder::visitMatches(clang::ast_matchers::internal::BoundNodesTreeBuilder::Visitor*) (/opt/bb/libexec/clang-tidy-17.0/bin/clang-tidy+0x2da9397)
#12 0x0000000002d78e14 clang::ast_matchers::internal::(anonymous namespace)::MatchASTVisitor::matchWithFilter(clang::DynTypedNode const&) ASTMatchFinder.cpp:0:0
#13 0x0000000002d97aac clang::ast_matchers::internal::(anonymous namespace)::MatchASTVisitor::TraverseDecl(clang::Decl*) ASTMatchFinder.cpp:0:0
#14 0x0000000002d97ba9 clang::RecursiveASTVisitor<clang::ast_matchers::internal::(anonymous namespace)::MatchASTVisitor>::TraverseDeclContextHelper(clang::DeclContext*) (.part.0) ASTMatchFinder.cpp:0:0
#15 0x0000000002da15d7 clang::RecursiveASTVisitor<clang::ast_matchers::internal::(anonymous namespace)::MatchASTVisitor>::TraverseTranslationUnitDecl(clang::TranslationUnitDecl*) ASTMatchFinder.cpp:0:0
#16 0x0000000002d97ab7 clang::ast_matchers::internal::(anonymous namespace)::MatchASTVisitor::TraverseDecl(clang::Decl*) ASTMatchFinder.cpp:0:0
#17 0x0000000002d97dd4 clang::ast_matchers::MatchFinder::matchAST(clang::ASTContext&) (/opt/bb/libexec/clang-tidy-17.0/bin/clang-tidy+0x2d97dd4)
#18 0x0000000001c9ee98 clang::MultiplexConsumer::HandleTranslationUnit(clang::ASTContext&) (/opt/bb/libexec/clang-tidy-17.0/bin/clang-tidy+0x1c9ee98)
#19 0x0000000001f3a5cd clang::ParseAST(clang::Sema&, bool, bool) (/opt/bb/libexec/clang-tidy-17.0/bin/clang-tidy+0x1f3a5cd)
#20 0x0000000001c60c39 clang::FrontendAction::Execute() (/opt/bb/libexec/clang-tidy-17.0/bin/clang-tidy+0x1c60c39)
#21 0x0000000001bdf59b clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/bb/libexec/clang-tidy-17.0/bin/clang-tidy+0x1bdf59b)
#22 0x000000000151d20a clang::tooling::FrontendActionFactory::runInvocation(std::shared_ptr<clang::CompilerInvocation>, clang::FileManager*, std::shared_ptr<clang::PCHContainerOperations>, clang::DiagnosticConsumer*) (/opt/bb/libexec/clang-tidy-17.0/bin/clang-tidy+0x151d20a)
#23 0x00000000014b9812 clang::tidy::runClangTidy(clang::tidy::ClangTidyContext&, clang::tooling::CompilationDatabase const&, llvm::ArrayRef<std::string>, llvm::IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem>, bool, bool, llvm::StringRef)::ActionFactory::runInvocation(std::shared_ptr<clang::CompilerInvocation>, clang::FileManager*, std::shared_ptr<clang::PCHContainerOperations>, clang::DiagnosticConsumer*) ClangTidy.cpp:0:0
#24 0x00000000015151f3 clang::tooling::ToolInvocation::runInvocation(char const*, clang::driver::Compilation*, std::shared_ptr<clang::CompilerInvocation>, std::shared_ptr<clang::PCHContainerOperations>) (/opt/bb/libexec/clang-tidy-17.0/bin/clang-tidy+0x15151f3)
#25 0x00000000015187b0 clang::tooling::ToolInvocation::run() (/opt/bb/libexec/clang-tidy-17.0/bin/clang-tidy+0x15187b0)
#26 0x000000000151aeca clang::tooling::ClangTool::run(clang::tooling::ToolAction*) (/opt/bb/libexec/clang-tidy-17.0/bin/clang-tidy+0x151aeca)
#27 0x00000000014c7988 clang::tidy::runClangTidy(clang::tidy::ClangTidyContext&, clang::tooling::CompilationDatabase const&, llvm::ArrayRef<std::string>, llvm::IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem>, bool, bool, llvm::StringRef) (/opt/bb/libexec/clang-tidy-17.0/bin/clang-tidy+0x14c7988)
#28 0x0000000000c2bc18 clang::tidy::clangTidyMain(int, char const**) (/opt/bb/libexec/clang-tidy-17.0/bin/clang-tidy+0xc2bc18)
#29 0x00007ff30bf85555 __libc_start_main (/lib64/libc.so.6+0x22555)
#30 0x0000000000c2382d _start (/opt/bb/libexec/clang-tidy-17.0/bin/clang-tidy+0xc2382d)
Segmentation fault
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW9ty4rjWfhrnRkXKljE2F7kAB2a6ajKd6jCH_yolyzLobyFRkkyHudjPvkvyUeYQeobsmdq1u9IBdFj61rcOWpIDUoquOSEPXjT3osc7VOqNkA9flRRbxMX-LhP54eEzB6KUYIvwhnKigAeTnygv3zw4BZghvh5pmh9MM2P7LQhi2yGR2hAFvm0IBzspMFGK8rXnP3r-rP498asf7MG5-alaYUg5ZmVOgBemYqep4Ih54eJUt9LSCG077W-lcy-ceeGsm5xSrr1wAdYeTDw49cJ5f8Je0BwUVRfw4jkAVTtoJVXrAEl2DGHyWlDCcuVFcxh50eNAGgAAYMGVBueBeHACMPDCxyNEdvb9BqnXPWIlGeKNHwfc9Vf-RvUGKI3wV5CX291JrquPL92gsB7h33v-9FmKtURbgOS63BKulRfOejYeBTFAuaS5H03v8a5eITAzvTAlojAc75BURAKkAeE5EAUoKCPVSGhGzl5WT0jjDZFG-HPrGsCDcVaud1JwMio53hD8leSjhrsRwmagB2OA1ohypVvonj9dlhybcY8EM1AAI9kLUw8uN2JLPLj8Wnt04MFl-vnLwoPLRpHTb6164WzihbPAgylglBPzPrANjcONRiMwFyXPwc8iJwrMyZpyMBqNOmOuwMj61LykTFO-OuyIhUe5Bq05zcCi5PXQ_7gyHZChQgued-qExnyytDosJFIkf0QaFUx8m3HEDoqqapzB3RrHUcZ_i_1JFGX-RytUN5gBE0MhjG2Q1-EE4zYqRqnY7ozCL3qrLb4smVb4sDBaBP558wPgxenIaNbOnkTJ1M6uZ8ReOIuMhEpaGLmTgYHwK5I9dmKUdKv3p46NYjWoeJCLjIaDbNWmJxgDjBijnGqQE6WlOJB8iCH9_ffUJC1ZYr1428lGmUkPTBBbX7m4kss04IK8YbLTLeUnKMvigiQ9yqYDvZN3KUO-f5qyuKMsDECpSG7SLozfy8_AgxPLmyGtvzawqxuCfqN6kzKCeLlTjRpxj6zwCMcV6xqawtl1AwGrdogBM09IE0kRo3-QFdnuhETy0Bo0i4vgb8AIyJsmPCc5yA7gVyT7ZoMxrv3mSqO45gC1ST5td4xiqlOkdF_dvmd8vLpemP4sPu8GDgt6OFPEWC--svF7-K5AdnnIwD9OEjWJMuj6xXuLVwE-s9m0zqlmfpPtV-JZUK6JiVJ0OMNHw4mJ5C-k6KFBmf8n0Ex7HtcAqQWOTYaB8bp2tWsktYir7PhEthmRjvmyJCz6iSvw3fTT5stMCNZJtFFqpfUk-fB0CmtEeGGa2X15a2eaaqHSTx92pPa-rmyshIYZ8rv64jTXWeK7yfPjksBtAj9d_tAr_CpCo_kcGsMtfl59-T9jvairq15KjO2ZJbCF9AzMg6PJQX-C2eKBmTDcEo1Rzu5803Y-NPO_8-QAAAjNtHX7cWyrPoPtPvSiR4NnGLkGz5l46yO9HLpms7bvOgWibumx1S3peiddX3QBlk2C1off845u2bgTPenbI7FnkCtc5OyBypodNx9tlNYLGU_pHbaaEUE3IvCHFIAAdt3QCPjXWa-oTpQdR1X9VWItZF_1Z0ly10fhBf_1j_zXt87_-6fVwPeP5Tq-Pzb1vJaIq4LIdPnDnAn81QxbMGJOfw0FrUhTsrXBd6livLZErL3vRJnowdAH_pvf_AuLeBrEGWBsv60FH1T15llSru2JdiURJvU9RNUn0bdXobQkaGuTSGrOXbVRPLgUZslllnlwyWhG3gj24NI57977ZgDlTrsH5_5bjaizowfDYAB5EqMxeKFrjtiPiOeMSA8mNYKqWdVHGd_-bwXBWlBcFKGPiwmehD54fZVEaSHJq9RA0TWyoX-Pj6eHfRxBmOeJn1Xn-IoWY8hfqaJayDlSxGxhLWVb9JW82nh73Wkbzb2JeX3gqz55MEFc8MNWlApwtCVqZw0wrbpXtWvVKxlR1uDhouq37R5MBsCqYK8yFGhknKZpPNQTEXIebuPq7pLuGANgJRZ8_4R2DZDJgIQ-yGGfK23B91QKboLJDr2F39VqOn4XuTzgOPLj93loQ97ho2m9TsN3XKC5GEgF1-StkdYmh6aK8cK0SQkukiYTXYXl_L3Ei0aa9IRMq70HnJ9x2t8mA56TeArP47l8VXLBCQ1bUrAlE99q4v4qAd_hqM5S_xhL3SJurLmcuIn79vTzYlwEuLfFLN52BGuS25vmmog9sbt3r6VXjJxV-KSalyb80lyAfq6lz-z155PICatG_IS0ptjW_oainq0QYwKjfyLK5udizBz57p8GsPiIILu45D8rzD7Unh8SpFUIOjGaDGI0Gk_8vsp2rn3XPD2oo8Ao_QdpTkguk86t9BkuZy8rd9v6U7RVTcrQc2ZYahpP7zfToe5JHl-j-6WVqhG23-UEKf26rZ7M1JW1fU6zpDy3z2qahi9ElazvgbcxvNGtNbyppZ36H-ZxEsRTcBGvPQHbHHdFaWJ1mb2smuq0a3Ra9uaDbX6PLfvcpHps0uemed5V8XhsZ6Nq4KqKpuE0_h5Vu6VXkpB5SVlrsg4_Ue9pcLXQtqKf3cb6tcqO-eHQ_CQYf7T5rbzfqN4sKdPDg8LjwZZzlpLvtnDoajONEcIfrc1Koj2Ritjnca4qtmV2LfjxEHyGnEj8QnApFd2TPoL0A7VbHCtYp-ofCdsdGa7r7jz2foekNh55HQXRIEKDyM3EfzcF9pzMkMn2v3Cqj01-csDVHjA5ct_suxLU3-q-8RB8nr-TSY42vm0N0MUxqBBukwktPCcTOhVQgKeETJM-_qeSabpj5C0VXJXbBnN14zSw-4crUONzFHDKmKAIUYTzvgLPSCpyxO4L2aK68qoeoDSvN4FZoejDhL7L88THoZPmltJwxfNZXaJXR0SCS026q96_TJ9d1sHlVAdBlhfR1LnNS8V2RxmRn7jSiGPiIJudqn5dRW5m-gqag93ZxYMoyKGPnApWCEZP41oic9I-tOfCT3xvjrWVNt398gZJkturSiffdqS0s6pjcp8HysgT4mhNqlKm_3znjNjn9EcTMYhyIj_viERVdX8k-pGiNRdKU9wG5a2KpZpFh2b3wnecTZMAnj4oyJKnpn1lxSUnx7QDzp5_HLNVVFsmzIkzQ4o4Z6ruQmUmJTp8IUX_YqL7Gz5n6CeuZWk21C-kSLl-tobouvdFnao_74lk6GBM-XJQmmxrSW7K6Et-sQsaFO0t5X-xv7W2PLk3wvEgPqOgCM8aeiUE6-t3iii8QbJ3g--emiXdN7tTz2mu5eIsxX-FxRtFpOHNichoQGwSZ_73Enu7XaVa3wE4GQBEBJ_PzJUXCcH62C5p02wtt8t5Bp-jQOzmPBxPk-R_Oe_9nHcLc1RsO-Zw7-kwzHBwxhy4ofoJGeHVA9EUDDLHjTynAuIgnfYfrmZFEkVRBF5fGc3wq9JImtMA5fXajGaTcfWK75W4n1RlOoyiqC_UfVrtYxgmMAeVuJtoYeS1C76Q9ZZwbd0PFKhkevBn3nf5Q5hPwym6Iw9BHPiTcZgE8G7zEOEwCEIcRpAEmMBx4idBEkWTfBzkeTyO7ugD9OHYD4PYh5EfwPsMTgo_j4mfQBQRAr2xT7aIsnvjXfdCru-oUiV5MDQmdwxlhCn7hQII-0pAL3q8kw9m0igr18ob-4wqrToxmmpGHo6_UTDqfaPgrpTsYaP1zkYCXHpwuaZ6U2b3WGwNscbjq5fRTor_J9hwbgEqDy4txn8HAAD__5wpl9w">