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

    <tr>
        <th>Summary</th>
        <td>
            Unknown type! UNREACHABLE executed at llvm-project/llvm/lib/CodeGen/ValueTypes.cpp:541
        </td>
    </tr>

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

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

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

<pre>
    Top of the tree: 47231248f59b733b6351b71523c7067a9559228a

Testcase:
```cpp
// ./bin/clang  -cc1 -triple x86_64-unknown-linux-gnu -std=c++20  -emit-llvm -disable-llvm-passes coro-alloc.cpp  -S -o a.ll

// Modified from clang/test/CodeGenCoroutines/coro-alloc.cpp

namespace std {
template <typename... T>
struct coroutine_traits; // expected-note {{declared here}}

template <class Promise = void>
struct coroutine_handle {
  coroutine_handle() = default;
  static coroutine_handle from_address(void *) noexcept { return {}; }
};

template <>
struct coroutine_handle<void> {
  static coroutine_handle from_address(void *) { return {}; }
  coroutine_handle() = default;
  template <class PromiseType>
  coroutine_handle(coroutine_handle<PromiseType>) noexcept {}
};

struct nothrow_t {};
constexpr nothrow_t nothrow = {};

} // end namespace std

using SizeT = decltype(sizeof(int));
void* operator new(SizeT __sz, const std::nothrow_t&) noexcept;
void  operator delete(void* __p, const std::nothrow_t&) noexcept;


struct suspend_always {
  bool await_ready() noexcept { return false; }
  void await_suspend(std::coroutine_handle<>) noexcept {}
  void await_resume() noexcept {}
};

struct global_new_delete_tag {};

template <>
struct std::coroutine_traits<void, global_new_delete_tag> {
  struct promise_type {
    void get_return_object() {}
    suspend_always initial_suspend() { return {}; }
    suspend_always final_suspend() noexcept { return {}; }
    void return_void() {}
  };
};

extern "C" void f0(global_new_delete_tag) {
  co_return;
}
```


