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

    <tr>
        <th>Summary</th>
        <td>
            Clang crashes on recursive template instantiation
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          joeri-hu
      </td>
    </tr>
</table>

<pre>
    Clang produces a crash report with the code example that can be found [here](https://godbolt.org/z/qrEd1cq4c).

Stack dump:
0.  Program arguments: /opt/compiler-explorer/clang-14.0.0/bin/clang-14 -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -mrelax-all --mrelax-relocations -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name example.cpp -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -mllvm -treat-scalable-fixed-error-as-warning -debug-info-kind=constructor -dwarf-version=4 -debugger-tuning=gdb -fcoverage-compilation-dir=/app -resource-dir /opt/compiler-explorer/clang-14.0.0/lib/clang/14.0.0 -internal-isystem /opt/compiler-explorer/gcc-11.2.0/lib/gcc/x86_64-linux-gnu/11.2.0/../../../../include/c++/11.2.0 -internal-isystem /opt/compiler-explorer/gcc-11.2.0/lib/gcc/x86_64-linux-gnu/11.2.0/../../../../include/c++/11.2.0/x86_64-linux-gnu -internal-isystem /opt/compiler-explorer/gcc-11.2.0/lib/gcc/x86_64-linux-gnu/11.2.0/../../../../include/c++/11.2.0/backward -internal-isystem /opt/compiler-explorer/clang-14.0.0/lib/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /opt/compiler-explorer/gcc-11.2.0/lib/gcc/x86_64-linux-gnu/11.2.0/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wall -Wextra -pedantic -std=c++20 -fdeprecated-macro -fdebug-compilation-dir=/app -ferror-limit 19 -fgnuc-version=4.2.1 -fno-implicit-modules -fcxx-exceptions -fexceptions -fcolor-diagnostics -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/example-817158.o -x c++ <source>
1.  <eof> parser at end of file
2.  <source>:13:6: LLVM IR generation of declaration 'main'
3.  <source>:13:6: Generating code for declaration 'main'
 #0 0x0000560abff7de8f PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
 #1 0x0000560abff7b74d SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f7bfe4343c0 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x143c0)
 #3 0x0000560ac2824f13 clang::ASTContext::getTypeInfoImpl(clang::Type const*) const (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x5e24f13)
 #4 0x0000560ac28182ed clang::ASTContext::getTypeInfo(clang::Type const*) const (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x5e182ed)
 #5 0x0000560ac28184f5 clang::ASTContext::getTypeAlignInChars(clang::QualType) const (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x5e184f5)
 #6 0x0000560ac043ac38 (anonymous namespace)::X86_64ABIInfo::getIndirectReturnResult(clang::QualType) const TargetInfo.cpp:0:0
 #7 0x0000560ac045bbc3 (anonymous namespace)::X86_64ABIInfo::computeInfo(clang::CodeGen::CGFunctionInfo&) const TargetInfo.cpp:0:0
 #8 0x0000560ac05648ca clang::CodeGen::CodeGenTypes::arrangeLLVMFunctionInfo(clang::CanQual<clang::Type>, bool, bool, llvm::ArrayRef<clang::CanQual<clang::Type> >, clang::FunctionType::ExtInfo, llvm::ArrayRef<clang::FunctionType::ExtParameterInfo>, clang::CodeGen::RequiredArgs) (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x3b648ca)
 #9 0x0000560ac0565c1b arrangeLLVMFunctionInfo(clang::CodeGen::CodeGenTypes&, bool, llvm::SmallVectorImpl<clang::CanQual<clang::Type> >&, clang::CanQual<clang::FunctionProtoType>) CGCall.cpp:0:0
#10 0x0000560ac0566268 clang::CodeGen::CodeGenTypes::arrangeCXXMethodDeclaration(clang::CXXMethodDecl const*) (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x3b66268)
#11 0x0000560ac05f3d30 clang::CodeGen::CodeGenFunction::EmitCXXMemberOrOperatorMemberCallExpr(clang::CallExpr const*, clang::CXXMethodDecl const*, clang::CodeGen::ReturnValueSlot, bool, clang::NestedNameSpecifier*, bool, clang::Expr const*) (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x3bf3d30)
#12 0x0000560ac05f551e clang::CodeGen::CodeGenFunction::EmitCXXOperatorMemberCallExpr(clang::CXXOperatorCallExpr const*, clang::CXXMethodDecl const*, clang::CodeGen::ReturnValueSlot) (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x3bf551e)
#13 0x0000560ac05dec2a clang::CodeGen::CodeGenFunction::EmitCallExpr(clang::CallExpr const*, clang::CodeGen::ReturnValueSlot) (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x3bdec2a)
#14 0x0000560ac05f88e8 (anonymous namespace)::ComplexExprEmitter::VisitCallExpr(clang::CallExpr const*) CGExprComplex.cpp:0:0
#15 0x0000560ac05fd89d (anonymous namespace)::ComplexExprEmitter::Visit(clang::Expr*) CGExprComplex.cpp:0:0
#16 0x0000560ac05fdd90 (anonymous namespace)::ComplexExprEmitter::Visit(clang::Expr*) CGExprComplex.cpp:0:0
#17 0x0000560ac05ff504 clang::CodeGen::CodeGenFunction::EmitComplexExpr(clang::Expr const*, bool, bool) (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x3bff504)
#18 0x0000560ac05c52c1 clang::CodeGen::CodeGenFunction::EmitAnyExpr(clang::Expr const*, clang::CodeGen::AggValueSlot, bool) (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x3bc52c1)
#19 0x0000560ac05dd416 clang::CodeGen::CodeGenFunction::EmitIgnoredExpr(clang::Expr const*) (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x3bdd416)
#20 0x0000560ac031061c clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x391061c)
#21 0x0000560ac031627c clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(clang::CompoundStmt const&, bool, clang::CodeGen::AggValueSlot) (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x391627c)
#22 0x0000560ac0366433 clang::CodeGen::CodeGenFunction::EmitFunctionBody(clang::Stmt const*) (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x3966433)
#23 0x0000560ac036fe7a clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x396fe7a)
#24 0x0000560ac03b6918 clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x39b6918)
#25 0x0000560ac03b3a55 clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x39b3a55)
#26 0x0000560ac03b4193 clang::CodeGen::CodeGenModule::EmitGlobal(clang::GlobalDecl) (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x39b4193)
#27 0x0000560ac03ba531 clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*) (.part.5348) CodeGenModule.cpp:0:0
#28 0x0000560ac0f07ab1 (anonymous namespace)::CodeGeneratorImpl::HandleTopLevelDecl(clang::DeclGroupRef) ModuleBuilder.cpp:0:0
#29 0x0000560ac0efc802 clang::BackendConsumer::HandleTopLevelDecl(clang::DeclGroupRef) (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x44fc802)
#30 0x0000560ac1d9a854 clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x539a854)
#31 0x0000560ac0f05b02 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x4505b02)
#32 0x0000560ac0901161 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x3f01161)
#33 0x0000560ac089c2f2 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x3e9c2f2)
#34 0x0000560ac09cc853 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x3fcc853)
#35 0x0000560abdb9b1d4 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x119b1d4)
#36 0x0000560abdb9718d ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#37 0x0000560abdaa6f07 main (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x10a6f07)
#38 0x00007f7bfdee20b3 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x240b3)
#39 0x0000560abdb96d0a _start (/opt/compiler-explorer/clang-14.0.0/bin/clang-14+0x1196d0a)
clang-14: error: unable to execute command: Segmentation fault (core dumped)
clang-14: error: clang frontend command failed due to signal (use -v to see invocation)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzNWt9zm7oS_mucFw0efhs_5MFxmpzMtOecm2TavnmEJGxajKgQqXP_-rsrcIKIY8epp7ed1DaLWH3f7mp3QaSSP57PC1ouSaUkb5ioCSVM0XpFlKik0uRnrldErwRhkgsiNnRdFQIEVBNGS5IKksmm5GQUXayEEqPocuQnK62rehTMRv4V_C0lT2Whx1It4ei_8P-H-sA99iNkI386HrmXI3fWft5pyr4T3qwrvNqI3DEh_yq5VHRNqFo2a1Fq1E1Aj6w0fDK5rvJCKEdsqkIqoVCGpBwvHLtjFw7TvOwJicOYRxytcuSySeJFHDpN-b2UP0unyMtm4yzLhjhinWtHpt-Is1aioBuHFgVxtgfwKRnVuSxr4vC8pmkhnEwJAeoLQZVDa-2kIgNETgq0BFjpaVxRPKydB6HyLBfKiBlV3HmgRSOckq7BEc6a5qWTATMj2Np-zKqqBdTN7qzBMwWpNRwxOJOBpYRTybzUYIrg0oDO1lSvHKFUKeEgqxwmS60o0zBAliAqpaPQkTlYCMeCIhhSa9UwLYFLkdMaQWVN-TMvuaORBvjh0gdDgl-EdljVoDGdGAysm1IYwVKUwBJxIWU0uqDaAbZFa698Izjiwjlq5ydVJSAAg4i0WTp5mUnnO0wH8_TQwGkYmKH9ajAAnAy7K5YQBTA1qADhkqeAl0kYRpeAxoRJazKeo2UgJCgaU4laNooJFB8VVkWeboXw3YqJYwxf0sLJ68dai_V-lUvGHM8b-z2FIILPLi6f4hFn2I4bj19-5CUrGi5wmpF_Yf66C_5ASDuU_ZkoceVCsPFj0b0hUp6n3q28qVERLvPi0NDfYKUd419CEhv8wV6yeLbxHrfvuPr4KYjzxWS8LzBQUeJUgtPSZMZamzzS-tiHVZFxUSkBWRRS0JoyJY0IE8_ruSJrc1WRQ20g3hQEwIH1UxHY0GsTag75OmdQQyBDN4XJnmyzAQZMVF3dyKwDJsFtMCFdlrIGzCijnINqSImXi8X1fL74a_b5w-Lyy-z2yl_Mr24Ws7tPMCvMKNEUGiqnf9WVCifxJl6UjIHXhnS8ySiYt9luFHxoK6wHFRakQmYgIhVVNZQkqO9YsGRGsAK1A_124PPlwcwL4CPGcvzx4-dP5Oa2TfjGcngxFxDz3eHIn2BJg69WXbBP3XWnBoqB6TygjO5VBoLAJe7GhX9R7NI0yyZcJBn0DhA6pq-4h3on7vIlRNFftOQFro_kQeZ85EOnMiXtqRoLLCBwzf8n3d5AdzoJORkqg5kOKvI7RRPQkYkwCAPmksUCahBUNrGAlgsUPa3VHasOTlR6BWWUj2uJy_XC3XioBaZ-nibo4WV-4oeZF5A2_0BnFcxmd_dzaAFgkbTHUMDvHytxAxX3BmIHMPQG4xliCnBnKvO7A_rOJszgjoQBZiEPbeRe4gv-RuS_DbUBZaGOhqjDLHoD6lkBsXJTzlew6mz0_2logSNODRxwWcDjPnA3DCgLEpyKlrJ8XMumJqYdrWDt4HUG21cTlbOLG2P0LZ8b6B4hnepboRtV3oq6KfQhTvemdUQ1u1fLxEYXpSkL3oEOzdXoHTEyh9wCqaY7uL5qSobppR0Yvx1nYuGM4jBhlLw6T3uAlqhbCVUKhgrMoTYECyst0YCQMgdBjrnTn5NUyqL_jQ13F3yg_vFWZPal-_SRTmfvzBZYOwIlHza6RXl4rp0X_0vxVgXKeeuo4YSWzW7Fjwaii8_Uska3_PpiCFLjJWsxTAdujJiXkrc551UHYxjtcsrdGvqUzwJvaEzGPdI38dBau67Y4oUbaC2fQmVK5tdzmPxlKGOhcwc2iP04OT6U51-_fhJ6Jfnlc9EeWKw_wsrTJ_Etwn7yLfLybF5ZwKFhOMBra78uZKHnM6jXqVD_qH8q7FCkao_RoB82lRqu2Vba42d77RUj7FsImF0_44OCu0Lqfmz1Lvkb2gnB_4bldVcJZp4ydHp3DB4API0DjH0tB_gDB0SRJ97lgDcZ_nnYb_DBiUyGFrFMFtgmgwbYP1hWdpjsfaH5GxgbQhbjcBAkSSIOtiNziXc7GySDdM1jL5R_zusjyGNWRFGnbXdyjAbweDLlvwTPhtUCfSuYeAiGT93_G5jJAEwWueE7QvUZ3kswVqTa3c6JFiCCtsJx0NexyGfe8axm5eMbGL2mdrZc7kj3p2FsCFmMBy0Q5yHE2dGMb5YloOAHWZ8ojSDIPgvfbmKgqYk9djyLO70erAmUWE471PjOtO7xbbuvE1CeGkYWZW9AOfYn76CMCxD3AZDolxyqYqPvmMRbNrvbfR61ZRe_0l3sieUTmQKZWqawO40gjsMgON4UW8mF5I97o-A0NAxKi0YwoJGJyZHVv3uKJvCkTeG6kCktsOOxo_jp-v05yb5V7oXAiWyBVC1b2H0B9PdT7-BdySfz2PXZoS3nLfBLkeVl_vK-5DXLtHITvSf0uiFiMY0GTAMaRe9j-ocwRAIWw3jAMPSmB5fnboav8zoRdoRmYZ8MsNMoONgQDLHfy-qjeBAd0j6DVrI1_biiSo-jIExMD9ZXtrMH8-1uJXMnNPUON4RGbXur1D6IQHH7UHs_0mslmworHqBrYV00ecGF2o3O7ixExhLX75vuot0kn0MuadbbvvRYHL_u9TA0yPpet3YWmMenNIms5vZf3DSZ3d0PyoRY00FdPF3vFgUGhQXTG_g_Sm0Ld76e9QvdRrBGi07kJyeyYWTmtsDZRXnqel5srZwrhc_HS74D3clwBZmZ1sJlV9lkyvxsYLR2phsocbRkYrfdXidysqooDDQLu10Vp4wlUWA_2TEonyk8dC-NvGznLIony_6ZgWRh7te3lKfT1OOwlpi3aPfzkt0d9YoO2mjoTSwZCHp7eb8O3fMMMgt6PIA-8RJOtjaee_dmcSd7H_G-4GGig6v84ZW0aW2BpJzSGPI6QVudgqRr1Fkkt0XEbFByIXw3DchiUeQpW0B4KL3oTb5vl5Lh_mRs5vFDUGLNMh2YMuYuJa3-0zgPFT7N-HQymBGzgY8_mhJfQSJaEtG6EByzXlN822hG7sQS3zRrN5sz2hQGFgME5vW03u7fTt1GSLIuE2wVgyLgwkGDmbY2-8Sot6kFcR6MTAiS95bp9IyfB3wKyf5M57oQ3et65h09URMApwC7qiF-iBYQZNDtgwJcxzo3Os4aVZwP3siDG7smHQMq9BSGa_vlVEp-g3CFw7yuG9y8uIqiZOKfrc5dEfCI-W7igisRD3jNFzRyJ24U0dg_K2gqivp8FF2MfL8UP4lRAb9H0eVZfu67vu_Gbuj54dR3x_4knUxF5k8m0zSNoEEMXaiWeTFGHPiq4Jk6N5DSZlnDySKvdf18ktZoPCHMdKCfNnCrqs6_SaFyZ9WcmbnPDfb_AUJwiYw">