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

    <tr>
        <th>Summary</th>
        <td>
            signed integer overflow in unbounded-array-bounds.c test
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang:codegen
      </td>
    </tr>

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

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

<pre>
    Test case adapted from `test/Sema/unbounded-array-bounds.c`:
```c
struct S {
  long long b;
};

struct S s[];

void f1(void) {
 ++s[7073650413200313099].b;
}
```

Godbolt: https://godbolt.org/z/WGG3bbxvs

Works just fine[tm] even in an assertions build, but when sanitizers are enabled:

```
./array.cpp:1813:5: warning: array index 7073650413200313099 refers past the last possible element for an array in 64-bit address space containing 64-bit (8-byte) elements (max possible 2305843009213693952 elements) [-Warray-bounds]
 1813 | ++s[7073650413200313099].b;
      |     ^ ~~~~~~~~~~~~~~~~~~~
./array.cpp:1810:1: note: array 's' declared here
 1810 | struct S s[];
      | ^
Process 2655318 stopped
* thread #1, name = 'clang++', stop reason = Signed integer overflow
    frame #0: 0x00000000003dd0f0 clang++`__ubsan_on_report
clang++`__ubsan_on_report:
->  0x3dd0f0 <+0>: endbr64
    0x3dd0f4 <+4>: retq
    0x3dd0f5:      nopw %cs:(%rax,%rax)
clang++`__ubsan_get_current_report_data:
    0x3dd100 <+0>: endbr64
(lldb) bt
* thread #1, name = 'clang++', stop reason = Signed integer overflow
  frame #0: 0x00000000003dd0f0 clang++`__ubsan_on_report
  frame #1: 0x00000000003d7b3c clang++`__ubsan::Diag::~Diag() + 220
  frame #2: 0x00000000003d9ab0 clang++`void handleIntegerOverflowImpl<__ubsan::Value>(__ubsan::OverflowData*, unsigned long, char const*, __ubsan::Value, __ubsan::ReportOptions) + 496
  frame #3: 0x00000000003d9ccc clang++`__ubsan_handle_mul_overflow_abort + 60
 #4: CharUnits.h:149  clang::CharUnits::operator*(this=0x00007fff71a9f840, N=7073650413200313099) const
    #5: CharUnits.h:227 operator*(Scale=7073650413200313099, CU=0x00007fff71a9f840)
    #6: CGExpr.cpp:3935  getArrayElementAlign(arrayAlign=(Quantity = 8), idx=0x0000504000019c10, eltSize=(Quantity = 8))
    #7: CGExpr.cpp:4039 emitArraySubscriptGEP(CGF=0x00007fff720a8040, addr=Address @ 0x00007fff71b75720, indices=ArrayRef<llvm::Value *> @ 0x00007fff71b75760, eltType=QualType @ 0x00007fffffff6420, inbounds=true, signedIndices=true, loc=(ID = 39051), arrayType=0x00007fff71ffcbf0, Base=0x000052100008fd78, name=0x00007fff71ffccf0)
    #8: CGExpr.cpp:4291 clang::CodeGen::CodeGenFunction::EmitArraySubscriptExpr(this=0x00007fff720a8040, E=0x000052100008fd98, Accessed=false)
    #9: CGExpr.cpp:1636 clang::CodeGen::CodeGenFunction::EmitLValueHelper(this=0x00007fff720a8040, E=0x000052100008fd98, IsKnownNonNull=NotKnownNonNull)
    #10: CGExpr.cpp:1513 clang::CodeGen::CodeGenFunction::EmitLValue(this=0x00007fff720a8040, E=0x000052100008fd98, IsKnownNonNull=NotKnownNonNull)
    #11: CGExpr.cpp:1480 clang::CodeGen::CodeGenFunction::EmitCheckedLValue(this=0x00007fff720a8040, E=0x000052100008fd98, TCK=TCK_MemberAccess)
    #12: CGExpr.cpp:4615 clang::CodeGen::CodeGenFunction::EmitMemberExpr(this=0x00007fff720a8040, E=0x000052100008fdc0)
    #13: CGExpr.cpp:1646 clang::CodeGen::CodeGenFunction::EmitLValueHelper(this=0x00007fff720a8040, E=0x000052100008fdc0, IsKnownNonNull=NotKnownNonNull)
    #14: CGExpr.cpp:1513 clang::CodeGen::CodeGenFunction::EmitLValue(this=0x00007fff720a8040, E=0x000052100008fdc0, IsKnownNonNull=NotKnownNonNull)
    #15: CGExprScalar.cpp:243  (anonymous namespace)::ScalarExprEmitter::EmitLValue(this=0x00007fff71a98920, E=0x000052100008fdc0)
    #16: CGExprScalar.cpp:606  (anonymous namespace)::ScalarExprEmitter::VisitUnaryPreInc(this=0x00007fff71a98920, E=0x000052100008fdf8)
    #17: StmtVisitor.h:90 clang::StmtVisitorBase<std::add_pointer, (anonymous namespace)::ScalarExprEmitter, llvm::Value*>::Visit(this=0x00007fff71a98920, S=0x000052100008fdf8)
    #18: CGExprScalar.cpp:411  (anonymous namespace)::ScalarExprEmitter::Visit(this=0x00007fff71a98920, E=0x000052100008fdf8)
    #19: CGExprScalar.cpp:5257 clang::CodeGen::CodeGenFunction::EmitScalarExpr(this=0x00007fff720a8040, E=0x000052100008fdf8, IgnoreResultAssign=true)
    #20: CGExpr.cpp:216 clang::CodeGen::CodeGenFunction::EmitAnyExpr(this=0x00007fff720a8040, E=0x000052100008fdf8, aggSlot=AggValueSlot @ 0x00007fff71c03220, ignoreResult=true)
    #21: CGExpr.cpp:191 clang::CodeGen::CodeGenFunction::EmitIgnoredExpr(this=0x00007fff720a8040, E=0x000052100008fdf8)
    #22: CGStmt.cpp:128 clang::CodeGen::CodeGenFunction::EmitStmt(this=0x00007fff720a8040, S=0x000052100008fdf8, Attrs=ArrayRef<const clang::Attr *> @ 0x00007fffffff9280)
    #23: CGStmt.cpp:549 clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(this=0x00007fff720a8040, S=0x000052100008fe18, GetLast=false, AggSlot=AggValueSlot @ 0x00007fff71c02e20)
    #24: CodeGenFunction.cpp:1265 clang::CodeGen::CodeGenFunction::EmitFunctionBody(this=0x00007fff720a8040, Body=0x000052100008fe18)
    #25: CodeGenFunction.cpp:1487 clang::CodeGen::CodeGenFunction::GenerateCode(this=0x00007fff720a8040, GD=GlobalDecl @ 0x00007fff71e5f820, Fn=0x000050d000000388, FnInfo=0x0000507000003ba0)
