<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/111003>111003</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            clang-tidy `bugprone-unchecked-optional-access`: segmentation fault
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang-tidy
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          scarf005
      </td>
    </tr>
</table>

<pre>
    ## Repo and command

https://github.com/cataclysmbnteam/Cataclysm-BN/tree/305368a591cdf3f97d46332eb99cf88871f3949d

```sh
clang-tidy --enable-check-profile src/iexamine.cpp
```

(happens without plugins)

## clang-tidy version

```
clang-tidy --version
LLVM (http://llvm.org/):
  LLVM version 18.1.8
  Optimized build.
```

## Stacktrace

```
./build-scripts/clang-tidy-wrapper.sh: 줄 12: 1435352 세그멘테이션 오류 (코어 덤프됨) clang-tidy --load=$PLUGIN --enable-check-profile --store-check-profile=clang-tidy-trace "$@"
+ PLUGIN=build/tools/clang-tidy-plugin/libCataAnalyzerPlugin.so
+ clang-tidy --load=build/tools/clang-tidy-plugin/libCataAnalyzerPlugin.so --enable-check-profile --store-check-profile=clang-tidy-trace -quiet src/iexamine.cpp
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: clang-tidy --load=build/tools/clang-tidy-plugin/libCataAnalyzerPlugin.so --enable-check-profile --store-check-profile=clang-tidy-trace -quiet src/active_tile_data.cpp
1.      <eof> parser at end of file
2.      ASTMatcher: Processing 'bugprone-unchecked-optional-access' against:
        FunctionDecl veh_pointer_or_null : </run/media/home/scarf/repo/cata/Cataclysm/src/vpart_position.h:156:1, line:159:1>
--- Bound Nodes Begin ---
    T - { RecordType : vpart_position }
    fun - { FunctionDecl veh_pointer_or_null : </run/media/home/scarf/repo/cata/Cataclysm/src/vpart_position.h:156:1, line:159:1> }
--- Bound Nodes End ---
3.      runTypeErasedDataflowAnalysis
Decl:
FunctionDecl 0x7f1610dc36f8 </run/media/home/scarf/repo/cata/Cataclysm/src/vpart_position.h:156:1, line:159:1> line:156:17 veh_pointer_or_null 'vehicle *(const optional_vpart_position &)' inline
|-ParmVarDecl 0x7f1610dc35e8 <col:38, col:69> col:69 used p 'const optional_vpart_position &'
`-CompoundStmt 0x7f1610dc4198 <line:157:1, line:159:1>
  `-ReturnStmt 0x7f1610dc4188 <line:158:5, col:32>
    `-ConditionalOperator 0x7f1610dc4158 <col:12, col:32> '::vehicle *'
      |-ImplicitCastExpr 0x7f1610dc4128 <col:12> 'bool' <UserDefinedConversion>
      | `-CXXMemberCallExpr 0x7f1610dc4108 <col:12> 'bool'
      |   `-MemberExpr 0x7f1610dc4010 <col:12> '<bound member function type>' .operator bool 0x7f1610e56710
      |     `-ImplicitCastExpr 0x7f1610dc3ff0 <col:12> 'const std::optional<vpart_position>' lvalue <UncheckedDerivedToBase (optional)>
      |       `-DeclRefExpr 0x7f1610dc37a8 <col:12> 'const optional_vpart_position' lvalue ParmVar 0x7f1610dc35e8 'p' 'const optional_vpart_position &'
      |-UnaryOperator 0x7f1610dc3fc0 <col:16, col:28> '::vehicle *' prefix '&' cannot overflow
      | `-CXXMemberCallExpr 0x7f1610dc3f68 <col:17, col:28> '::vehicle':'vehicle' lvalue
      |   `-MemberExpr 0x7f1610dc3f38 <col:17, col:20> '<bound member function type>' ->vehicle 0x7f1610e02d68
      |     `-CXXOperatorCallExpr 0x7f1610dc3f08 <col:17, col:18> 'const vpart_position *' '->'
      |       |-ImplicitCastExpr 0x7f1610dc3ef0 <col:18> 'const vpart_position *(*)() const noexcept' <FunctionToPointerDecay>
      |       | `-DeclRefExpr 0x7f1610dc3808 <col:18> 'const vpart_position *() const noexcept' lvalue CXXMethod 0x7f1610e55e58 'operator->' 'const vpart_position *() const noexcept'
      |       `-ImplicitCastExpr 0x7f1610dc37e8 <col:17> 'const std::optional<vpart_position>' lvalue <UncheckedDerivedToBase (optional)>
      |         `-DeclRefExpr 0x7f1610dc37c8 <col:17> 'const optional_vpart_position' lvalue ParmVar 0x7f1610dc35e8 'p' 'const optional_vpart_position &'
      `-ImplicitCastExpr 0x7f1610dc4140 <col:32> '::vehicle *' <NullToPointer>
        `-CXXNullPtrLiteralExpr 0x7f1610dc3fd8 <col:32> 'std::nullptr_t'
