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

    <tr>
        <th>Summary</th>
        <td>
            when a constexpr returns rvalue and bound to a nonconstexpr variable, if there is inherit list expanded from folded expression, the parser will crashed
        </td>
    </tr>

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

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

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

<pre>
    ### **the code is here:**

```
#include <string_view>
#include <utility>

template<size_t Index, typename T>
struct TupleElement {
    constexpr explicit TupleElement(T&& ele) : element_{ ele } {}
private:
    T element_;
};

template<typename T, typename... Ts>
struct TupleImpl;

template<size_t... Indices, typename... Ts>
struct TupleImpl<std::index_sequence<Indices...>, Ts...>
    : TupleElement<Indices, Ts>... { // **error occurred here, when remove this line, there will be no crash**
    constexpr explicit TupleImpl(Ts&&... ts) : TupleElement<Indices, Ts>{ std::forward<Ts>(ts) }... {}
};

template<typename... Ts>
struct Tuple : TupleImpl<std::make_index_sequence<sizeof...(Ts)>, Ts...> {
    using TupleImpl<std::make_index_sequence<sizeof...(Ts)>, Ts...>::TupleImpl;
};

template<typename... Ts>
struct SubModules {
    constexpr explicit SubModules(Ts&&... ts) : subModules{ std::forward<Ts>(ts)... } {}
    Tuple<Ts...> subModules;
};

template<typename ModuleType>
struct ModuleBase {
    constexpr explicit ModuleBase(std::string_view name) : moduleName{ name } {}
    static constexpr SubModules subModules{};
 std::string_view moduleName{};
};

struct ModuleA : ModuleBase<ModuleA> {
    using ModuleBase<ModuleA>::ModuleBase;
};

struct ModuleB : ModuleBase<ModuleB> {
    using ModuleBase<ModuleB>::ModuleBase;
};

struct ModuleC : ModuleBase<ModuleC> {
    using ModuleBase<ModuleC>::ModuleBase;

 static constexpr SubModules subModules{
        ModuleA{ "ModuleA0" },
        ModuleA{ "ModuleA1" },
        ModuleB{ "ModuleB0" }
 };
};

struct ModuleWrapper {
    static consteval auto init() {
        return ModuleC{ "ModuleC" }.subModules.subModules;
 }
};

int main() {
    auto x = ModuleWrapper::init(); // error
    //constexpr auto x = ModuleWrapper::init(); // work
 return 0;
}
```

### **error message:**

/usr/bin/clang++ -g -std=gnu++20 -MD -MT CMakeFiles/testClang.dir/main.cpp.o -MF CMakeFiles/testClang.dir/main.cpp.o.d -o CMakeFiles/testClang.dir/main.cpp.o -c /home/ayo/CLionProjects/testClang/main.cpp
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: /usr/bin/clang++ -g -std=gnu++20 -MD -MT CMakeFiles/testClang.dir/main.cpp.o -MF CMakeFiles/testClang.dir/main.cpp.o.d -o CMakeFiles/testClang.dir/main.cpp.o -c /home/ayo/CLionProjects/testClang/main.cpp
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module '/home/ayo/CLionProjects/testClang/main.cpp'.
4.      Running pass 'X86 DAG->DAG Instruction Selection' on function '@main'
 #0 0x00007f4d76df9fd2 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib/llvm-16/bin/../lib/libLLVM-16.so.1+0xf86fd2)
 #1 0x00007f4d76df8140 llvm::sys::RunSignalHandlers() (/usr/lib/llvm-16/bin/../lib/libLLVM-16.so.1+0xf85140)
 #2 0x00007f4d76df9694 llvm::sys::CleanupOnSignal(unsigned long) (/usr/lib/llvm-16/bin/../lib/libLLVM-16.so.1+0xf86694)
 #3 0x00007f4d76d28f02 (/usr/lib/llvm-16/bin/../lib/libLLVM-16.so.1+0xeb5f02)
 #4 0x00007f4d76d29184 (/usr/lib/llvm-16/bin/../lib/libLLVM-16.so.1+0xeb6184)
 #5 0x00007f4d80cd5420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #6 0x00007f4d775291df llvm::SelectionDAGBuilder::visitGetElementPtr(llvm::User const&) (/usr/lib/llvm-16/bin/../lib/libLLVM-16.so.1+0x16b61df)
 #7 0x00007f4d77520c7b llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) (/usr/lib/llvm-16/bin/../lib/libLLVM-16.so.1+0x16adc7b)
 #8 0x00007f4d775b34c6 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void>, false, true>, llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void>, false, true>, bool&) (/usr/lib/llvm-16/bin/../lib/libLLVM-16.so.1+0x17404c6)
 #9 0x00007f4d775b2f57 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/usr/lib/llvm-16/bin/../lib/libLLVM-16.so.1+0x173ff57)
