<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/72913>72913</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[lldb] Assertion Crash when evaluating the `__promise` expression if the promise_type has a specific alignment requirements
</td>
</tr>
<tr>
<th>Labels</th>
<td>
lldb,
coroutines
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
hokein
</td>
</tr>
</table>
<pre>
A small source code:
```
#include <coroutine>
#include <cstddef>
struct alignas(std::max_align_t) promise_base {
int count = 0;
};
struct task{
struct promise_type : promise_base {
task get_return_object() { return std::coroutine_handle<promise_type>::from_promise(*this); }
std::suspend_always initial_suspend() { return {}; }
std::suspend_always final_suspend() noexcept { return {}; }
void return_void() noexcept {}
void unhandled_exception() noexcept {}
int b;
};
void resume() noexcept {
handle.resume();
}
task(std::coroutine_handle<promise_type> hdl) : handle(hdl) {}
~task() {
if (handle)
handle.destroy();
}
std::coroutine_handle<> handle;
};
task coro_task(int v) {
int a = v;
__builtin_debugtrap();
co_return;
}
int main() {
auto k = coro_task(1);
k.resume();
return 0;
}
```
Reproduce steps:
```
$ ./bin/clang++ -std=c++20 -g /tmp/t.cpp -o /tmp/debugging-example
$ ./bin/lldb --one-line "run" --one-line "expr __promise" /tmp/debugging-example
```
We hit an assertion, stack trace:
```
assert.h assertion failed at llvm-project/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp:754 in void (anonymous namespace)::CGRecordLowering::clipTailPadding(): Prior->Kind == MemberInfo::Field && "Only storage fields have tail padding!"
*** Check failure stack trace: ***
@ absl::log_internal::LogMessage::SendToLog()
@ absl::log_internal::LogMessage::Flush()
@ absl::log_internal::LogMessageFatal::~LogMessageFatal()
@ __assert_fail
@ (anonymous namespace)::CGRecordLowering::lower()
@ clang::CodeGen::CodeGenTypes::ComputeRecordLayout()
@ clang::CodeGen::CodeGenTypes::ConvertRecordDeclType()
@ clang::CodeGen::CodeGenTypes::ConvertType()
@ clang::CodeGen::CodeGenTypes::ConvertTypeForMem()
@ clang::CodeGen::CodeGenFunction::EmitLoadOfReference()
@ clang::CodeGen::CodeGenFunction::EmitLoadOfReferenceLValue()
@ clang::CodeGen::CodeGenFunction::EmitDeclRefLValue()
@ clang::CodeGen::CodeGenFunction::EmitLValueHelper()
@ clang::CodeGen::CodeGenFunction::EmitLValue()
@ (anonymous namespace)::ScalarExprEmitter::VisitUnaryAddrOf()
@ clang::StmtVisitorBase<>::Visit()
@ clang::CodeGen::CodeGenFunction::EmitScalarExpr()
@ clang::CodeGen::CodeGenFunction::EmitScalarInit()
@ clang::CodeGen::CodeGenFunction::EmitCXXGlobalVarDeclInit()
@ (anonymous namespace)::ItaniumCXXABI::EmitGuardedInit()
@ clang::CodeGen::CodeGenFunction::AddInitializerToStaticVarDecl()
@ clang::CodeGen::CodeGenFunction::EmitStaticVarDecl()
@ clang::CodeGen::CodeGenFunction::EmitDecl()
@ clang::CodeGen::CodeGenFunction::EmitDeclStmt()
@ clang::CodeGen::CodeGenFunction::EmitSimpleStmt()
@ clang::CodeGen::CodeGenFunction::EmitStmt()
@ clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope()
@ clang::CodeGen::CodeGenFunction::GenerateCode()
@ clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition()
@ clang::CodeGen::CodeGenModule::EmitGlobalDefinition()
@ clang::CodeGen::CodeGenModule::EmitGlobal()
@ clang::CodeGen::CodeGenModule::EmitTopLevelDecl()
@ (anonymous namespace)::CodeGeneratorImpl::HandleTopLevelDecl()
@ lldb_private::ASTResultSynthesizer::HandleTopLevelDecl()
@ clang::ParseAST()
@ lldb_private::ClangExpressionParser::ParseInternal()
@ lldb_private::ClangUserExpression::TryParse()
@ lldb_private::ClangUserExpression::Parse()
@ lldb_private::UserExpression::Evaluate()
@ lldb_private::Target::EvaluateExpression()
@ lldb_private::CommandObjectExpression::EvaluateExpression()
@ lldb_private::CommandObjectExpression::DoExecute()
@ lldb_private::CommandObjectRaw::Execute()
@ lldb_private::CommandInterpreter::HandleCommand()
@ lldb_private::CommandInterpreter::IOHandlerInputComplete()
@ lldb_private::IOHandlerEditline::Run()
@ lldb_private::Debugger::RunIOHandlers()
@ lldb_private::CommandInterpreter::RunCommandInterpreter()
@ lldb::SBDebugger::RunCommandInterpreter()
@ Driver::MainLoop()
@ main
@ __libc_start_main
@ _start
PLEASE submit a bug report to http://go/llvm-crash-bug and include the crash backtrace.
Stack dump:
0. Program arguments: llvm/llvm-project/lldb/lldb /tmp/debugging-example --one-line run --one-line "expr __promise" /tmp/debugging-example
1. HandleCommand(command = "expr __promise")
2. <eof> parser at end of file
3. <lldb wrapper prefix>:43:1: Generating code for declaration '$__lldb_expr'
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0mVtz4yoSxz8NeelySkZOPHnIg-PLnNRmaqbinHPmTYVES2aDQMvFE-_D-exbIPkaZ5zJeFMpldXQP_40DRKIWSsqhXhLru7I1eSCebfQ5nahn1Goi1zz1S1JJiQZjcDWTEqw2psCodAcSTpqy7rrddL9t7c0FaqQniOQdFxoo70TCkk6PVpuHedYbkt3rtYZXzhgUlSKWUI_WcdD2-moZi9ZNGeO0BtojK6FxSxnFoEM71p3EMpBob1yQNIJJCTtCshwsv2925Jj9nnrDp11TXerJkgevdUcQARAhS4z6LxRmc7_jYUj9FNQSYZ30Nph05FNeLIFU1wiSce7zYWwxHql0XXWlUTcyC2EJfSGpHcQ-tNK2HCttw0qnjH5g60sCCWcYDLrzK8FhV7EqLwDVgr1CqU0vhTYuFNMAFhqwbsqWfh9hPC6vldtfHjW1hJa_dRv6x6SIN8MN8Drwd9Isr7GY9S2VivgcrfaAXaPGXNpJ2VPjzQsuIzDkq4bI_TT2rYXlH86-Lpk29kSgk_nfLOvnKN1Rq9OS_-Z5qizu3lzOrXzIHhnndIwCssDucHG4tRcbtVkWe6FdEJlHHNfOcOaV4IL3c2vPQk77QdyzYR6HSLmnYbn2OiuvP5-A89vjXKX2cmRhg8WwXh9xMZo7gsE67Cxp9bNAVwSOsuD7lkhmaoIvSP0DnpxQCZFe0sT6FVA6MzVTbheFk0DPb21xMBVQlU9fGF1I_EYX0qeQ6-nFfakUAiEUuMVofTAiC-NgWy79NCftBMy8CfR-BthIRwwBcxaNO0cHoN1rHgGZ1hx4sHSel0utu5QMiGRA3Mg5bLuNUa36-06fDMpckJnY83xM4Zujz8_YqENf2Ar7d2dF5KjCREk6Wh4NQCh2sWA0E9MabWqtbegWI22CfpCMoSJscHoH2iEqrrpIkXzxIT8xjgPxi57RvDNCG16JJ3-Sygeki_k3xesczT3qtSt90ygDA1fE3odIv9VyRVYpw2rEMpQaGHBlgiOCQnNuo0-oXQ9wN0_jBdYPMfgeIMHAYZNte2yQQYJsNzKVojUVSaUQ6NYZ3nQ1Re0llXY3s9R8Sf9oNdd_DBoJr1dfBwyY25t_OfQegSaZW3mZCEy-0XwsRGX4W6vqRbWpl_r2OXe7s3TqkG7ttSNd7iblcek_wpQLdG4FjjBQoaysyDPCppp8wXrD-BmXhVx6YjGaS3cg2b8a_mIJRpUxUcknmQ-_MWkPw85DMkjlmcktqg_UDYHufh7wGOok9NkXjDJzPSlMQHk0LTmv4QV7k_FzGrEuflanpA5d7WLLtrcMdu9duyQztLLrdQz4u7VmdSNv3__LHXO5F_MhJR5C3xiPO4dU8LX4-_fR3f3W_pnzwxHfha1Ix45gknxXzRPeu6YE0Un-zyhPTvxrKCQrefppwhvUefDnQsUnlHaKx6Afwu30N7NC_2hh8E-_DMqNMxhKPwA7IvmXuJOVscJs25igmXc9q53imdA_x-QZwA96eYBlyjfSurT7zYtNwyFNvd1071S_RG3eafoYSORNUYsmes0jeZPj2i9dPOVcgu0YVn4FeJO978xY3E0f3pfw-PgGBZ0tFZoFZ3NDuh-_Rr5ftqfFs2W2BY8mVXE_SbmFxjH3KdLJn2o8S7CEzMVun3PHeL7eqLrmin-NZ5pvSXnrNCJnr5g4d_byT3WI_vRKfsAImZKY9DtZ25X-nuo-68tzNyrxse1VeJ75W18p1w4GU9Vg_nRvzPak7hlXyt59GoDtL_XqUevjhS9gexe8u5eqXkfAmBixHLt9oUJ9aB1c2QXFo-ADlyzTIq8yKxjxmVHK8Si1vrtYTqaT8H6vBYOGOS-AoONNg6choVzTdBAZ4TOKh0PVZZ1rzDMLnqhKlMc1kfdboEQSyBnxXPcjF-2jczj9pz7utkcfySXEP--GV0ZVgMzla9RubCNiicd67a2Bx4xrt2xzk9OaHYOd4xXv3HW0wrtd0IPp0fR_ornbMfAm5GiHYCkY9QlSafQxFUbmANUHHQJpVi3lm4rx37-MKxp0EBjsBQv7RZhkJJ01A9x6p5oQlXxowWU2gDHQrJg1AoIHRI6yLKY5Bi3AcODc6cLfpvym_SGXeBtf5gkV_3-8Gp4sbhlV9fDfjq4TjEd0iEfDpLBVULZIGU8L_tFeSFuaULTfp8mNKE0HV4Ob3hCbz6lnOc0LfsJGSRYMyEvwzhealNdCGs93g7pTT-9kCxHaeO3GUrboaWEjgmlmyNZG0xXkwtzGzMh95Ulg0QK6-yW6YST8RNPZFxNYLQ5OhvHZPyxQAXYrt0hUiFNyXWyHavrBHCzKoMoY429LyILZoGBbbAQpSjarzUhWcHgf7wwGBP3wht5GyaM3c4Y4RY-vyz0OptfJ3UMiSV0FqPyvwAAAP__zYYCqg">