CFG:

 [B5 (ENTRY)]
   Succs (1): B4

 [B1]
   1: [B4.5] ? [B2.8] : [B3.2]
   2: return [B1.1];
   Preds (2): B2 B3
   Succs (1): B0

 [B2]
   1: operator->
   2: [B2.1] (ImplicitCastExpr, FunctionToPointerDecay, const class vpart_position *(*)(void) const noexcept)
   3: p
   4: [B2.3] (ImplicitCastExpr, UncheckedDerivedToBase, const class std::optional<class vpart_position>)
   5: [B2.4] (OperatorCall)
   6: [B2.5]->vehicle
   7: [B2.6]()
   8: &[B2.7]
   Preds (1): B4
   Succs (1): B1

 [B3]
   1: nullptr
   2: [B3.1] (ImplicitCastExpr, NullToPointer, ::vehicle *)
   Preds (1): B4
   Succs (1): B1

 [B4]
   1: p
   2: [B4.1] (ImplicitCastExpr, UncheckedDerivedToBase, const class std::optional<class vpart_position>)
   3: [B4.2].operator bool
   4: [B4.2]
   5: [B4.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
   T: [B4.5] ? ... : ...
   Preds (1): B5
   Succs (2): B2 B3

 [B0 (EXIT)]
   Preds (1): B1

4.      transferCFGBlock: Element [B2.5]
Stmt:
CXXOperatorCallExpr 0x7f1610dc3f08 'const class vpart_position *' '->'
|-ImplicitCastExpr 0x7f1610dc3ef0 'const class vpart_position *(*)(void) const noexcept' <FunctionToPointerDecay>
| `-DeclRefExpr 0x7f1610dc3808 'const class vpart_position *(void) const noexcept' lvalue CXXMethod 0x7f1610e55e58 'operator->' 'const class vpart_position *(void) const noexcept'
`-ImplicitCastExpr 0x7f1610dc37e8 'const class std::optional<class vpart_position>' lvalue <UncheckedDerivedToBase (optional)>
  `-DeclRefExpr 0x7f1610dc37c8 'const optional_vpart_position':'const class optional_vpart_position' lvalue ParmVar 0x7f1610dc35e8 'p' 'const optional_vpart_position &'
 #0 0x00007f16168044fa llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/lib64/libLLVM.so.18.1+0x6044fa)
 #1 0x00007f1616801ce4 llvm::sys::RunSignalHandlers() (/lib64/libLLVM.so.18.1+0x601ce4)
 #2 0x00007f1616804c5b (/lib64/libLLVM.so.18.1+0x604c5b)
 #3 0x00007f1615c4fd00 __restore_rt (/lib64/libc.so.6+0x40d00)
 #4 0x00007f161f2e5c33 (/lib64/libclang-cpp.so.18.1+0x1ee5c33)
 #5 0x00007f161f2e5e68 (/lib64/libclang-cpp.so.18.1+0x1ee5e68)
 #6 0x00007f161f2e5d61 (/lib64/libclang-cpp.so.18.1+0x1ee5d61)
 #7 0x00007f161f2e6101 (/lib64/libclang-cpp.so.18.1+0x1ee6101)
 #8 0x00007f161f2e687b (/lib64/libclang-cpp.so.18.1+0x1ee687b)
 #9 0x000055a059eb9a66 (/usr/bin/clang-tidy+0x373a66)
#10 0x000055a059eb9473 (/usr/bin/clang-tidy+0x373473)
#11 0x00007f161f2c8836 (/lib64/libclang-cpp.so.18.1+0x1ec8836)
#12 0x00007f161f2c7fbc clang::dataflow::runTypeErasedDataflowAnalysis(clang::dataflow::ControlFlowContext const&, clang::dataflow::TypeErasedDataflowAnalysis&, clang::dataflow::Environment const&, std::function<void (clang::CFGElement const&, clang::dataflow::TypeErasedDataflowAnalysisState const&)>, int) (/lib64/libclang-cpp.so.18.1+0x1ec7fbc)
#13 0x000055a059eb80c9 clang::tidy::bugprone::UncheckedOptionalAccessCheck::check(clang::ast_matchers::MatchFinder::MatchResult const&) (/usr/bin/clang-tidy+0x3720c9)
#14 0x000055a05a414ed2 (/usr/bin/clang-tidy+0x8ceed2)
#15 0x000055a05a44a2bc clang::ast_matchers::internal::BoundNodesTreeBuilder::visitMatches(clang::ast_matchers::internal::BoundNodesTreeBuilder::Visitor*) (/usr/bin/clang-tidy+0x9042bc)
#16 0x000055a05a414713 (/usr/bin/clang-tidy+0x8ce713)
#17 0x000055a05a4165eb (/usr/bin/clang-tidy+0x8d05eb)
#18 0x000055a05a44689b (/usr/bin/clang-tidy+0x90089b)
#19 0x000055a05a416f66 (/usr/bin/clang-tidy+0x8d0f66)
#20 0x000055a05a416613 (/usr/bin/clang-tidy+0x8d0613)
#21 0x000055a05a3e14aa clang::ast_matchers::MatchFinder::matchAST(clang::ASTContext&) (/usr/bin/clang-tidy+0x89b4aa)
#22 0x00007f161fc538ec clang::MultiplexConsumer::HandleTranslationUnit(clang::ASTContext&) (/lib64/libclang-cpp.so.18.1+0x28538ec)
#23 0x00007f161d9743e6 clang::ParseAST(clang::Sema&, bool, bool) (/lib64/libclang-cpp.so.18.1+0x5743e6)
#24 0x00007f161fc1c816 clang::FrontendAction::Execute() (/lib64/libclang-cpp.so.18.1+0x281c816)
#25 0x00007f161fb94520 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/lib64/libclang-cpp.so.18.1+0x2794520)
#26 0x00007f161fe31721 clang::tooling::FrontendActionFactory::runInvocation(std::shared_ptr<clang::CompilerInvocation>, clang::FileManager*, std::shared_ptr<clang::PCHContainerOperations>, clang::DiagnosticConsumer*) (/lib64/libclang-cpp.so.18.1+0x2a31721)
#27 0x000055a05ab6f02e (/usr/bin/clang-tidy+0x102902e)
#28 0x00007f161fe313e4 clang::tooling::ToolInvocation::runInvocation(char const*, clang::driver::Compilation*, std::shared_ptr<clang::CompilerInvocation>, std::shared_ptr<clang::PCHContainerOperations>) (/lib64/libclang-cpp.so.18.1+0x2a313e4)
#29 0x00007f161fe30164 clang::tooling::ToolInvocation::run() (/lib64/libclang-cpp.so.18.1+0x2a30164)
#30 0x00007f161fe33315 clang::tooling::ClangTool::run(clang::tooling::ToolAction*) (/lib64/libclang-cpp.so.18.1+0x2a33315)
#31 0x000055a05ab6a3da clang::tidy::runClangTidy(clang::tidy::ClangTidyContext&, clang::tooling::CompilationDatabase const&, llvm::ArrayRef<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, llvm::IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem>, bool, bool, llvm::StringRef) (/usr/bin/clang-tidy+0x10243da)
#32 0x000055a059d5b06c clang::tidy::clangTidyMain(int, char const**) (/usr/bin/clang-tidy+0x21506c)
#33 0x00007f1615c39088 __libc_start_call_main (/lib64/libc.so.6+0x2a088)
#34 0x00007f1615c3914b __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x2a14b)
#35 0x000055a059d57245 _start (/usr/bin/clang-tidy+0x211245)
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMW1tzozib_jXKjcouIXEQF7mwcdxfV6V7UklmqvfKJYSw2cGIFcKdfL9-SwLbCB_iTO9-M12pxAjxvM971IvkZk1TrCsh7kEwB8HijrV6I9V9w5nKEQruUpm93wNMACbwWdQSsiqDXG63rMoAWgA0635vtK4bQGYALwFergu9adMpl1uAl5xpxsv3ZptWWjAzkuxHJvPvAC-1EgLgJUEBCSkLYo9nOcnjKPNDQrBI45jnlNLIy0nsx45YEKLup9l0A7xk1Xqii-wdTiaiYmkpJnwj-J-TWsm8KAVsFAd4WYg3ti0qMeV1PYJy8DHdsLoWVQN_FnojWw3rsl0XVQNw7E60JhqI3wnVFLI6y_YMV2f64-Mf36CRrXV9MGpZ7rZTqdb2KjbDdi6Ednb_PPTo1JvS_a3fal1si3-LDKZtUWbTq6paDV40439qxbi4wnwK8NICThquilo3xs0HbSY_lbGZmjYbQGYQPCRg5gPqQw-ba88nAQmwHac-mFPwMAPzyH6Yg1kMYgoeFoAGgCZmTrwAc99ODkBM7WMxNYhmdjeEqRmdL0BsJ8YhmPvQ3KcLO9HeoPaJGIEZBTiGjvVLyTJAFgD7T4-_f_n6_VLwTCaNlmo0CshioLy1HQQYA-wDH5kPvX3nsAMHZGGNZ0JfynJkvC6-jL-L1CTKrGLl-7-FerLj00Ye4c6p8CvIv6z15H_aQuiLKfb0-DB7eYBNm24LDRlM2zVUopZKQy3hlRJiQr__Y8T_t-DaCGiaVhgdbVEqKl62mYB6IyBXrNnAdB_Jfdjb0IZZu60PyYOm0P57UnKt2BYytW63otKGxz_cvIzrYidWuijFKmOaHc3s9UoBkgiZA_IAa6YaoSDTUFQZlDm0Euxk3E-evbx-Y5pvhDKqPynJRdMU1RoCHKXtulayEpO2shxFNpG1LmTFygnjZiLAEWRrVlSNHhSm7t-yrbiZvBC8hDuxWdWyqLRQK6lWVVuW0BYJkgC8VK2x31ZkBQN4uZFbsy7YtcjcFLXsl5PhGmJmWIPsaqb0qpZNYaRNTe3xgtD8BjiBZVEJOxLbEfLQkZxMJnAu2yqD32UmGjgX66KCk8nkqMMrnEAQzeGz4FJlr--1sIxdcRBEi-MjeVv1D_1DlT_SHRvgocqO6pM-OFRbGb0fFGtEtmCa5aX8aeO7KZpuqlHw4HpHa_QW5V7ooYyTMKd_h7KHETsnOu8HHO3EpuClqd1m3eeyajTcx_lq7G4cmkUYR7CoLHxXlKNk8sTU9g-mxqoHwqrOpbESoYZo9zmMDcX9Z9g2IoO1oXMDgeiwOk8Sua2NG1_0Vg_k-l5s5R5MEH2QEBAatGehW1WdYFEXiwIyC46aEDxA6XASWWVFp8BvtVBMS-UABgOjeHgEZYxgQorMHM9Ew_JiLP51W5cFL3TCGv3wVrsSsCuhQ02lLI3vAEl-b4RaiLyoRJbIat-FDfWwQjptfvz4JrapUAkryxNJ6IqkMVpnnQ5sDIQ8dAYIkCS1abq1D5kSY1MM6vdaGL44glO5t7ERe8AUQRh56JRCR-KK9Uien6PSBWajs845-wgFJHFjtGdV7ljZCmvr_fKxEKrYiexVzlljvEoPGKaxPbE9PJA1WfUs8jHPiJ2z_dUEGjDrM_YkW3FU2yD5TCoeo_L3iqn3M0FPcj40angMekyvBD2slciLN3vbyoOcVZXUUO6EMuX4swFL8nBotOgjHv31oUweDfiJ4CY5uSQUfSLQJ4A87M1ziHKEs5BeivLkx4-9L87aAl2g5VEnmE48P-sjZNIxuxC514sUEU6afSyR2t-x_RDDbl4lxRsXte7L2n4FfpVP3UK3EJy9X86tPmAu5Bd1zHMTwXO8-nyzUak3MhtUqEAENuP2Fay3518Rc7l6XPNBJNwI-FtL3fVixy8z_VuK3XXL-p4_iO6rC7uZ9r0ty0PQjgx0SGUz6Umrx0ILxU6TOaNnBB6caNq9WqvVMVaS5ZdD69rLA8F8Hhh3PXx_ff4v46vg2N-_tJw35qbXbcTAuX_ysDd8wLNdfjCf-9MABAsIyNJe4intLru7ZIqHT9ndEmU7sQ5yakHJ_DDjSYnMEsF7IhjOyRWe6IQnPuHppKDDpaPsWcqYjn1uiuaFsmPLqYkqXrKm-aCm7WSRnUvs-ECGGDL14dI_ciNXuJ1PyTG3c7l-jrXN-COl4MjB7zkM15vh1PA41QTDYC07TImOU0LjH1vpDnepvYvDbkI0dOAhIMaReTYavJNoICfR0GfLaSCQq4HgpjFO4Jl8j__PaPsntOtTwv5Vwv-v0UGOHEy-uX36aRz7bh0IjuP-NQ3OvsngBK7m9iXkSOf1TDmaTqe2Dk2n0ytuCU7dcqb0DDyDbA398fV1VEJPoR2v-v3Gg1asanKhkuWXeSn5n2bmQym2otKDFNpv722Pm0-39Hv7pe5yUTpt7W5q5T4G_rja3dLF3dK13cDlMoVfadj-isDjdsaHrZor5lN5-St92kd92ceNWPcSNST_H27aACYIojeEELJoIUW-nzNoN9mtEZv3pvvwpIpK223zV3sihOlxkmI_V7LRyh7p2bfYojKrtD2NsZvgod_9fXz849u0kVOPTj2A5-gttAKPFQlg4o0YeVz45xg9t9VLsa5Y-S9WZaVQTf8WcItQg-kIxWMz8CC9jT4PUgeJDJEC7ucZQnC1UsLu7K-UPoXlBjO0gD7KEHLw_CFejkXACTkDYQ8IeF079Dxhpzt4wRhPhPQzeCKkDl44xstC7zN4Weg5eNEIL_TQZ_DMdAePjvFodMazl_Fo5Po37vGCgKEgFmnMwrDHaxsF8DK1Jz_HExuLRCLCwvB4UoyJh8ZAfkRuAvIj4gB5roacUhLerqGd7uDhEV6Up7w7AesSL-t3_fvkv3oggOnFBxNZaSXLZSl_mo_iTXerQF9CLj53Tdr1Jx-qXaFkZVuGoajDkrHfYDIv9bLIoEs_WX7ZNxy_SPRFMy0GIHZZuVI2L_rOuMbxHRkFFUU8HjK0cWQ_7U_yuqvD4vdbv27M7GFeYga7Gfa-axDW6NW2Oynsa7I9N1wWVWbPDvcDz6Jpy6HR4lviHCMeO7r5Q92Y7_kiwx8DUS5Ehh2gwAXyGXYD_FQv23HZXsJc2UMye0b2qoSYt0V50HdXNIXuTk-bj4x1M-gfBlSqrlH8WOMY-XgUFuHYdJF3Q62hXESeW2uiEVAYiPQGoAwFInWA6MgHIY1vAIoRorELFI8Z5bfUY5qh3K3HGI2BwptslKHQtRH2HCAiPJ-x6-F1kjb29uzl1Q2h2ctrXylvzSIapz5jDju3uvOAUOEE_7e21EVdirdEVk273TPqmqxX8xJWMlMifq8KfRO9D-sYppaEw9LporI48okIhyyfmGrEiYFexJb1Vbk7bdv_vZlLYCU5VNwGjHuceg6VpTJKV9msXzrsSvMmeKvFpY70kh0stiPc7dbS2A8wGgpP5LYuSqG-Vo1mFReO-J6RY6IR2885KrLyHYJu-yeIF2HPWXCkLIvzwpeMa6neD23E12onOespH9bkZsOUyFa1Vt2L3Knmh6e6RXSobFGKb6xia9EVz8FSfwn2KfmXCWJWVEJ12waFrJpT6EXB1pVsdMEPeTIszx_bkllTObZ0i2sa5giLj3PcQzhGWDhIdOwVIvyLXnmVshxa8Zw7-Iap_QI-G3c95nVZDb3SP3WbxS868ld89Sk_kMHLoLFePLIe8sJPW--Tqc-skCEL9808F4SYxuUSi8SMGypDAtco7_P_kzFrSDgsvVHMMpKx8w2naquOpQ1cenbOYcJwIUkua32MNtNip6wRTmt-3DWYKcXen0UOSHIIq9WKv715Xt8Os6bgq0YrC56YeHdi0AystGKFbva3R1HKytIEgVSD-92Pw-RrpVXbFDvxLPKk0k82qI-3d3nfE_y2E6pk76aEvbw3Wmx7JHdhGyK_WPJGyVtaAw9hn2ROb3DYBeneHrIgRSE_70y-d9Q3ZsCpfXNJ4KhM3NavYi9AobP8jzdRSIwohauVicxVo5nSK87KcrVlRXV1OwUzRKmD7I-RPT91kQ0o8NGXx6_zZIWneBp8IMLznY6UBCMrRtgPYAd-izE87A9SzP229V12T7KYxOxO3HsRjuKQEurdbe45DxGKQxr7AUNREGQ09hCjiGRpilGU3hX3GGHfQ4h4gYcDOvXSQAQZzuMs5nFKc-AjsWVFOd1_ufzOfqn23vPMQ3clS0XZ2P8bgPGQMwbB4k7d2y_kpu26AT4qi0Y3Rxxd6FLcD75CC0J0w_dIQwTIDDZibd64bY7DnLWlvmtVef_XvyHc67O7x_8bAAD__0BcSuI">