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