[...]
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEWUtz27YW_jXwBmMNCPC50EIWLV1PetM0SpqlBiQOJbYUwAuAiZ1Ff_sdgHpTSmKl03I8JojHOd93HjggxY2pVxJgjKIHFOV3vLNrpce24CBA67tCiZfxBzAWl9wA5oK3FgSutNpgFBMLxiI6W8CGIzrrZKE6KUDcc635y71_MqMSxQSxCSI5IhPX9n9l_2ys7kqLFxglD30Pxo2Sq_5fgdi2FyX5oX260vTYz4Y_q1rgKkA0dS1EsyMNiD4g-uDWJSRhcUTCgFFCWMBIlqEoH53qPQV-rGSuRKEai9gEr61tjaNJZ4jOVv3ASOkVorOviM4-zeesKJ4_m-P1n5T-0-A_OmNxVUtA0YPdoCjH8BkkriXmEnNjQNtaSYOLrm4EolNcdBZ_WYPEhsva1l9BG8w1YJC8aEAcjH0J-QjRmffPqGxbxCZBGjDEJpEj8YVrWcuVa_opuJYCnvEFK2ENlVPbcmOxXQNuXKNVxtRFAxga2IC0uFLak9gKw3F4X9QWcyE0GINNy0vApZKW107xbhzRNL0vXiw4v21lGde74c8HJZSRKA0ZIRkNWJyxLKL7yd7h0cP9p-NQdFHSR4AjjVEyfU0oYH-5Rf4ePeK_htdVG7sUCJxhpbJwMDCiiUE0wQLKhmsQeA0aDiCJ13c11A-QUPTYd73TqnSmpXEUsSDFxqq2BbENBTrBdq2BC4woC1wsSb4BjFjukJQNl6veIogmbtStxhq4UdJPWrjdQuBaWliBxuoz6KpRXw5oKu3lUeb4YvJM9hcTglQEH-uIyXLZFYbLpZJLDa3Stpf0vUm7AL9H7BFj8ryVjdgU0QeC2KNTDlIUOg4P2Lbzwu28cDtPg_3fYJJPB39J1X7BiEZln90popHmz4hOd43sW5hXYJdlpzVIuwW_FNzyPYO9yoB8Ez-iadOIwoV1Yf8ZZ_49rjySEwzlJAUrL8txFmKTvOarvvWXbzrzZy5pMaVkoIAOFWS8OAfqK8OaS9HAU0_91y3zp03bIDY9QfA7bzpwHqHpSf9uTe68SSfOvp00vUVd7XId5Zprt7u5IulnXJB83vve2-7X1m_5O7JhFg_Isgtky_KKNZc93-Wma5Y7Py95obT18ne1wckNndzpmuuPsrZmtHb7VpjhrVyPcT_aP6oWNLdKe5KpXdcGsbxHllRVlQQ8q9KQOKpvEcsvbbQ029ppnxSIsmiIhNIEn6pblLyBa1KnePrxCpbsRFXsVc0fn1u93bJZxiKMV2Anbp9-7MvKpKlXEtHU7939A8sRTX_ruLS1ffFp5ULUqa7F8153REJ3C7Iy8HaAxi7qr3B19Sm6ZIAuJCzDsKl7dIuuMKWuWzt_fIdoOp3PTklTwlPSO8BVXsTyybYAo5DgY-sUSZRQP7GWoi7BedKreA8VYtOm-bw5Cl7sXMAeL0qJdzw_vLSO528db1zzbLK74nCnclumWW51nxp9Qj3tsez6G1X2tnvKvdVYRqJga3fvnK3WY1RVVRaVV_TAzWEwooG7pZVI0t0eOlxZVoOYSYdeoVlwkidKwBzkycOsk6XL7b7zceBCJ-5iFh058fEC-MyDn5Su-LsjYF7xxsA55myAOYhZ_HrMv3j__weaFn4C7ZN5I9UX-VbJt13TIJa_Vfak5wy9P0SdwY8Cdiv8fxB4MAQepuT1wKdrKP8E8bP4P0zfIJZ_mL5Z_hc2Beg-bAao6TDC4yB6Pepeya2RXQ4yz7-wnIdx-C-EcUluiobwXw_jG4FHB-Cu7vIdfBoyNyHlUsmXjeqM30X9252T4QH3C9xSB92C_iEeAc_SjL4mNuIrGGMS34rx99rU9qPk-uWdhidZ3oK0SgdIfVlf2I318pX2J5zsZFc4Gu2L1tRY0Q9xIZatcod37XS-mpmroqflvK_mR5S_x3PxYzzTKx4Jg-CnPPI3uSG7Ai-iUfL6nDwAviUvq768rKTS8B5M19iJ_0K3P_qcYqfDgkiDG_bBiXz5OcR8tVo0yrrT4mrlg8k9Dg6GJWF0e9Y7oniN3IWiecv5qrem-BmCZ8C2ddEl5w4YTW8IFbu5HMNHiK6l2BRPrNVnx3P_CnWMw825fEh3V0bTwfZJ2YBbFGY3HFTUpnWHeSfnU23XqrOLUrXfLVYX-ELg-c7B_sKNPZxsp3jyo1FHgQ6Z9lX4lMDenfENx5xdz4MSL9_j6edcpnoGM_oGzDB95Q41B-lensENfg_iPEcsnzeq4E0OZTMwK0RV2ifzTB696Irt14g07YeeZKWOhpN-tOAHh6DoYTQa7T_Onn2vvhNjJjKW8TsYBwnJEpJlEbtbjyNaBjROqzgKCojCqmRRFlHGSi4yoIm4q8eU0JAwEpOERhEbZUXJqqwkQRxTBiFDIYENr5uRK4QjpVd3tTEdjNMwoNldwwtojP9lhNKdlUslYAUSUYqi_E6P3cr7olsZFJKmNtYcZNnaNjA2lz-y4Vria7-XYAvG3nW6GZ_9qFDbdVeMSrVBdOZrd3-7b7X6A0qL6MzjN4jOPIX_BwAA__8yyG6p">