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

    <tr>
        <th>Summary</th>
        <td>
            [Bug] Assertion failed causing segfault on LLDB module python
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

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

<pre>
    ***Describe the bug:***
The assertion assert(hasVal); in getValue() at llvm/include/llvm/ADT/Optional.h:97 is reachable when the user runs in python lldb.SBDebugger.Terminate(), and then lldb.SBDebugger.Create().

https://github.com/llvm/llvm-project/blob/7c04454227f5c6bd3f515783950a815970c90558/llvm/include/llvm/ADT/Optional.h#L96-L99

</br>

***Steps to reproduce the behavior:***
1. Get the llvm source code (commit ae8b10e5439c08e478a72d34d654a02c087bdc69) and compile it.
2. run command: `python3 poc_crash_lldb.py`

</br>

***Output:***
```
python3 poc_crash_lldb.py
python3: /dataZ/test_z3/ex7/llvm-project/llvm/include/llvm/ADT/Optional.h:97: T& llvm::optional_detail::OptionalStorage<T, <anonymous> >::getValue() & [with T = lldb_private::repro::Reproducer; bool <anonymous> = false]: Assertion `hasVal' failed.
Aborted (core dumped)
```

 - stack backtrace:
```
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1  0x00007f41d413b921 in __GI_abort () at abort.c:79
#2  0x00007f41d412b48a in __assert_fail_base (fmt=0x7f41d42b2750 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x7f41c9bd9d01 "hasVal", file=file@entry=0x7f41c9bd9cc0 "/dataZ/test_z3/ex7/llvm-project/llvm/include/llvm/ADT/Optional.h", line=line@entry=97, function=function@entry=0x7f41c9bda020 <llvm::optional_detail::OptionalStorage<lldb_private::repro::Reproducer, false>::getValue() &::__PRETTY_FUNCTION__> "T& llvm::optional_detail::OptionalStorage<T, <anonymous> >::getValue() & [with T = lldb_private::repro::Reproducer; bool <anonymous> = false]") at assert.c:92
#3  0x00007f41d412b502 in __GI___assert_fail (assertion=0x7f41c9bd9d01 "hasVal", file=0x7f41c9bd9cc0 "/dataZ/test_z3/ex7/llvm-project/llvm/include/llvm/ADT/Optional.h", line=97, function=0x7f41c9bda020 <llvm::optional_detail::OptionalStorage<lldb_private::repro::Reproducer, false>::getValue() &::__PRETTY_FUNCTION__> "T& llvm::optional_detail::OptionalStorage<T, <anonymous> >::getValue() & [with T = lldb_private::repro::Reproducer; bool <anonymous> = false]") at assert.c:101
#4  0x00007f41c1c546f2 in llvm::optional_detail::OptionalStorage<lldb_private::repro::Reproducer, false>::getValue() & (this=0x7f41d2867ec0 <lldb_private::repro::Reproducer::InstanceImpl()::g_reproducer>) at /dataZ/test_z3/ex7/llvm-project/llvm/include/llvm/ADT/Optional.h:97
#5  0x00007f41c1c539bc in llvm::Optional<lldb_private::repro::Reproducer>::getValue() & (this=0x7f41d2867ec0 <lldb_private::repro::Reproducer::InstanceImpl()::g_reproducer>) at /dataZ/test_z3/ex7/llvm-project/llvm/include/llvm/ADT/Optional.h:280
#6  0x00007f41c1c52e36 in llvm::Optional<lldb_private::repro::Reproducer>::operator*() & (this=0x7f41d2867ec0 <lldb_private::repro::Reproducer::InstanceImpl()::g_reproducer>) at /dataZ/test_z3/ex7/llvm-project/llvm/include/llvm/ADT/Optional.h:287
#7  0x00007f41c1c51835 in lldb_private::repro::Reproducer::Instance () at /dataZ/test_z3/ex7/llvm-project/lldb/source/Utility/Reproducer.cpp:23
#8  0x00007f41c19a20e8 in lldb_private::CommandInterpreter::SetSynchronous (this=0x20b5ce0, value=false) at /dataZ/test_z3/ex7/llvm-project/lldb/source/Interpreter/CommandInterpreter.cpp:2769
#9  0x00007f41c199243e in lldb_private::CommandInterpreter::CommandInterpreter (this=0x20b5ce0, debugger=..., synchronous_execution=false) at /dataZ/test_z3/ex7/llvm-project/lldb/source/Interpreter/CommandInterpreter.cpp:135
#10 0x00007f41c1816aa1 in std::make_unique<lldb_private::CommandInterpreter, lldb_private::Debugger&, bool> () at /usr/include/c++/7/bits/unique_ptr.h:821
#11 0x00007f41c180cb89 in lldb_private::Debugger::Debugger (this=0x20b0f40, log_callback=0x0, baton=0x0) at /dataZ/test_z3/ex7/llvm-project/lldb/source/Core/Debugger.cpp:757
#12 0x00007f41c180c0fa in lldb_private::Debugger::CreateInstance (log_callback=0x0, baton=0x0) at /dataZ/test_z3/ex7/llvm-project/lldb/source/Core/Debugger.cpp:653
#13 0x00007f41c157af24 in lldb::SBDebugger::Create (source_init_files=false, callback=0x0, baton=0x0) at /dataZ/test_z3/ex7/llvm-project/lldb/source/API/SBDebugger.cpp:263
#14 0x00007f41c157ad8d in lldb::SBDebugger::Create () at /dataZ/test_z3/ex7/llvm-project/lldb/source/API/SBDebugger.cpp:238
#15 0x00007f41c16d026b in _wrap_SBDebugger_Create__SWIG_0 (args=0x7f41d46c7048) at tools/lldb/bindings/python/LLDBWrapPython.cpp:21722
#16 0x00007f41c16d0787 in _wrap_SBDebugger_Create (self=0x7f41d28f6f98, args=0x7f41d46c7048) at tools/lldb/bindings/python/LLDBWrapPython.cpp:21817
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztWFtv2zYU_jX2C1GDou4PfnDsuAhQtMXirtheBIqkbK2ypJFUGu_X75CSLPnSLUGbFrsEjkQeXs53ruJhWvHDfEIW7W8lFJN5KpDeCZQ224m7OI5N8GqCFxsYoEoJqfOq7FoTEu2o-pkWExJP3BuUl2grNPQbAUNARFSjonjYT8g6L1nRcKCvO8JitYHnu9rsR4vZDljGIcoVkoKyHU0LgT7vRGkRNcANyaZUhkV90DuAUBQ8nd3frATA3Qo52wi5z0uqO9YTskS05Gb55dwl8Ognzlr52udO61pZ4dfw2-Z616QzVu0H2Ob1qpbVb4KB_Ou0qFJ4hQx7nu8REmY-C1LuZr7jh5Eb-5hGjh-HmMXY96Nhn7_XB3HfxMGrN3E8Bjhxl4arnLi3J-TeWPda1ArpCrQIIHnDOpOKHX3IK3lpV2eGXgttJxkgSFWNhEWs4gKBgkD2fa4RFVHqYOF7bsxwJLwwoiHhrscD36OYAC1MOQtia3PQOiyrc7Bgrjv1kpmxn6HvYRxgoEmAW0u6qK5YwiRVu8Qaqj7A2HOEftfoutGXsplt2p_tfpndeNhiI2tONf0V3loonfzhQks8hpf2f5Z3m62BHLQxAXDdRdXNSLjQNC9aYr_sXleSbgWIvzHuDG9aVuVhXzXgo7fIqMPOPws6w2Hi33wG70UbmLWy_p_UMn8wXm-XWPdomz_1niJNDKdVVVzhtEIZLZSY-CsjxOKYCEC5fQoIYQrYnHcWX6SV1IK3TiQF4s2-FtxE5jXbtE_0CilN2SeUwkNLyizaq_OJixFKktd3iaS5sr6qcshbK_P0sCi1PEAv6LLQbAbmUAfFITyg1ZT5Y0t4MDbLy8Z07U4zBjx958jGQQg_YvgLM8_hnuOmMXFMHrLMqZESDdnO9u0WYXzcgpxtQVIvou0WbSJNjOaSlLZyZHvw5RV-bGeTlIQ-BjqZEF8d_42z-03rrC3pxCgtcTCJvyyBVNpdlkMiBz5De9Bay5vFKY85dgzv3sh2eQZ7wiz7urqIsQ7wNw-jFgAYzACwrwEABJgB15SsE-3YvAYS0hY2jv7sWHxqMBksNma-HKYtPUne_3S72fySrD-8XW7u3r1NEht0hPzzk4WxVxsY1s1sZMTkGBnuRWT4mByD6yQ8TGSM_fZpPvr9nfLCC_93uR_vcg4eEro39jnmMN8LMutzP9Isxrv1LldD4idREArW-csT1WP6dyV8Qksm7vZ10R2FW56JHM287XT0UiedXtn-ubLdOGWnyu6XPkfQ_4YeSTScdoJzRRIBtG-lyKoWkoJf29Pzv1SXg1OG57p0InDUvHx6HhoLNTr9PQc5N3VjW21B44POi1wfoDWwmbG6NsjdI_DoFHhMCRbRdeDLttK6K7WQtRS6R30v9P2hZDtZlZA8T0xMcOozgU26erBRBScom7a-VrgxCLK-RNYLGgbDmTk-EzUmniueJ-ol_Uvi8u5iAOgzUykskRp0lIhHwZr-SPk9FeK4_lCG4BN9RE5AqS1DlOatuHv6SSRQ2PzeXP82XVGTObVczOtvScxhASaYD257Nhh5eaPkSdyxCbmxv7WRPs11V2QBlqTW0kZgREZFlXMqDWZpFF-37hHOSe_ckjjzrCWLapswWhSmgLRjlppCbiv77lfabgnFLLyOd0mtqUJ_SC8OORcOZ_QpwrXXUuO88qPECfwh6TjuiTh-SDPi9eJ0SeXmmiC2Jrd8krzM4RQPR3I1xNASvaxki_d38Bzd-nVZJhiJ5p2LxiP-VNFeDKAbDQD9E4ABxyRIbX30WdI6GdYmLa4kuf949zrBtliS29Gn2wtYiL0etIagVgOkNC95Xm4Npb0Fg8abN6ubj8DkvSX02JyQDNWbE5yjC6PwL9BZhxBFNj5QZEEWR_ZO4kXgRk549f5oyucuj92YTnWuCzGHeuSm2UL5MLrbau9OwEsbBdyQEtuMNoVGMGS4oT18pgvR3UdPG1nMn319nCvVCCOH7xNCprt56tGAO2mMXZeSyIkdIvzQDdPY44JHUTwtaCoKZfAC2Gk-J5gQDEUzDn04JM6yUHAnwNSN3ZRFmb0e2YMcM8N4VsntVM4tBjCMgsEiV1oNg1Ay5dtSiH5_2oBscq6asnQ4PUwt3rkF-ycvFG9L">