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

    <tr>
        <th>Summary</th>
        <td>
            clang: coroutine program triggers "error in backend: Cannot select: intrinsic %llvm.coro.size"
        </td>
    </tr>

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

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

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

<pre>
    The following C++ coroutine program triggers `fatal error: error in backend: Cannot select: intrinsic %llvm.coro.size` with Clang 15:

```cpp
#include <coroutine>

struct task {
  struct promise_type {
    task get_return_object() { return {}; }
    std::suspend_never initial_suspend() { return {}; }
    std::suspend_never final_suspend() noexcept { return {}; }
    void unhandled_exception() {}
  };
  bool await_ready() { return false; }
  void await_suspend(std::coroutine_handle<> h) {}
  void await_resume() {}
};

template <typename Func>
void call(Func func) { func(); }

class foo {
  void f();
  task g();
};

void foo::f() {
  auto lambda = [this]() noexcept -> task {
      co_await g();
  };
  (void)call<decltype(lambda)>;
}

int main() {}
``` 

C++ file (source above): [repro.cpp.txt](https://github.com/llvm/llvm-project/files/8154315/repro.cpp.txt)


Reproduced with `Ubuntu clang version 15.0.0-++20220226042310+9d7001eba9c4-1~exp1~20220226042411.12` and compiled with `clang++-15 repro.cpp -o repro -std=c++20` prints error:

```
fatal error: error in backend: Cannot select: intrinsic %llvm.coro.size
clang: error: clang frontend command failed with exit code 70 (use -v to see invocation)
Ubuntu clang version 15.0.0-++20220226042310+9d7001eba9c4-1~exp1~20220226042411.12
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/repro-8b993e.cpp
clang: note: diagnostic msg: /tmp/repro-8b993e.sh
clang: note: diagnostic msg: 

********************
```

[repro-8b993e.sh.txt](https://github.com/llvm/llvm-project/files/8154309/repro-8b993e.sh.txt)
[repro-8b993e.cpp.txt](https://github.com/llvm/llvm-project/files/8154310/repro-8b993e.cpp.txt)

Reproduced with "clang version 15.0.0 (https://github.com/llvm/llvm-project.git 69297cf639044acf48dd5d9b39b95c54dd50561d)" on Compiler Explorer (https://godbolt.org/z/Eds5GnrWe) fails with:
```
fatal error: error in backend: Cannot select: intrinsic %llvm.coro.size
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: /opt/compiler-explorer/clang-trunk/bin/clang++ -g -o /app/output.s -mllvm --x86-asm-syntax=intel -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics -std=c++20 <source>
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module '<source>'.
4.      Running pass 'X86 DAG->DAG Instruction Selection' on function '@"_ZZN3foo1fEvENK3$_0clEv"'
 #0 0x0000560eecbc1c8f PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
 #1 0x0000560eecbbfb60 llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x35bfb60)
 #2 0x0000560eecaf9ff2 llvm::CrashRecoveryContext::HandleExit(int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x34f9ff2)
 #3 0x0000560eecbb872e llvm::sys::Process::Exit(int, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x35b872e)
 #4 0x0000560eea7aee56 (/opt/compiler-explorer/clang-trunk/bin/clang+++0x11aee56)
 #5 0x0000560eecb0151f llvm::report_fatal_error(llvm::Twine const&, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x350151f)
 #6 0x0000560eeda60846 llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4460846)
 #7 0x0000560eeda63922 llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4463922)
 #8 0x0000560eeb7ff7f7 (anonymous namespace)::X86DAGToDAGISel::Select(llvm::SDNode*) X86ISelDAGToDAG.cpp:0:0
 #9 0x0000560eeda5f3a4 llvm::SelectionDAGISel::DoInstructionSelection() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x445f3a4)
#10 0x0000560eeda66f96 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4466f96)
#11 0x0000560eeda6a5dc llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x446a5dc)
#12 0x0000560eeda6c7a2 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (.part.890) SelectionDAGISel.cpp:0:0
#13 0x0000560eeb807750 (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) X86ISelDAGToDAG.cpp:0:0
#14 0x0000560eebeb5238 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x28b5238)
#15 0x0000560eec327089 llvm::FPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x2d27089)
#16 0x0000560eec327321 llvm::FPPassManager::runOnModule(llvm::Module&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x2d27321)
#17 0x0000560eec327dc7 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x2d27dc7)
#18 0x0000560eecef9529 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> >) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x38f9529)
#19 0x0000560eedb77c1f clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4577c1f)
#20 0x0000560eee9f0909 clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x53f0909)
#21 0x0000560eedb77df2 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4577df2)
#22 0x0000560eed573041 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3f73041)
#23 0x0000560eed50d062 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3f0d062)
#24 0x0000560eed6400b3 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x40400b3)
#25 0x0000560eea7b0994 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x11b0994)
#26 0x0000560eea7ac94d ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#27 0x0000560eed3a9085 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#28 0x0000560eecaf9e83 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x34f9e83)
#29 0x0000560eed3ab158 clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3dab158)
#30 0x0000560eed37e58a clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3d7e58a)
#31 0x0000560eed37f0cf clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3d7f0cf)
#32 0x0000560eed387a95 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3d87a95)
#33 0x0000560eea6bc0c2 main (/opt/compiler-explorer/clang-trunk/bin/clang+++0x10bc0c2)
#34 0x00007f07a6b3f0b3 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x270b3)
#35 0x0000560eea7ac4ca _start (/opt/compiler-explorer/clang-trunk/bin/clang+++0x11ac4ca)
clang-15: error: clang frontend command failed with exit code 70 (use -v to see invocation)
ASM generation compiler returned: 70
fatal error: error in backend: Cannot select: intrinsic %llvm.coro.size
clang-15: error: clang frontend command failed with exit code 70 (use -v to see invocation)
Execution build compiler returned: 70
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzlWlt3mzoW_jXOi5a9uBp4yIPjOG1n2iYrTufMnBeWEMJmioFBkDjn18_eEtgIO2na0s7DZDm-6La_vbWvElERP18-bDlJiiwrntJ8Q5YT6wpehBVV0dRpzklZFZuK7khdpZsNrwSZzI2E1jQjvKqKamIv1BeS5iSi7CvPY2xb0jwvaiJ4xlmNDWkOK-QiZWRiuVn2uJshjZlI_-KwInlK6y1ZZhQwmC6MnxjXE6N7nxvqxcqybbHsNGdZE3MysZcHsBN71Z8n6qphNamp-Eom3pVqJKRtBsZ2qeBh_VzyfjdREza8DiteN1UeFtG_kQnLn1gBjiSqXU7yrif2FcGPw3RRowTgJRpRgjjCnD9ylE9apzQL29afXS5J85PF8oLvGS_rN6z6WKQxafItzeOMx6Galxb5EVZvuFqg-xUVRUboE01RQDR-PuUkoZngA5KSoJp1BH3g7bCFoUIEuwqbSbanWHrrVFw0O34GcR-veq_5rsxoLdUFNzynO05umpwdVEauy2iWwXrYQRLsbflS35GOxpV6ZxkVAmyo6GuRXC45zOmalWoNmk_hqtlFoYST9Fhs16FNXZCM7qKYAkvXZOJe1dtUTNzroSpMUY5DE8A_VoRSjCdwhvsN3YgHhkjx2MuYswyFCB0Kgpy90vjpMQOWT3Y0PadaB8sm_QmdE0rSjCN1UTQV44RGxSOXpBbIb8XBgmfgEmb1vlaMb-u6FCgz6wZeG3ApTQRuZgc_0OO0H1OYpwz6BikI-PRN17HB71g3-qpArO-H5Ps9jogbxmPltAD9l6jJ64Yw6b7AOAUYErixmTEzpooXy7DwNTccyzYNaAhizzBMHtGAOVNz4q34vsSP3kDHNGemhcIBk4Dt2pWA9khUUlOrT02XHICTaaF-kKk0r2vWQcClSnDCtTj47rNuVv0c28l3tgKgu-XwixJaUhV5zRWbO2Q3oUdm-R60lBXg7D0D9aERnEwfCViA4BxoPhaMKt_Vbtcv3Q9J4YFWECAQ_96fh3NnWrJplubNfrrJm3bIFr0j2QHuDAeWhUj3qutDLkC2wN91KmUAeteICt4jsBJdTiBfjp9xSjd5IWoQ7U7Ini4S_sSrt_l3H1eL9YosHh4Wy_fk4f2K3Nx-_Hj7x4fP78jNh4-rNXm4lc1XX96R-9Xd7f3DQX3upLoxLgTsmDJWtFo0dtxK8I4FS8H5xqRqciJYlZb1YUDFSYb7B720Piz5Fv6tm3pXdiY79aMgsPnskCL88Api-71bMNZG6PbXvreO7ohuLHdnBKec605vQHpMV2uc2bczHvfE11rWOaMm3w1oBgPIPLACjyVzOzAch7LE8ePYjYPIDqLAZa4Dvwx3bmLkA8IEyC2VE67Ial9mRQVfTikXcVRk9ayowDnf_AX_q1i47_LqD4xd0q8JyczR-_4Gv9uat2iiHTBOSdRsMEgUVY1u9Ls3MxWikbspDbxLxWsoJVhFxVZirSuKfmAJIeeMe1i-7BpmCvK6hkVI3ICFdpIyoCu4awsS8MCQ_UEwa025QKdy04bJasrbHcI2VJkpZP3519bHtm1tnjHdYMyERlqiN4BEtGzqmSDTHbJNplPw8VMqdlPxnNd0DyEV5M0zMl1D34axaQ0ZMdtiimNfv4oEB4uclmIL2zdNWAEd06NfAZJJXkylDPXmQSTHNLaVZJe_migbaOZFghlfSSsB6klrglG1SGQypUZaOHKJ4XTDc16p0Cl7bOy5b_IcS8ESs9qJ5WEyjEPIHTZ8ojndIC8e2gMEt0bmaJ4GyPLaPXTOLfhPf06uF-8wMYUPgsEQCzIksZYaLUO5XD_paCMFB5yGFf7552cbMmMzWT2uPv_dnlhOCKnQ6hH6cJDKWaE-NIixN-DPnRucs4iZzE_IHWY_UrEeUDvX6QaKqPey4qgOae4C7VR1CRlP7IUh_w9rm_raURJBZiUtRRVqz0J9WWac5k15m6vVMHUBI93koO5ZgeoXEJkU_7juwsvY265EcPCdCNHSINIkSBKrB3GJKnbPGWTU1fMSc699rXqUNFaQcgE0kNZoIB2JQQNpD-ToexY_J8c75T7Ujz60pSxGR5QjItAgOn2I1KOcu_NRiJmmXEsj5uryMEzXTHryUA47lAEiVAECKrBD98MTntewAuxpYs3HF46Eo-Gd9_HGdG74zryH92DNYOYf1jILRtWTwetfvFbdGgvr68_gl1oTHAO140hQGmpvgNoOLOubqFUrek3IAXbynOQs7CU5mDhEhKrbDr1nRLMCBhG_xqDfZzDyksRLPCRG8yJ_3hWNIHj8IUoZnwPFAjhl4PehOMP0yzsEk3BwN_G8swx0cbuJTZ1vivu66IWFXlTwx5ObBHLMN7EOHCjGPAneoM4gjnc8X-TxClIr6BoVpMSggTQHIKkbszdq7yLLrigkiVdQcH0V2rYegvzRfYzGAiLUWLAGLDCPftsAgcpt_omyLTi5Dq3Gwklfx8MMcqF65geGjOuDxU91FhFqgSnyDc9zjR-yoB9E_U3DQpBaaIp45KLlv7gyZm89TGfBnMrup_ff8iUubf_1MGdbnuEHPeA3d4i1SzT_B5BjiUiDPB9Cti3zDZA_yfxY3_C2aVS4gEaD6w3hxszrwc34hrLnNrc6Av-wK49q--tBAyYNtBa2GE8CF4h1pzCY-IF_vVJF8K0s0QBIr_v6WC-t8g3eBqkkqDfkPacxr9acVmx7K687hJYv9Ya2bv0bo9Qx4DcGfYRv54b0PB5W75t7nujNndQXgwVbISxaxV8er4iaPP1Pw8OyBiVc9hJH-hSWT1Va8xCCKqc7bVLME9pkdRiDa8STrlcnQmkpK7yRkkpf7rKmBnq-EHkegyT4lHsoWvD2p-pXLVDU5SKTBe2XPB3ox2L90BU6I4Y3V-LrM2BpaQQPEiMwND2-w9Ic0Ojw1nxHtbR93PTdtSUODag5lHQMNeKpDbR61hZfnDU1X4yejrmSugZPTxNczzYcsw_vpr0zOINvRGR2IglryGwdmREb84HgFC15zp_jmcg52b3Mynj6CbuO4DT0Wt4Qzx3DiGzNzyqcRyaO9yv-a0yOWLUZEpSG2tUL8cgIAocwZobt1eLRaS2qij6jM7WXegmGfmt5Wpb1Tn3GKewlNg38fHCKwAInJp2cl-aDNPR-lbWjWfYPSFSLNiif4UTqSFylj7w6mx9aep1r08DwXXUvfSTUHbCFlZSX7O2ug1dqCF764nlumOSI46gAinarDEtzqW7uhnZ4dl-OjSow0kxrPMbDLtz0wlUYsj0IWf2IsJ7B2JQiKiklbTA2hHVFUzwmVt2D5YA7VG88bO_6FcnF0QVL3VDCl3MmltddfHtHaQGv7aHe34ro_Jb4w1M57ttvOpW7b_I1TXj2rEn09d0b8eAOYGr6HAxUKzJdn_yfq8Y4wo6lLPvC1k-yY9vjrk9fFLakS08CYrcDmgcfTNypxwzO5rCvDF20rmhMIUgeNSGYAyEkBku-VwhgluJlCUDvx1TUL6XoJx75oCYlxVv8ZXsg_Vahdbo0vuxQNJrs9ETK9j0auC_hvO591xKBMxnASzL_vbIbR2pSKJrUtCSPziNmMEs-xzROlmDIBTWKXWIGO-gBQcjdIDELwyyN0I_Rqg575KEV3tunT46PnsgONhPFbK4KbW-QSNnuMBdxGCVq_bEuNnDJA001Rz7U-Wuf-lmsP_VuNLsHpqr2oUQub869X_5w0-_gVBkmMhk1aRa_zurh8YKL-NKOAzugF3VaZ_zy8IDLaw_7WtZPy8ayLpoqu_zxhwxcxzS9i-2lPZ9TPzAimtjMp2AlCY9iK4rm1HANFscXGY14Ji4nLmiilfMnIpfAm2H3-iK9bJ_l8k3X8BxzxiMKs1xGY4vGThxMHANq8DSbSfxFtbmoLiWkqNkI6MwgOohjJxXyNodLcrA-beptUV3SRw5ypVXaiAtJ_lLC_y9eecQv">