#10 0x00007f4d775b0dfb llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/usr/lib/llvm-16/bin/../lib/libLLVM-16.so.1+0x173ddfb)
#11 0x00007f4d796c6fcf (/usr/lib/llvm-16/bin/../lib/libLLVM-16.so.1+0x3853fcf)
#12 0x00007f4d7715d9ab llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/usr/lib/llvm-16/bin/../lib/libLLVM-16.so.1+0x12ea9ab)
#13 0x00007f4d76f31ba5 llvm::FPPassManager::runOnFunction(llvm::Function&) (/usr/lib/llvm-16/bin/../lib/libLLVM-16.so.1+0x10beba5)
#14 0x00007f4d76f37753 llvm::FPPassManager::runOnModule(llvm::Module&) (/usr/lib/llvm-16/bin/../lib/libLLVM-16.so.1+0x10c4753)
#15 0x00007f4d76f321c5 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/usr/lib/llvm-16/bin/../lib/libLLVM-16.so.1+0x10bf1c5)
#16 0x00007f4d7ec26b72 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream> >) (/usr/lib/llvm-16/bin/../lib/libclang-cpp.so.16+0x1a08b72)
#17 0x00007f4d7ef8bc1f (/usr/lib/llvm-16/bin/../lib/libclang-cpp.so.16+0x1d6dc1f)
#18 0x00007f4d7dd4e6c2 clang::ParseAST(clang::Sema&, bool, bool) (/usr/lib/llvm-16/bin/../lib/libclang-cpp.so.16+0xb306c2)
#19 0x00007f4d7f8d1715 clang::FrontendAction::Execute() (/usr/lib/llvm-16/bin/../lib/libclang-cpp.so.16+0x26b3715)
#20 0x00007f4d7f8529b4 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/lib/llvm-16/bin/../lib/libclang-cpp.so.16+0x26349b4)
#21 0x00007f4d7f948614 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/usr/lib/llvm-16/bin/../lib/libclang-cpp.so.16+0x272a614)
#22 0x0000560923324d8e cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/bin/clang+++0x13d8e)
#23 0x00005609233225b0 (/usr/bin/clang+++0x115b0)
#24 0x00007f4d7f5366a2 (/usr/lib/llvm-16/bin/../lib/libclang-cpp.so.16+0x23186a2)
#25 0x00007f4d76d28df0 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/usr/lib/llvm-16/bin/../lib/libLLVM-16.so.1+0xeb5df0)
#26 0x00007f4d7f535e03 clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const (/usr/lib/llvm-16/bin/../lib/libclang-cpp.so.16+0x2317e03)
#27 0x00007f4d7f502a62 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/usr/lib/llvm-16/bin/../lib/libclang-cpp.so.16+0x22e4a62)
#28 0x00007f4d7f502cbe clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&, bool) const (/usr/lib/llvm-16/bin/../lib/libclang-cpp.so.16+0x22e4cbe)
#29 0x00007f4d7f51c89e clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) (/usr/lib/llvm-16/bin/../lib/libclang-cpp.so.16+0x22fe89e)
#30 0x0000560923321e66 clang_main(int, char**) (/usr/bin/clang+++0x10e66)
#31 0x00007f4d7591f083 __libc_start_main /build/glibc-SzIz7B/glibc-2.31/csu/../csu/libc-start.c:342:3
#32 0x000056092331f25e _start (/usr/bin/clang+++0xe25e)
clang: error: clang frontend command failed with exit code 139 (use -v to see invocation)
Ubuntu clang version 16.0.0 (++20221129052932+d43a2f09de51-1~exp1~20221129173035.462)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
clang: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang: note: diagnostic msg: /tmp/main-f7ed96.cpp
clang: note: diagnostic msg: /tmp/main-f7ed96.sh
clang: note: diagnostic msg: 