```sh
$ ./bin/clang  -cc1 -triple x86_64-unknown-linux-gnu -std=c++20  -emit-llvm -disable-llvm-passes coro-alloc.cpp  -S -o a.ll

coro-alloc.cpp:47:17: warning: 'promise_type' is required to declare the member 'unhandled_exception()' when exceptions are enabled [-Wcoroutine-missing-unhandled-exception]
extern "C" void f0(global_new_delete_tag) {
                ^
coro-alloc.cpp:39:10: note: 'promise_type' defined here
  struct promise_type {
         ^
Unknown type!
UNREACHABLE executed at /Users/akumar9/Snapchat/Dev/llvm-project/llvm/lib/CodeGen/ValueTypes.cpp:541!
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: ./bin/clang -cc1 -triple x86_64-unknown-linux-gnu -std=c++20 -emit-llvm -disable-llvm-passes coro-alloc.cpp -S -o a.ll
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module 'coro-alloc.cpp'.
4.      Running pass 'X86 DAG->DAG Instruction Selection' on function '@f0'
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0  libLLVMSupport.dylib       0x000000010ea11d47 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 39
1  libLLVMSupport.dylib       0x000000010ea10e05 llvm::sys::RunSignalHandlers() + 85
2  libLLVMSupport.dylib       0x000000010ea12390 SignalHandler(int) + 288
3  libsystem_platform.dylib   0x00007ff8073e9dfd _sigtramp + 29
4  libsystem_platform.dylib   0x00007ff0af027320 _sigtramp + 18446744042164442432
5  libsystem_c.dylib          0x00007ff80731fd24 abort + 123
6  libLLVMSupport.dylib       0x000000010e9396a3 llvm::llvm_unreachable_internal(char const*, char const*, unsigned int) + 467
7  libLLVMCodeGen.dylib       0x000000010bf1223d llvm::MVT::getVT(llvm::Type*, bool) + 237
8  libLLVMCodeGen.dylib       0x000000010bf1175f llvm::EVT::getEVT(llvm::Type*, bool) + 207
9  libLLVMCodeGen.dylib       0x000000010baeb311 llvm::TargetLoweringBase::getValueType(llvm::DataLayout const&, llvm::Type*, bool) const + 193
10 libLLVMCodeGen.dylib       0x000000010baeafdb llvm::ComputeValueVTs(llvm::TargetLowering const&, llvm::DataLayout const&, llvm::Type*, llvm::SmallVectorImpl<llvm::EVT>&, llvm::SmallVectorImpl<llvm::EVT>*, llvm::SmallVectorImpl<unsigned long long>*, unsigned long long) + 299
11 libLLVMCodeGen.dylib       0x000000010baeb48a llvm::ComputeValueVTs(llvm::TargetLowering const&, llvm::DataLayout const&, llvm::Type*, llvm::SmallVectorImpl<llvm::EVT>&, llvm::SmallVectorImpl<unsigned long long>*, unsigned long long) + 26
12 libLLVMSelectionDAG.dylib  0x00000001123dbdd0 llvm::RegsForValue::RegsForValue(llvm::LLVMContext&, llvm::TargetLowering const&, llvm::DataLayout const&, unsigned int, llvm::Type*, llvm::Optional<unsigned int>) + 160
13 libLLVMSelectionDAG.dylib  0x00000001123f734f llvm::SelectionDAGBuilder::getValueImpl(llvm::Value const*) + 4527
14 libLLVMSelectionDAG.dylib  0x00000001123f615c llvm::SelectionDAGBuilder::getValue(llvm::Value const*) + 92
15 libLLVMSelectionDAG.dylib  0x000000011240944b llvm::SelectionDAGBuilder::visitTargetIntrinsic(llvm::CallInst const&, unsigned int) + 1147
16 libLLVMSelectionDAG.dylib  0x000000011240bed9 llvm::SelectionDAGBuilder::visitIntrinsicCall(llvm::CallInst const&, unsigned int) + 4937
17 libLLVMSelectionDAG.dylib  0x00000001123e3694 llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) + 116
18 libLLVMSelectionDAG.dylib  0x00000001124934d0 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void>, false, true>, llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void>, false, true>, bool&) + 112
19 libLLVMSelectionDAG.dylib  0x0000000112492ab2 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) + 6642
20 libLLVMSelectionDAG.dylib  0x000000011248fe18 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) + 2488
21 libLLVMX86CodeGen.dylib    0x00000001076e5f1e (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) + 126
22 libLLVMCodeGen.dylib       0x000000010bc9c74f llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 367
23 libLLVMCore.dylib          0x000000010fde388f llvm::FPPassManager::runOnFunction(llvm::Function&) + 1007
24 libLLVMCore.dylib          0x000000010fde99e1 llvm::FPPassManager::runOnModule(llvm::Module&) + 65
25 libLLVMCore.dylib          0x000000010fde3f20 llvm::legacy::PassManagerImpl::run(llvm::Module&) + 1104
26 libclangCodeGen.dylib      0x000000010a94722b clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, std::__1::unique_ptr<llvm::raw_pwrite_stream, std::__1::default_delete<llvm::raw_pwrite_stream>>) + 4443
27 libclangCodeGen.dylib      0x000000010acca598 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) + 1992
28 libclangParse.dylib        0x000000011384b435 clang::ParseAST(clang::Sema&, bool, bool) + 597
29 libclangFrontend.dylib     0x000000010986fb84 clang::FrontendAction::Execute() + 84
30 libclangFrontend.dylib     0x00000001097f30bf clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 783
31 libclangFrontendTool.dylib 0x0000000106abdd96 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 678
32 clang-15                   0x0000000106957bd9 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 2089
33 clang-15                   0x00000001069553fc ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) + 284
34 clang-15                   0x000000010695514c main + 11116
35 dyld                       0x000000011219251e start + 462
Abort trap: 6
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzdWllzozoW_jXOi8opFrE95MFZ-nZXJdOptm_P8kIJELamsfCASOL76-doAQvbSUjmPtyalBtjIZ3znf1IdFYX-6tVvUN1icSGItFQOvMXCEee73o4LoMki3w_C_3AzSI38Pw8csKIJEGQeF5MZs7tzFno64q2IietXG-GQ0d_8t3OjHhf4IMu4ZIxDte8InyN0DzPXTQXDdtVFL3EYRriecd_8fqZzyvGu5f5mndo3opi5t_mM-8aPp4D6-iWiXlVPW3RvGAtySqqfs13pG1pi_K6qeekqur8EjDA_CWa14hcVpUN3KB6qAtWMlqgsqm3SCGDYQFSwddNXdDfKL8Bgp1gnLYS_Ii6TZGTLW13JKcIIKNZdK2HBd3uKiIomvk3Yr-jctrl5SVazfw7PaMVTZcLhVuxSUVDmGhn_jUyKOnLjuaCFnNeS0JAOrouKKBtAPmGNnQW3cqPhcZmCxPbFj2ChKyVA7foqWbF6_w3hBcVPYiATp7NvHjmJYpUQUvSVQLQ9pNbQQTLT-lJFaekKBragiZjiQEEXEhCvKYvOd0JyRM1VHQN12LeKi0Moqnfr4n5nkAwxchti_YJtG-D_KC2XjXUCpxlEOks0TMCHq09Uu0bijQ6AwfbNPVzKg6S6ed5zVsBfthYU8ydEuxo-sBmcGFeoFGE2PO6lkFGWLI_6MpoKa9krICMLQzWJdwwDiGZyE_PQxnTW6B6RxsiakBGn2GiJpOm7R8z7wYp3IofZCh_MYCfeaGtnRFRdCBZ0IoKauwvmaXp7jNkz6i67VrIBkVKqmeyb22XzOq6QuQZkkDaUFLsjf-cC5KSVDL5jtxPiaCXGx5Sjz3UM07zlqeMyEEsdFt6Bs77jrWu6oxUKZgo1TpNBVmf95q3YvqMGH221MENtjnL6iTqFbmdDpdUOpv92Ei9plJmqei0zv4NKbiP5JGC0LEpGWeCAYKD9qdkjRMyJeMnRCYmykECg16r5gz2kfZPLEFfBJUMPO8G_mmKpQOEzqvYUB8SltHdiMG4STgNjuFRu-kLNf6r9Q5HPYC_wBFcXHlBz6ThkMzk7cyLbP-Cn4i1YJH_dEzWbVEjU8NVF7al24w2clHHdWQWqbY1q7m2naTwvKEcDeMtksuhpwBBoDwF1_O_D4ExB84yr84HevMDveD2T7Dw-G8W3L2iHj-R6nGkTmQD84puoDQCatPPTA3TMefftQsgTdI1g3_7cbe4-bq4vr8DxdG8g0YKESEL0-8tbWRTR351W9KAfr8sOdnlGyK7v1v6BFftHU2to1_9lF8sO_SHcPeTVJ0quq0ROcDuAODx_m6xvIPozsD5EEFZtwYv2NWNkD6wEWLXypym6uSaiU2XXeb11mI2hgBW7VQrisCqkGvyqiu0C-UNaTcoI_kvyIk5lblwB4yaOoceBoRu667Rw3IleHydMyK10XQctTlEk7jUkJcCiKCi2-6Gxt6BRwm0F-uGbMHr1lAIuEy7i5Po_GRwfjA2j0PTlfigCshuAXL9jjRgXGln2XnATqdklXErT86UtoP8zmWdlwGhnvjyyY-OywhGkq300y8dz-UU9CgHHggna9pIh4WhbV10slP2oiOn9yKjSXyO5D_iEN0ufpsDUPhC37j2c8lkCcGW65BXHMqeO_yeYUfGZnRsI_QMXgNBj9r9NoPWQfVZsCCmvO0gP-zrDm3IE0VKnXoSNEkNOI981qDHxeorgm6npUI5EuVPrKm5tDB6IpCUQuf-_udDuvznw_X3-2__uvuRyiUwLD14V0NvJm-Y6tAGh0EIwkSuW3Y76e2XxR4GTMw6L47-cx1KXLfAkUKni3u7b_XNYwOklaAr7dHxYVJDntMaFEfJVnVdN0i3iCD4NYKUo73iAyAc6gTnQID1lmwNtfirSqMyY8Q9nzgwPvUBPp6fOGhEcWhvFU0vjo07KqKAAzqiVLZEZd1sB8KaaFSWsRP5NCnKAqUtW0Pog0coOkYHeBoZh5SOF_kQiWMyboxxGGHsYM8NMcYe9j1NOLAJ5yOJj_G5ZQF1nGQy6Sminq9phJMVl_hJSHzLQPIu7Tg4AGRsyBYp6BCKGank1mgDbquadLVng4b9eKDjIKWsN5bmQU6NKhpQmRz_GqqsdD3PLyxUDz9X-gaaR7i1PVbtyjR32eIP9vYN1_gDXN0oKC2udxbXu4lsHcM2mcyW0Mx3XYvtCgoBFff1M4VAXV-bgyAte18SR1huiSD3ZC-TlTGGitw3weq9lvKaxHiN60yHTMoisxjc1NsdtAAK3s9VO9bUSJxXEH5EhMPgcgvF4Sek9rr5BtsbKFRHxrs7oTNlybtcBjevapBIXg7rzjzrfSPp86f7Ad_AMfk_UfQntRYapXlDTuurOZT5XnMHpUESLLKicCwoP-i6_VI3SmlnRmwdaqNAyns5o5n_Qb_jxPiuvr-rDQUZaU2u1GcKKmr7fZ7rT9ZLGfnYzm_2guuOVQUUzVGmUYaz1aNGrYxvMnzQt08ung4mdIP8I2AmAElMDXWDqTCwk2CcTYHxxFomtAt849CHg1nyEaQb8HfZdL5hd2M6F_fqCqfjzGiRTMY5IJSgPocSJ30FdaPJRqV-mODJKEfA7H79gK3XWJ8E4skKS3w8SgL2gm_wwx6FGsvya9hm_BpBYhVrRcqEPrYcJT39qKCCMEOJQypPa32AMJpqCSZ1Dfdqt6gPGeGmf21gj6lJeuwvBkf3D5Zl-pBLplvGI5k30TLQjx6MMy53wxby2FvCEBtQnjMZVFxS6VzvgII9_Xf-AK0x47TnPwJ18mxABSzMDsQbyj9sWU86AKv8RyENSlfuhGPCa77f1l17OO8320J_AVQA5Kr-s5C6fcn1vKl9Sp7k0ai0HFGXu3wL11lAZ5D4_dbB8w9IGnp-U6SQlAX149hG8uVRMu9PGD6OwXX6lt7D00EkCXUngHhQRx1ju5ihgzv3u-HgAzooPTv3VXRN8r2-t4DovsyAeRuE6zrYwFA1Sx1KnfEKCwZJcOR5mXn_q1vFLYNcm_-ivPjeCWhk5aby8PiWkTWvW8Hy9o6vwX1MebKmfKUEasiSkibffDentXYls6YadO_M0hX9nUn3cHduipUuZL1d_6DleLjX4-KIoFHCYkjDwyuYNHX1TcfZfzqa7sQ408sDmt1zA1Ug7Y9pzq02r0TNMfM7FCCzHxpLjLHZD3rRVEvnOQmS-IyA0ErLl1vG5fXBzKohvK3UAeHvnB25wGK5sttv43xJ39h58QDpUZ5FjqPASuh-jDPsBzYktQDojxku6ZYYa-rSNt7PB0kf_MnA-UsjEfLCYm4pI4nDMouxzblfYMytQ0EfmtunXibAfGcqp6j0nawc-_x2xyqIbPBRwnM64tV7W_w6tIPOo9h4ge-ewFmBggwkC05IYNuVhKN414wPqJ7qnJyCOEF96OjDqD-28zThOfT2p382jCSIMmiV89xNt4SN89qiacheRql_Mz670s3NyXmWeUF9ON2JzRbe96fDCfwyR70qbtyVci8L1OlO-RTboY0Y3AR_AIGLcySVYXL50E9DhIAdizMEjuLJcxMvcOX_MSDmsBGHJiYX6vxRNES-1kDh0RvHi-LKLxI_IReCiYpeHb1NQq-9SPr8K6KLrqmuPv8CKAhiHF1srgInDNzCx24J6a2MnTJxfTdzaRyTokxCclGRjFbt1Sy4ngW3F-zKczzPCR3fCT2M3UuclYkDmxDsJ2WOy3KGHUg1rLqUjC_rZn3RXCkMWbdu4aHs4NvDQ6jScktGe_qkE5u6udqwhhRM7MmFAnyl0P4XRum4_Q">