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

    <tr>
        <th>Summary</th>
        <td>
            [clang-query] Crash when dumping `catch(...)` stmts when using IgnoreUnlessSpelledInSource traversal
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    A minimal cpp file to reproduce the issue is
```cpp
// example.cpp
int main()
{
    try
    {
        return 0;
    }
    catch (...)
    {
        return 1;
    }
}
```
Then passing clang-query the commands
```
# cmd.txt
set output dump
set traversal IgnoreUnlessSpelledInSource

match stmt()
```
Invoking `clang-query example.cpp -p <build_dir> -f cmd.txt` will seg fault with stack trace 
```
Match #1:

Binding for "root":
CompoundStmt 0x12014a488 </Users/jmarriott13/code/oss/llvm-project/bug/example.cpp:2:1, line:11:1>
`-CXXTryStmt 0x12014a468 <line:3:5, line:10:5>
  |-CompoundStmt 0x12012b7d8 <line:4:5, line:6:5>
  | `-ReturnStmt 0x12012b7c8 <line:5:9, col:16>
  |   `-IntegerLiteral 0x12012b7a8 <col:16> 'int' 0
 `-CXXCatchStmt 0x12014a448 <line:7:5, line:10:5> #0 0x000000010482ff18 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x100213f18)
 #1 0x0000000104830510 PrintStackTraceSignalHandler(void*) (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x100214510)
 #2 0x000000010482e13c llvm::sys::RunSignalHandlers() (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x10021213c)
 #3 0x0000000104831990 SignalHandler(int, __siginfo*, void*) (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x100215990)
 #4 0x0000000196a18624 (/usr/lib/system/libsystem_platform.dylib+0x1804ac624)
 #5 0x0000000104acbb48 clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Decl const*, bool) (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x1004afb48)
 #6 0x0000000104b5b32c clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitCXXCatchStmt(clang::CXXCatchStmt const*) (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x10053f32c)
 #7 0x0000000104b56d48 clang::StmtVisitorBase<llvm::make_const_ptr, clang::ASTDumper, void>::Visit(clang::Stmt const*) (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x10053ad48)
 #8 0x0000000104b55770 clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()::operator()() const (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x100539770)
 #9 0x0000000104b63d9c void clang::TextTreeStructure::AddChild<clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'())::'lambda'(bool)::operator()(bool) const (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x100547d9c)
#10 0x0000000104b63c60 decltype(std::declval<clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>()(std::declval<bool>())) std::__1::__invoke[abi:nn190102]<void clang::TextTreeStructure::AddChild<clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'())::'lambda'(bool)&, bool>(clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()&&, bool&&) (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x100547c60)
#11 0x0000000104b63c08 void std::__1::__invoke_void_return_wrapper<void, true>::__call[abi:nn190102]<void clang::TextTreeStructure::AddChild<clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'())::'lambda'(bool)&, bool>(void clang::TextTreeStructure::AddChild<clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'())::'lambda'(bool)&, bool&&) (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x100547c08)
#12 0x0000000104b63bdc std::__1::__function::__alloc_func<void clang::TextTreeStructure::AddChild<clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'())::'lambda'(bool), std::__1::allocator<void clang::TextTreeStructure::AddChild<clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'())::'lambda'(bool)>, void (bool)>::operator()[abi:nn190102](bool&&) (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x100547bdc)
#13 0x0000000104b62b3c std::__1::__function::__func<void clang::TextTreeStructure::AddChild<clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'())::'lambda'(bool), std::__1::allocator<void clang::TextTreeStructure::AddChild<clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'())::'lambda'(bool)>, void (bool)>::operator()(bool&&) (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x100546b3c)
#14 0x0000000104acdf20 std::__1::__function::__value_func<void (bool)>::operator()[abi:nn190102](bool&&) const (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x1004b1f20)
#15 0x0000000104acdbb0 std::__1::function<void (bool)>::operator()(bool) const (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x1004b1bb0)
#16 0x0000000104b63ddc void clang::TextTreeStructure::AddChild<clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'())::'lambda'(bool)::operator()(bool) const (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x100547ddc)
#17 0x0000000104b63c60 decltype(std::declval<clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>()(std::declval<bool>())) std::__1::__invoke[abi:nn190102]<void clang::TextTreeStructure::AddChild<clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'())::'lambda'(bool)&, bool>(clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()&&, bool&&) (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x100547c60)
#18 0x0000000104b63c08 void std::__1::__invoke_void_return_wrapper<void, true>::__call[abi:nn190102]<void clang::TextTreeStructure::AddChild<clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'())::'lambda'(bool)&, bool>(void clang::TextTreeStructure::AddChild<clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'())::'lambda'(bool)&, bool&&) (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x100547c08)
#19 0x0000000104b63bdc std::__1::__function::__alloc_func<void clang::TextTreeStructure::AddChild<clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'())::'lambda'(bool), std::__1::allocator<void clang::TextTreeStructure::AddChild<clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'())::'lambda'(bool)>, void (bool)>::operator()[abi:nn190102](bool&&) (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x100547bdc)
#20 0x0000000104b62b3c std::__1::__function::__func<void clang::TextTreeStructure::AddChild<clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'())::'lambda'(bool), std::__1::allocator<void clang::TextTreeStructure::AddChild<clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'())::'lambda'(bool)>, void (bool)>::operator()(bool&&) (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x100546b3c)
#21 0x0000000104acdf20 std::__1::__function::__value_func<void (bool)>::operator()[abi:nn190102](bool&&) const (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x1004b1f20)
#22 0x0000000104acdbb0 std::__1::function<void (bool)>::operator()(bool) const (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x1004b1bb0)
#23 0x0000000104b55598 void clang::TextTreeStructure::AddChild<clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()) (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x100539598)
#24 0x0000000104acc020 clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef) (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x1004b0020)
#25 0x00000001063e8730 clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::DynTypedNode const&) (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x101dcc730)
#26 0x00000001063e8174 clang::query::MatchQuery::run(llvm::raw_ostream&, clang::query::QuerySession&) const (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x101dcc174)
#27 0x00000001063e8db8 clang::query::FileQuery::run(llvm::raw_ostream&, clang::query::QuerySession&) const (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x101dccdb8)
#28 0x000000010461e530 runCommandsInFile(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, clang::query::QuerySession&) (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x100002530)
#29 0x000000010461eae8 main (/Users/jmarriott13/code/oss/llvm-project/build/bin/clang-query+0x100002ae8)
#30 0x000000019663eb98 
zsh: segmentation fault  ../build/bin/clang-query example.cpp -p build -f cmd.txt
```

