<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">