********************
ninja: build stopped: subcommand failed.


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWl9v2zqy_zTKC2FDov4_5MF24jaLZBM0Prv3zaDIkc2tLGlJKnH6cD77BSnJFh27dVKfgwvcIkgVcTjzmz-cGZIiUvJVCXDthFMnvLkijVpX4roAkr-SQv24yir2du1gv_1BDp44eKLWgGjFAHGJ1iDA8SftgOPeOG7_O3K7n_ZP7POSFg0D5PgzqQQvV8sXDq-Of3uMolG84OptP2p-K9jUBVGgWfAfsFTormSwdfAMqbcaSrIBtNjNkUo0VKFFUxdwW8AGSoWceNoOIoQQrUqpYFsLBNu64JTbxA5OFg6OHBwhKMDBKXL8iX7Ug0snnupn5MQ3hmt80zKuBX8xECd7QYv9LL-Tr-l3z4fKDZQZqDYej9FCHlXvblMXp9m1ttLT70rGKcgPcZ1JxbQ2_oRrYy8l_LeBkmrGHbvxeKzn4xla9M871bXJLKPuZrX0jn-rEWhrOnju4HkXZCBEJVBFaSMEsDbO8Ay9rqFEAjbVCyC15hIVvDQDSlOgV14UKANUVogKItfDuPyZx42mOFnI1t8akZK9x38BX0PfmSivxCsRzPFn7RhOOj7xTafmLlDOioCfeGeP7dBPG_Idlu-cpaOgyrV_WkXTA5_Za6ORvFxdkn0790i0ft4Mz032ULGmAPnLdb0nPelmuSc5w6OtN-2lb5a6VtAQd1YdsP3Y2m9nLd5qONS7HZkSCb_Ue0_q4GSn0yD_Ii2rN8HGUP9Tv4mnZuSojlIRxelA3MARlhWHiqKj0i2Jll3e2chSfmLwDrTzZ93AiUg-QdoiGg6eJ396Sv70fPnT35A_OyV_dr782U_l904719U7efpfb2CT1XH3l-tgrOPJwbMzqL2fU08t6umOd0v6gUj6tyB1DcK2maX2CykQaVSFeMl1U9Dm8wONBahGlL13LHCzDtt4b7DxkayAflIZeKnQhvDymHQDbYsc_8bWqK_ZPWbH35VYU1wHNdq83fv4ExxfK_G9Y9hZwrUccLQn7Ps-q7tsC_8GpCSrE60lnjdSOHieaYPMaUHKlYOnDp6i0QqNTJ65WZVN-w67aPRwg0YPCzR7IN9hzk0RmCuQaqanjhnXzLR5x7SuxxUaPczPpR0zNKrOZ0y1vdaVzrhz8lY5eD6751X5JKr_AFXW7MHMVu2n-9vJs6knG64QQVmzQgLqSiikKrRWqpbGXNofK67WTTam1cbB86J46f8b1a0kB8-5lI3Bi0jJUN96m95ed04oI_S7EoSa7qoWUIuKgpTAkKwa0b7WM4mUFeVEAUOiKZGkgtdq3EJ-VoR-R6zZ1Lt22B07bvokqpUgG0TEqtFdlQaO_p-61dMGcfwZVLlO3TUREgQiCkHJUJWjnBfQUmJNOdMbrxWUIIjiVdmO-HrkW1OWOtPXRErk4HjelFSToCf94oGUZAXCwTGqyq7saqpPAcdx5-DgmOD_SSJ0M_kycvzbm8kXdFe2-VZDeYYCzFOHI-8xaiSB26a4uM-H2HeRu3Vd143zgMURy9OcYWTiue0k3mT78CR4qUy0LdqQTfZEgrwuK6kEkI1p-2aI671dikwS62Ku4Fm_RLxoF4O6me2HeHZ__6-HkReNZTX2HDx1t3kS5QzrRLgD7B0ATrzAPQb4W1M-81VJiq-kZAUI2Wf238cUeoFrYcKHRozS4BimWQGkbOrHDpmDk6Y05wMMFZUOgMuYLEoDC55vw8NJ7uLfFwRZmLu2b4IDQamXBJcQFHmJrVE4EJS4lIUBdtFyKUCqSsBSqE5qy3SbRMsoGBW8bLYjk9_0QK3WAgjTclwjxwsCbPs1GuoThzj1WD7w626t3Uy-TBtesL6Av3DJ1RdQ3Zb2SQlrvfyh849pBsxyuYDTvSiLPJZb4OMD8C6Ns7PBW3iH-eXCsAmjcWbBTmzYmR_Q6ATsu2cohm-nRHI6LSr63YLPCy7Vkiud0Cvh-LPDIQaK8I5TWTFYVrWWIC3SgRF0hstJIcF6eKk463bku3dKNNC9-7-GJ6uq4mJ-jAM3oJHlx_TAjzgP4zP9OCmKvSul5ctdyb1sHMZ-nofxDr8uM-4Bfpflp5bPHr9oysfygdA1L6GHauF_N3YxBRjLM0sBq1CmEY1ymv--JD8J_ZzmliSr_MVeyFIyNNWBzrpZGljrqJkubh8MJCW2feyqmPteRsIB6vmTBto3dX83XjeDjIQW3uAAbxyH_hl42_2lHYTdq0thpUEc-hbW8AAr9ujQtgWsCH3rGss96vbUskP-lyLOco_a1rVKPVAcZTFG7Q7JILjdcDUl9DuU7LFRdaMr5GD4hpNVWUnFqbwtV-bE3DTCA5KvQBiIZyCCrh_bhD7IYhap3oJ8gfIXVAsiVqB-QXRPytUxkkEmM4eF3yC3X_cmnxww7Iww2VWe3aljU_L_NrCslV3T9O6gfhVcwbLfIwwmMchJU-iaV4A5nf3ZRP8Wmer18RgwCoz0ZlJHQdSGAXGTLMZWGFhNE-RJRr2PJ82jwljEqGfnTavVYSyAiFox96R3qpPnhR1qz7AhnRPbGt7_fxmrZL4bUdsoVinPE-bFXjjEORdVqfYx0a6XLdBGwSc3XceA4SjzY89atdi1kYU4zQJ7IW1qXoDQzRIxtygDbH0IJ6dV-VzCOY7eD9IssNBbFTpPgyTyLPQdzr0SLxUl7zG_U1Kv2QuhjjGJPBt1X-3DyE2x7-OAJYAo9Zbd8el-AU-EIG86sfgzuia7Lc-k60Dtd33H-h78u9OqdkH5LAELmH8ADIeZew4jL8xci5FVafPQjyLy8f3yUXP6XhIRa3Hh8HBzzvLhecZMELn-BrR6AfE208G5VfsDDpJD8WbZvD_vWQpjd21S1J8lfypzHtv3s9w2WHRgsBBcfxjITPCXvimZzbxZtdmQkh0miqOBs3_ZVjFSWC_3xauvDYPaslzS7dbz2j8yvaNYtjdjXUBaxPrFUgnCleyHD9iRotDrz2zZuvFW5GSfg03wmpi-VMDE4Fq9FY5tY7uYRPiksU1qIO_Scu8BK48cTNQEp7qKn5BOrNp0UWNgCEhkr57k0Bg0g48a4x9VJk9b4h9Vds-lOtU8bUhR_AuoqsThJX5NuI4UcxR6vvH6mPoLbUgzO2_a5T30aJKetOHN4NkqT0fq0inb_502vFAZxDkkqWW13cF5X208iKIWYV8Ie9Qm00zOL2wuRJElyuoTwtTL3cRHy6UGu5SKCGUkIs2x4QVz8Hylx0bPP-5-xNPdn3jse1qebHql20czaPiMqeNP_ADr33vxBwXfy3EIqBV8hjqAw73heg9296P-pLUYyru2C9HOlznhBTD0ytUawZar9nM4zzcGbCSg0QtSFZIAiA_aok7MH1lTqqbj_QJC8qpEXjR2x11D0N5vYex5OHVDnPrYwVMW-ATnbsog9Eben7CtvT97Ii_2XT8cB4P0026_tA7d-XJNB0fMLYk5YUabipkDIlRXkm_bIdOsFQWwGy7e3c3Ztior87EbYrs9JtpIM9L76Dd-Bre-3fXnZLGYzL6ixddbNH-8v3_8990_v6D53f3tM1o8mtfTP76gb7dPj98Wu0vHp2PXl4n58ufkFeaOQAAylRUYImrH8hz98Vxt6u7ebJTHwNJof-_3WQZy_VEHXMgNJS__QzRbs4yRVFVdA-u-nLJXxngo-Ypd-yz1U3IF114U-64XhHF6tb72_TgIwjyAkIau7wVxynzKcp-S3EvCLLzi19jFvuu5kRd4kZeOGWCfpG6UxgkhSeY6gQsbwouxTprjSqyuzK32dZgmYXxVkAwKab5txbiEV2QGHYyd8OZKXJtEmzUr6QRuwaWSey6KqwKuzbeGZPDtS_tlg0TihRQNmNDJqqZkeq0TVFblnvSFCE6ywhxr87z7OpFLxMs1CK6QFohgW5OSAdMJZoPyqtDPejpI2R1fqDX0V8Lm20ZzNw_sqhHF9eev_I19_jcAAP__DTAABg">