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

    <tr>
        <th>Summary</th>
        <td>
            Segfault on assignment when JIT compiling with -O1 or above
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    Hi folks. I've been working with @vgvassilev to identify an issue with Clang/LLVM 19. Currently running on Vassil's branch here: https://github.com/llvm/llvm-project/pull/94166

I have a minimal repro case shown below. It works with `-O0`, but crashes with `-O1` or higher.

## The C++ source
```cpp
struct box {
  box() = default;
  box(int *const data) : data{data} {}

  int *data{};
};

box foo() {
  box ret;
  /* The assignment here causes the crash. Using direct initialization works.
   * With -O0, this compiles and works. With -O1 or above, it dies. */
  ret = new int{};
  return ret;
}
```

## The repro steps
```
❯ ./build/bin/clang-repl -Xcc -O1
clang-repl> #include "foo.hpp"
Segmentation fault (core dumped)
```

## The backtrace
```
#0  0x0000555558b9e025 in clang::CodeGen::CodeGenTypes::ConvertRecordDeclType(clang::RecordDecl const*) ()
#1  0x0000555558b9ef2b in clang::CodeGen::CodeGenTypes::getCGRecordLayout(clang::RecordDecl const*) ()
#2  0x0000555558b9ab87 in clang::CodeGen::CodeGenTBAA::CollectFields(unsigned long, clang::QualType, llvm::SmallVectorImpl<llvm::MDBuilder::TBAAStructField>&, bool) ()
#3  0x0000555558b9b358 in clang::CodeGen::CodeGenTBAA::getTBAAStructInfo(clang::QualType) ()
#4  0x00005555589a6853 in clang::CodeGen::CodeGenFunction::EmitAggregateCopy(clang::CodeGen::LValue, clang::CodeGen::LValue, clang::QualType, clang::CodeGen::AggValueSlot::Overlap_t, bool) ()
#5  0x00005555589bc204 in clang::CodeGen::CodeGenFunction::EmitCXXMemberOrOperatorMemberCallExpr(clang::CallExpr const*, clang::CXXMethodDecl const*, clang::CodeGen::ReturnValueSlot, bool, clang::NestedNameSpecifier*, bool, clang::Expr const*) ()
#6  0x00005555589bd268 in clang::CodeGen::CodeGenFunction::EmitCXXOperatorMemberCallExpr(clang::CXXOperatorCallExpr const*, clang::CXXMethodDecl const*, clang::CodeGen::ReturnValueSlot) ()
#7  0x00005555589955bd in clang::CodeGen::CodeGenFunction::EmitCallExpr(clang::CallExpr const*, clang::CodeGen::ReturnValueSlot) ()
#8  0x0000555558995700 in clang::CodeGen::CodeGenFunction::EmitCallExprLValue(clang::CallExpr const*) ()
#9  0x000055555899597e in clang::CodeGen::CodeGenFunction::EmitLValueHelper(clang::Expr const*, clang::CodeGen::KnownNonNull_t) ()
#10 0x00005555589963d4 in clang::CodeGen::CodeGenFunction::EmitLValue(clang::Expr const*, clang::CodeGen::KnownNonNull_t) ()
#11 0x0000555558995d0d in clang::CodeGen::CodeGenFunction::EmitLValueHelper(clang::Expr const*, clang::CodeGen::KnownNonNull_t) ()
#12 0x0000555558994070 in clang::CodeGen::CodeGenFunction::EmitIgnoredExpr(clang::Expr const*) ()
#13 0x0000555558ab0d92 in clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) ()
#14 0x0000555558ab7ef9 in clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(clang::CompoundStmt const&, bool, clang::CodeGen::AggValueSlot) ()
#15 0x0000555558b14cdc in clang::CodeGen::CodeGenFunction::EmitFunctionBody(clang::Stmt const*) ()
#16 0x0000555558b2672f in clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) ()
#17 0x0000555558b6a44a in clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*) ()
#18 0x0000555558b664bc in clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) ()
#19 0x0000555558b66d5b in clang::CodeGen::CodeGenModule::EmitGlobal(clang::GlobalDecl) ()
#20 0x0000555558b6e1b7 in clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*) [clone .part.0] ()
#21 0x0000555558896d81 in (anonymous namespace)::CodeGeneratorImpl::HandleTopLevelDecl(clang::DeclGroupRef) ()
#22 0x00005555588719e7 in clang::BackendConsumer::HandleTopLevelDecl(clang::DeclGroupRef) ()
#23 0x000055555834df3f in clang::IncrementalASTConsumer::HandleTopLevelDecl(clang::DeclGroupRef) ()
#24 0x0000555558351424 in clang::IncrementalParser::ParseOrWrapTopLevelDecl() ()
#25 0x000055555835225d in clang::IncrementalParser::Parse(llvm::StringRef) ()
#26 0x0000555558342568 in clang::Interpreter::ParseAndExecute(llvm::StringRef, clang::Value*) ()
#27 0x0000555556333495 in main ()
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8WM1y2zgSfhrogoqKBP8POujHcrTrxLuRN5PbFEi2SExAgAWAcrRPPwVSskRKdmRNKi6XSDaA7q8_NBpAU61ZIQAmKJihYDGijSmlmvwFdAejVOa7yUeGN5J_12O8QiTaAk4BBH6W6jsTBX5mpsTId7bF1qrisMVGYpaDMGyzw1RgpnUDXb85p6JAZPnw8PUTdpMxnjdKgTB8h1UjhNUnBf7aKkIk0jhVVGQlLkEB8qa4NKbWyJsiskRkWTBTNuk4kxUiS863h8eHWsm_IDOILOuGc0SWie-GIXIWyJl2vytc0i1giismWEU5VlAriTOqAetSPgucApfPY7wyrad672fofHh0UOggMsdpY3CmqC7htNVFoYOlwiUrSlDjU6OIeIh4-KkEPEdkhsgMa9moDPbNodP9Z3XdSbRRTWZwKn9gFM06GbafiMSIJBh5C5zDhjbcIG_QzoTBiEwzKbTBOTW0GzDt3qNZ91i0iqPFKUyM92P3PW3zQXvvvf214DZSHhD1YGIFp8DaWZu2_ndRV4Ew7dzijDYaNDYldJSO8f-0jYacKcgMZoIZRjn7PzVMdrGnxwe1Fir-w06AnRsyx6ZkGmeyqhkHjanI9wMOnVw7PzSVW7C9mcE5Az22aizCvVYFpuVXwLPlY8BD294o0fPwyONhJl-Z_S7YtIFaXx5wR1CyQNMlHiOyTBvGc_tkApFlZpfQBwU1xx--ZZl1pxt0bEDeHUbEYyLjTQ4YEbKRclzWNSKk67uGwnLfsdnGD0YkzqQCnDdVDTkiyXWupDT7bhQ9i-GXjg7Gzg_HcZzA_sVpAg4JMBO4xWvXsjedyxzuQfQ-nnY16INEbEGZL5BJlS8g47bN4j1qOLbhNuLbuUxwF5UvWNwzLBuSvg9LAWZ-31l7oDvZmFtwkCEOmsbRNThm0-lBwDlkZsmA5xqRuBFtFs8xlzbBzk81_behe8bmuM2SrXRdUc6_QmakWlU2ZubHtk-LmY05UN2nNbtuU1FrD3l3iIRtBpSSX3DPG7qXekH8LvcKMEejK7GRfZaPHp3Z9vu2ExrGgXeF7WUjMrsaOuFdxcy0KBQU1MBc1ru-_Z6Ch6-UNzDg_Oc9TmfltYHTomiHrrk0neRxC4rT-k_zBv3BgII0I45_EwXzb98-QZWCelSPNShqpOq-55Tzux-1GtCyl56Eft83q86Ucrg-XifgS5tkjxy8ON0b8hm0gfwzrWBdQ8Y2DNRe74XOA4Bn7IVD9nISXhO8F9m7irVjt99A4Jm_0cDfJAjS_DZ_bwuK98GNz-BGjvOP4B5W509AnyFJzpAkEdyEpEPwEXgNA_KuJu7fQj6Lz1J8bjj_8xJvrjNAG3r5bUnhEl-_EKc7ZDV3bgvH38IqGaD1nei2aFwVQirIz9fPz8LQ9XoQaOrkCbkJwtpUg9OMlfSIOh4RpkrR3RfYIG9-MmBqzAlYe044x-sP8EawSW5bwLKqZSNyi9Ke7GVj1pkcngxPex2gha_sDa9vvhf8CPqHHNfP8uwmPw6Smcx3b_J_jiHsYyBhRDbvxnAPwm4_YBv79u-5TCm3m01_8l_Gv7185veHjvYId0L-uSNR35GQ-j69wpFPMm84HKnsAB-sLmDTXhwt0Gvc6uT79HaR73gAM_TTa-b8MsxfDy8ZwsuDa643l-G9Dur8PuMMDIObXnOfGRp-kvUDbGFv5tR8J-mcDmYZlwLwuKbKjB0ULM7w9DeROAnz2LV4EImpkGJXyUZjQSvQtb26kqQHqzuMdbciK_5IRc7hbXD3Sja1zYcX2OlvEnHkJjBkZ0az7yDyuRS6qQ73rn9qt78zeH6-8YbZYSUyBW0pgE_XT7_WfD_Re4Hrk-GJ48T8f6jSB8vt-6P6Q9F6YP6SnWBgh5BgeGJ4yw4i8cmt2CgmilccCgd8kuDsZrASBlStwPRMTEV-9wOyxrxqrJdE31jipJcoQ8_z_KStplS0C-_zws0on3h54iV0BBM3cmMvcUgUjspJ5JMoon4SuSR2_DiM3DxNYBNHaRCHziYasQlxiO-Eru_GXhQE4yCmWeiAn4DreTRIke9ARRkfW5_GUhWjttY7SYIgdkecpsB1W1cmpC2j2UZECAoWIzVpK7VpU2jkO5xpo49aDDMcJmsoutKUFKf1wucSBP7X6mlf4XupQZ_W9UaN4pN3F4tbfBqRZYd_OyF_BwAA__-JC9Yk">