Notably using AsIs traversal is not affected by this issue
```
# cmd_as_is.txt
set output dump
set traversal AsIs

match stmt()
```
``clang-query example.cpp -p <build_dir> -f cmd_as_is.txt`` does not not seg fault
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsXEtv4zgS_jXMhYjBh54HHxwnxmaxM9jtZBZzMyiStjmt15JUEu-vX5BSYkntdGcG6yDuKEinZYosVn1V9Ykqi2LGqG0p5RyEVyC8vmCN3VV6_veqZHbHyl-Y1qqy9iKrxH6-gIUqVcFyyOsablQuoa2glrWuRMMltDsJlTGN-wvQAkSo_eV17T6SFSArKJ9YUedy1jaq0sKCqRKQBJDU9YqvAFpACKHV--7o0OZ-tLSNLiEC9Orl_HV3xJnlOwhIMpvNWnmvjsfj8d3fZ6UBWtzvZAlrB1G5hTxn5fbyP43Ue28or4qClcKMxgBCIS_EzD5ZgBZGWlg1tm4sFE1Rdy1WswepDcvh7bastPytzKUxd7XMcyluy7uq0Vw6WWhReIOMLewBod5st-VD9dVp51DuKdgDGV7WENBl1qhcrIXSgN7Ay82LjhGCjyrPoZFbuGFNbuGjsm5Gxr86RbmEozl_6TCmGNBFq-WVKoXTYlNpCAjRVWUBIe3pZVXUVVOKO1tYiJ4wQThgQZI4pQBZ_WakNoCs_ii6UMMUkBWvhARkVRl3Ks8fistaV39IbgFZZc0WkFU_jOjCzYUBWcJcldIdY99Ab1rdL5e__36v90MVIq9CN4ACugj7ApBv8AJcgCwvj9hBslj0hQQjIdFIhvPS5RcffkMpvC8lBHSROim8yp0mUV8C9DJuSyu3Uv9DWalZfpDDvJzeOAhIrEoLSAyd62CHxdK5cIhG0Fchfg0N53YE0RNqfzAKErLZ4AQ6Hzl_04XZm_bgn1qV9s7F0b0LI0CSQyfNHteVsVqyApDIzeS1TKGP8r8UFCoX7n9HJateKgByhZ4wQgTTDe4yyAfv0AqKQozgSOU7tS1Z_jdWilxqQJKHSglAFifWMwgxOuhJRmhLTPkxtL805UBd0_LFKRUlmPKDonQEKE5TBMcIei8v4Xpt1FaVm8qjuYTvA2yYpj1gg56-acRwEpGgm70x2k2gMkBWZm-sLNqP7fG6zpndVLqYib3v4-QnKGA8IsFBfjjAg_EsC5L2ItI6bHF3_2sl5H17LZDaJe7g7HVT1A60ZX_UvXyyblh3kt60zf9WRrkrRK_nteQ55FVpbAdyVlX5SREO2CYLeikWDRDIwowSfloE-tQ2RGNAegdUTohGSDeU9PIjHqERiWE8OM28EZW-YkY6Mn7J8oJ9lWuv9bq2Y0AGQPlM-k5UvKf9TPSjIRnZH8Yxes98GFm-7JHondWq3H6RG6etbwEkzlmRCQZI3C28fHtVS81spbu2lmK90FMCmcZxj7jSIZARFSn3fh_jcq-lvLO64bbRsoNRiOXOzTcG92NDfzNYPPTGjBPhQ5vxyqmOl18JsGfWPnWQBbFIO7ZyqyM0DjIeISgkz-2-dks5Y0WrsGt7YPkZBlSL7xFDPOSHLu4XvnRbr_HzgXI3XxKEVyxTgC7KEqcIIwLCa0CXU0J-fDN-kJDtjckhGs7JsqivfffplBf7IOYROtAH_oY-UNJeo15PpLU7v26rM-tHzWqP0bK9N1hCqxv5Atl6zVmeT6n3WVJvcunHN-PtLn0fPkLJgY_ImI8ywY9S0aYpuVVV-fyZ5XnFfetELGdhxo-icHnE7d7JftU9-fgczPjRjdTNcyUEDluP3WEdW0I8D3oPmspE766LjmiKZPRtNDUR1NmYMRHUp_fxnyKodySjKKM9MgpGX2CIDUFvIqMHljdyQEn_Hxo-cQksyPCG9O5hx1_giCw7Zv_B-rfa-m5FvSDDWdazKPqmciymyvE5mPHRK8f9NUw8VY6nyvEnT8ipcvyXK8fJVDmeUm-qHE8u_SCV42-etpgqx580CqfCzE_v47OtHJPx8zpT5fjTBe9EUD-_j8-ickzw564cE_KzVY4JHT-8HabJVDk-AzNO-4R_GqaHWyUy_sKII_IRn_A_ZdYg1OeBwTdIEZVJTN8VkOt9eb-vpXC9n4E56ZUAC85j2kMgGiOA46BvSzvYH_ptpf86fNZN-YMtg8fleBF30hjHrO9B_85oHAcHo-Ox0SJLXlF2pXJ5rjaLrJf7w7JthGVIEdRNuex2Sd-WzlQXnjumB0n67XUxY0bxtfEp61Jix_Txju7M2mqmrHnu1y6Qvr8Ofu5Ib3pJ8SegPRl_IETCfvakY1CZTPxu-ZOqwOTBr4PNvmkUUZmlCQRo8V-zA3QBjdwWsrTMLWO67eNwNvveROOt6b5jf0P6aDs9WvxaWZble9j4bfgLc2t6G-iVgWVlIdtsJLdSwGwP7U6Z9jUEx7fmr5lZK_PGDfpuujftxO_edPC6ocf34PeU8QKgqGRrkvv3sin_QsypSGnKLuQcxyFGAYqS-GI3x1mQ8YgkkhDMUEZwlqQIJzxgQczTILpQc4JIiCIS4whjEs5oQjdpHOJMCoQzFIAAyYKpfOZCZVbp7YXHbo6DCCN8kbNM5sa_HoKQUj52yBK3zr7Qcx9fWbM1IEC5MtYcxFhlc_9eiX6YhddwqZnZwcedLD3kz28vcPAeXtwQIQ-1afu1rv_OyxIOHrtodD7fWVv7fdH-lRNbZXdNNuNV0SXEt3nhjXL50ln9MCf_CwAA__9J9jvx">