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

    <tr>
        <th>Summary</th>
        <td>
            clang crashes on invalid coroutine code
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            c++20,
            clang:frontend,
            coroutines
      </td>
    </tr>

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

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

<pre>
    See [godbolt](https://godbolt.org/z/arMx39szq) for details. 

Looks like this is a regression issue, it is not reproduced with clang-17.

Code:
```
#include <coroutine>

template<typename T>
struct Task {
  T t;
 struct promise_type {
    std::suspend_always initial_suspend() { return {}; }
    Task get_return_object() {
      return std::coroutine_handle<promise_type>::from_promise(*this);
    }
 std::suspend_always final_suspend() noexcept { return {}; }
 std::suspend_always return_void() { return {}; }
    void unhandled_exception() {}

    auto await_transform(int s);
 };

  Task(std::coroutine_handle<promise_type> promise);

 std::coroutine_handle<promise_type> handle;
};

class Foo {
void test() {
  auto s = 
        [this]() -> Task< {  co_await 1; };
}
};
```

Stacktrace:

```
clang++: /root/llvm-project/clang/include/clang/AST/Type.h:753: const clang::ExtQualsTypeCommonBase* clang::QualType::getCommonPtr() const: Assertion `!isNull() && "Cannot retrieve a NULL type pointer"' failed.
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-assertions-trunk/bin/clang++ -gdwarf-4 -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.      <source>:26:40: current parser token ';'
2.      <source>:23:1: parsing struct/union/class body 'Foo'
3.      <source>:24:13: parsing function body 'Foo::test'
4.      <source>:24:13: in compound statement ('{}')
5.      <source>:26:9: lambda expression parsing
 #0 0x0000000003801b18 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3801b18)
 #1 0x00000000037ff7fc llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x37ff7fc)
 #2 0x00000000037482d8 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f2a13042520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007f2a130969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #5 0x00007f2a13042476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #6 0x00007f2a130287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #7 0x00007f2a1302871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
 #8 0x00007f2a13039e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
 #9 0x0000000006312024 checkCoroutineContext(clang::Sema&, clang::SourceLocation, llvm::StringRef, bool) SemaCoroutine.cpp:0:0
#10 0x00000000063139b0 clang::Sema::ActOnCoroutineBodyStart(clang::Scope*, clang::SourceLocation, llvm::StringRef) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x63139b0)
#11 0x0000000006313c7b clang::Sema::ActOnCoawaitExpr(clang::Scope*, clang::SourceLocation, clang::Expr*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6313c7b)
#12 0x00000000060804c8 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x60804c8)
#13 0x0000000006082a9a clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, clang::Parser::TypeCastState, bool, bool*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6082a9a)
#14 0x0000000006082c39 clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6082c39)
#15 0x00000000060a9319 clang::Parser::ParseBraceInitializer() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x60a9319)
#16 0x000000000610dd88 clang::Parser::ParseTemplateArgument() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x610dd88)
```


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWF1z4ygW_TX45ZZcEsj6ePCD7bRrtzY7k51kn10IIZmNBFpAidO_fgskO5KTzk66OlXTlU5sdDmce-4HIGqMqCXna7TaotXNgvb2qPT6qB65kItClS_re84Brba1KgvVWLS6QTg7WtsZRDYI7xHej4-WStcI778jvKf6nyeSm-__RTiHSmkouaWiMUtA4Q0KN8PvW6UeDTTikYM9CgPCAAXNa82NEUqCMKbnCO9AWPdMKguad1qVPeMlPAt7BNZQWQdRupzi7lTJHblhKAnHn-ErJkKypi85ILJjSqveCskR-TZFsLztGmo5Ijv70nFJWw4PFxtjdc8sPFDzCCjdDoMAD2AROX8bbTqtWmH4waFMbQGMLR1HsjG96bgsD7R5pi8GhBRW0OYwDiOcOQ1RugXNba-lR0lvENmC-3PB82xqbg-D2UEV_-HMvk5_tYQz0oXCRYbDkcqycW5PiTvHvV2lVXsYn3jkjYsbwvmr3wATWj_ysRLyjYdS8RPjnf1_rv4Ic3T7SYk_r5kzhl4OTpeHgYBQcqLa2fx1Eu2tAvpMhT1YTaWplG4RzoS0MJdiWHE-3UUJ4ewTysNF7_wa7TMo5wdnhDfcWEONgb1Sr8ni5bHcvJNFXgQDiNzANLHAdQqfE75NuEmBW927TXY-JMDUwcsH0TkgU1Zv6V0VsP99byl7tJqySaG_Z-37A8Jb90M2gPBeK2UR3jfNUxt0Wg1Fsh_t9mNvmIxs7h8Q3j-8dHx5RGSTrogDYkoaO3SfIQTfTvZfPW2MM9yptlVyS13QNlMjZ_HgA-K-1dwOlndWj2J5WIe_MYZrl4rgXMGRML_1TXOOA04QTgBhvKNy6IpWC_7EgcJv_769Bd9tOiWk5RphjHAKFRUNL8c2eXf7bXP_DUxftMIChaKvXWdV2oJVcNXchT32xZKpdlTtrXi-TxuE90BlCef2ao8cmKbmCMUlVngHnW_hjBvDSzCq18Owm0mNUUxQy0vQvQTDtOjschJwKPu2uwQ8XKIwv9Oq1rQFquu-5dKaMcyq82FVbScargN-6hqlnRpDYAN6FtgEVvfyEeF9IeRr3F3GQFCXz1RXQQxBDYFyuLTrHHpvu94uDQSt0wKC4JQlATVtYF6kpSdEbpz4DQT3EAQ1Y4FVqmFHKiQiNx_Sc8ZG0s4clYWgYqpROigFraUyVjADQSVV4IWdD_tucMMG6jh029so73nfipxgs2GywQkimzj0Od1rzaWFjmrDNVj1yCUgnLpKxOkAgd-DcBUROQQ3U8h63PwQ3vfSd9P90FzcccIB7pW6AJL3AGMHSKaIVS-ZL4cphq-ioT-NaPHHaEKCk1z1sgRjqeUuY8BXVTo2e5y6RuvBVj-SK3dYDW2LkgI_defjysj13P0xCSE8hed_JAujIsrAl9Cwgb2Y4cOdFtL6BH8YqiR7NdL0-aCM1Zy2vux3IKQdmkD2i9Ic4W14GuldnHf8oxn_tKrSir3Hf9dwKvvud3kvakldl-qlP1aW0Ci3yq9nO5CZscVztnGGywx2rk7-4Ew9cf0y0Pub3wn1sGU7bjObnZKWn-ySda7RhP7_ZQkyLpFWmEYkjPHK1Zl3rREFwvtTlhySOGiE7E9BLfvhAVsatUw8cT9lRjueY-ZJXjHo7FFzWh4eRdN8bgE_f7bA6pp0nCZQG6_FZ8nHaTLDTubYOEsrArRwG8mnkP3EGXL6BjkqPo0ZFTPMbI5Jcp4nn8P0U2aY-TTrEhLhEMfAjpw97s6HsjGlEM4mR4F73tKxoKejvtXcKkaHY-huUm73VgtZ_8ErN1wo1bjcdTCXhd4mrSvi8IohyYsQrpn4Txtmf5cXtK0qX-4t1dfEmercuebnmP_yTjA6dImJ8zi69pilxYce--Pot1Onf9LV2TnQoWy-yFOWFjNPZz0vCbMwZtmUzZ3fyiefd9R4R4cta-7u1NjZ-e__EO6Gdk6489_rvJ1O9SdgatyGZvnbqV8izeD5TBpyJQ2mOf1aaf5Sejh3Z3rE13owkn-ox8a_GnInpD-jypWXX-ISI_nMpdXcJZqT6GOXtu549ffhBYv4zvXlPvWLqXomM6rJjGoUlmX2caE-jG-gNuO95ouoDkxeqb53116Ua1LmJKcLvo7ScBXnYZKvFsd1tQqzghIcJiTlmTvZxGlIUp4mcRkltFiItdsOwyhKowjHq9WSJmFZVWW-Kigp8xyjOOQtFc3SbRZLpeuFv0uu0yzGyaKhBW-MfzWJ8eVi4y-0Ozcyyldpt8G6Wjw_OG9hxg2tbhZ67W-sRV8bFIeNMNa8rmiFbfjagw33VW5ASRDyiTaihAsYMFXyRa-b9c9fkL1f_wsAAP__Vh51nA">