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

    <tr>
        <th>Summary</th>
        <td>
            Crash in llvm::prettyPrintBaseTypeRef
        </td>
    </tr>

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

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

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

<pre>
    When executing `llvm-dwarfdump /usr/bin/python3.10d --debug-loclists`, llvm-dwarfdump crashes.

LLVM version: 19.0.0git (commit b586149475d71440e4ef444f5df34630101bc669, DEBUG build with assertions)

The Python binary can be obtained from [python3-dbg_3.10.6-1~22.04_amd64.deb](http://security.ubuntu.com/ubuntu/pool/main/p/python3-defaults/python3-dbg_3.10.6-1~22.04_amd64.deb)

Console output (beginning skipped):
```
0x000219a4: 
 DW_LLE_offset_pair     (0x000000000000012d, 0x000000000000014a): DW_OP_reg17 XMM0
            DW_LLE_offset_pair     (0x000000000000014a, 0x00000000000001ad): DW_OP_reg3 RBX
            DW_LLE_offset_pair (0x00000000000001ad, 0x00000000000001b1): DW_OP_entry_value(DW_OP_regval_type XMM0PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: llvm-dwarfdump /usr/bin/python3.10d --debug-loclists
 #0 0x00007fef808d6501 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /tmp/llvm-project/llvm/lib/Support/Unix/Signals.inc:723:11
 #1 0x00007fef808d69fb PrintStackTraceSignalHandler(void*) /tmp/llvm-project/llvm/lib/Support/Unix/Signals.inc:798:1
 #2 0x00007fef808d49f6 llvm::sys::RunSignalHandlers() /tmp/llvm-project/llvm/lib/Support/Signals.cpp:105:5
 #3 0x00007fef808d7195 SignalHandler(int) /tmp/llvm-project/llvm/lib/Support/Unix/Signals.inc:413:1
 #4 0x00007fef7fe42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #5 0x00007fef826a4bec llvm::DWARFUnitHeader::getOffset() const /tmp/llvm-project/llvm/include/llvm/DebugInfo/DWARF/DWARFUnit.h:89:39
 #6 0x00007fef826a4839 llvm::DWARFUnit::getOffset() const /tmp/llvm-project/llvm/include/llvm/DebugInfo/DWARF/DWARFUnit.h:321:32
 #7 0x00007fef8273e1a0 llvm::prettyPrintBaseTypeRef(llvm::DWARFUnit*, llvm::raw_ostream&, llvm::DIDumpOptions, llvm::ArrayRef<unsigned long>, unsigned int) /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp:243:36
 #8 0x00007fef8273e0be llvm::DWARFExpression::prettyPrintRegisterOp(llvm::DWARFUnit*, llvm::raw_ostream&, llvm::DIDumpOptions, unsigned char, llvm::ArrayRef<unsigned long>) /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp:284:7
 #9 0x00007fef8273e612 llvm::DWARFExpression::Operation::print(llvm::raw_ostream&, llvm::DIDumpOptions, llvm::DWARFExpression const*, llvm::DWARFUnit*) const /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp:313:9
#10 0x00007fef8273ecb8 llvm::DWARFExpression::print(llvm::raw_ostream&, llvm::DIDumpOptions, llvm::DWARFUnit*, bool) const /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp:368:9
#11 0x00007fef8272827e dumpExpression(llvm::raw_ostream&, llvm::DIDumpOptions, llvm::ArrayRef<unsigned char>, bool, unsigned int, llvm::DWARFUnit*) /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp:120:3
#12 0x00007fef82727a62 llvm::DWARFLocationTable::dumpLocationList(unsigned long*, llvm::raw_ostream&, std::optional<llvm::object::SectionedAddress>, llvm::DWARFObject const&, llvm::DWARFUnit*, llvm::DIDumpOptions, unsigned int) const::$_1::operator()(llvm::DWARFLocationEntry const&) const /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp:158:7
#13 0x00007fef827276bd bool llvm::function_ref<bool (llvm::DWARFLocationEntry const&)>::callback_fn<llvm::DWARFLocationTable::dumpLocationList(unsigned long*, llvm::raw_ostream&, std::optional<llvm::object::SectionedAddress>, llvm::DWARFObject const&, llvm::DWARFUnit*, llvm::DIDumpOptions, unsigned int) const::$_1>(long, llvm::DWARFLocationEntry const&) /tmp/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:5
#14 0x00007fef82728601 llvm::function_ref<bool (llvm::DWARFLocationEntry const&)>::operator()(llvm::DWARFLocationEntry const&) const /tmp/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:5
#15 0x00007fef82726abe llvm::DWARFDebugLoclists::visitLocationList(unsigned long*, llvm::function_ref<bool (llvm::DWARFLocationEntry const&)>) const /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp:335:16
#16 0x00007fef82725cb6 llvm::DWARFLocationTable::dumpLocationList(unsigned long*, llvm::raw_ostream&, std::optional<llvm::object::SectionedAddress>, llvm::DWARFObject const&, llvm::DWARFUnit*, llvm::DIDumpOptions, unsigned int) const /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp:163:7
#17 0x00007fef8272724b llvm::DWARFDebugLoclists::dumpRange(unsigned long, unsigned long, llvm::raw_ostream&, llvm::DWARFObject const&, llvm::DIDumpOptions) /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp:401:17
#18 0x00007fef826a9efd dumpLoclistsSection(llvm::raw_ostream&, llvm::DIDumpOptions, llvm::DWARFDataExtractor, llvm::DWARFObject const&, std::optional<unsigned long>) /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp:975:7
#19 0x00007fef826a6ca2 llvm::DWARFContext::dump(llvm::raw_ostream&, llvm::DIDumpOptions, std::array<std::optional<unsigned long>, 28ul>) /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp:1078:5
#20 0x000055f13ee9d0e1 dumpObjectFile(llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&) /tmp/llvm-project/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp:725:3
#21 0x000055f13eec3c35 bool std::__invoke_impl<bool, bool (*&)(llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&), llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&>(std::__invoke_other, bool (*&)(llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&), llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&) /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:61:7
#22 0x000055f13eec3bc5 std::enable_if<is_invocable_r_v<bool, bool (*&)(llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&), llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&>, bool>::type std::__invoke_r<bool, bool (*&)(llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&), llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&>(bool (*&)(llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&), llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&) /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:114:2
#23 0x000055f13eec3add std::_Function_handler<bool (llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&), bool (*)(llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&)>::_M_invoke(std::_Any_data const&, llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&) /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_function.h:290:2
#24 0x000055f13eeaa9b5 std::function<bool (llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&)>::operator()(llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&) const /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_function.h:591:2
#25 0x000055f13ee9f1b6 handleBuffer(llvm::StringRef, llvm::MemoryBufferRef, std::function<bool (llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&)>, llvm::raw_ostream&) /tmp/llvm-project/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp:780:11
#26 0x000055f13ee9c27e handleFile(llvm::StringRef, std::function<bool (llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&)>, llvm::raw_ostream&) /tmp/llvm-project/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp:818:10
#27 0x000055f13ee9bf92 main /tmp/llvm-project/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp:919:18
#28 0x00007fef7fe29d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#29 0x00007fef7fe29e40 call_init ./csu/../csu/libc-start.c:128:20
#30 0x00007fef7fe29e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#31 0x000055f13ee7f575 _start (/tmp/llvm-project/llvm/build/bin/llvm-dwarfdump+0x14575)
Segmentation fault (core dumped)
```

Adding a null-check for `U` in llvm::prettyPrintBaseTypeRef solves the issue.

Because `dumpLoclistsSection` passes `nullptr` for parameter `DWARFUnit *U` of `DWARFLocationTable::dumpLocationList`, which gets forwarded to `llvm::prettyPrintBaseTypeRef`, I suppose that `nullptr` is also a valid argument for parameter `DWARFUnit *U` of `llvm::prettyPrintBaseTypeRef`.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWk1v4zjS_jXMhbBBUh-WDj44X-8MkEY3ksw7cxMokZK5LVMCSSXxZX_7gpRsfdhJnFl392CRIHAcimJVPfVUqUgV1VoUkvMlCC5BcH1BG7Ou1HJT6Gxdab2hUl6kFdsu_1xzCfkLzxojZAFBiMryaTNjz1TlrNnUEJDbRitAblMhAbmtt2ZdSW-OEYOzGeNpU8zKKiuFNhqECJArOFkgU1SvuZ4DdA3Qqv28u_v_L_CJKy0qCbwVxPEczVEhDAQkyqrNRhiYBlGI_dhfBGyBfR9xn-e-7-cByz0_9BBGOM3CMLYir28u__g_mDaiZPBZmDWkWnNlRCU1IPFQ8uOaw2_OBpgKSdUWZlTClMMqNVRIzmCuqg0EwWVn6YylRWLtnYcz_G9C5shP6IaF_pzxFATXgERrY2rgrQC5BeRW86xRwmznTdpI08yzamMhdP9Y_KqqBOR2Q1s0e0RnjOe0KY0eDr0lemzXVSV1VXJYNaZuHIwpL4SU1qn6u6hrzuwdXjfduqr9df-iF4QQwTH1rTfaMXj9Z3J3d5NUea65SWoqFLQ_gERuev-DCbNOmI76tJVoF_r6LVG8wAv415cvnUw4-DldlF30UBRlU1EevL_86yRBR4TQo_akeCSES6O2yRMtGw5ItBf8RMvEbGvuLP12d7N6uIG6SS2jKUybAipeV8pAU0HLG70nTiHMukk7vtgY6v7MalX9i2cGkFuhdcMtQSCVDAqZlQ3j0Kx5G2Qwpdl3o2jGu2B7MDT7Dm0U7h2P5gDF31RVKLqBVBXNhktjlZiG7UfivoUZEA91oC1ynkcoYmGAsFvYyvdWeqvbL9-UkMZp92jVBSTqJyn6nFTaKE43gITWEUIaQGKrkdnUh6jssBIpILcPTW3hBeT2Dyle7IAoJC31XMgMeKsF8YC3wrhXGU9VjvMUTvRr1_iNSlZyBUj0VAkGyOpsSsWRVarXiUx08uM8PAbjfSNHqmlAor-h1E6brLY8wSgA3irotfEm2ixwHMApJGf0kY-9MRz-QIFFzn0SEASdqd2CL1GYhP6sFLJ5mRWyaS9kc13NQ0Au0Yu7ZZ8x7ZrB0CgSUj_l2QDi6z9X91Y78xunjKt2sODmq0scHcxZJbV5z-QuSvuBaxs7v8u8st-tmN1fK26-Bt4qslnGGygbTpWNvPiYsj9XTY9g99nruRjpufA4pmigZ624MVsXW5dU88dtze95Pgr-3hQbXlfwrbQwuOv362ZTf627B_7w0kopurVSvKtGupqIwbKSBfBu7MT92Ef4-yo0Ny-14toWNV0sEd9S2Qt7iKIpRCjlU1f2yxzgds8LoQ1XX-sfAdsejWxN1QdwPD9ukS1EFj1s8RS2EJP3YPtac0XNAEXn4zefNCdRaiKsja8D4McuOTEKP4qT51LlrhAkHkZTnLI0ep9e5wRmwMLU1bo_yvQwGpuOx6aTiCy4q30G9p7ByGOB4MKlTSitzdPE8hYx_jtc3IW7Kts9vAmy2PSokAkqCxoeBM5dlbk4eaRpydtxi9tu-E5YekfjsH8_z2jD2kuVg5GWwLvq51epM9N9f-CZncHZijHrqQ7KiZZf3R27aJs67NUE-HqS61J-u6CbC4if4J3SNnlUqn2GHibbHTg3dhcwUOo8bJ96NYj6dGi96k29GqbMUW9geN5IB2uiHFnd1Q_YYZ3gpmW0LO3GIsnlyIOf1DlCnRuLsDPyQMTrjPloaba6frRF8-PdbediWt68GEW1K8v8QfluueJP82I42pOdiyY_OGA-CIJ7OAxACCYghPSw7NoFXbundeNPQgvzITKfAc4fk0M8z_IChz0m4QSTIEvDz0fDQXyfOZWH3jiVL6apnPjpCcy0XrinsuCH8A_sOExFb1Y972M5RuzMxYuP7MMXD8CJJhvfmOcMdgR0YHT8OFv1ek0NdWkkc6nsFHSOkfn8W6SrShr-Yjqk4kUwZlE8ASrM6EGZ1y3R8-fvo7a3mdpqGHhXp4FwBUnUlD8AD4wW44RPdhuhIMixx3nMEMeOOa0Hb0U5PnUcJp3hlGMhsgNyevHxWUj-SuRM4X3XflNVpd5d3R_LHgx0ACxIMKr7CR7bn3mZF7QV4t5VSSLkU_WdJ2JTl92zareFaY_XVt1D6ZcCNb78k8W7gu4QscqsufrE6hinhy8N5vN9IBdZdvygFnu7iZOPvuLLALl0v-3kVLiXZK0r2moPj7IhIVPyp1nQ855LW8wkwtZnQjuXZm5EJU-fYfBqGHRnG7t6373jOowM9Yng64nkE5B_QrbA2AfeivTpwpumC8rYgNq7DWay7t52HdvW_RLnjfj0q8m0SwzJly4XjJ6cK7lNGDX0leX-t8mnDUt2BwOOgiRGYwr6YwpSGqeDJ9bu3n8I80448vn5_tzv1X-dV4MYj70aTDYhOU5D2GaRyybP3Yvz3qYHo4Qs3BvRoalf-KZS23Z-d_EfTIyfuumJ0KCZwwIeTgDPyIJ3gB_s-EZwfyLqEI2w60RBPaKLCaJpHhO4oUKeV3CMYys46gVH46YPErMYwSQpRZol2lBlkoyWZeJUsdGa6WYXuHqrGa-tcFmbsmsGmd7URmw0PhMl8VQq9xF09wgpzFRQ-9WuPnOrzzP3Cs4uSnoMR11R-0VHphyz4uji3iIenXN4k33-Ig8WAWxX7Vpk3nKS65jcZ8upqy7RC_aDRbBvnHngxYZL445-oetWbPs1VfuitW0xPNZf2H6uGBOygBTKpixn2Zpn32FeKQhC9AcIERTy3WYRqKvyiWvX8-a64UZtpZc8o43mdsFjh4QhgjXVmms7wepQG2UHrQ41VXTDDXfa7I-MISArp1qV78dPORJvG2Gf1yJbw4IbbUU8U8U4g6baNdm-ZWe3wu9QN3VdaQ7NmpqJ2kJDWuoKUvhES8H23Xyn23OCFvMLtvRY7MX0gi_xAoc-9kPiXayXIfVTgmIe-xkKcJRjHHM_ZZTSgDNMgwuxJIj4KCCE4AARb-5ThIIwwH7KUpYHGPiIb6go51aPeaWKC-fSZexh5F-UNOWldg3MhEj-3PobEAKC6wu1dGRNm0IDHzkv96sYYUq-vHItkSdw6qJR5fLv92K22j4tyX8CAAD__7984y4">