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

    <tr>
        <th>Summary</th>
        <td>
            Absurdly big structs get wrong sizeof
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

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

<pre>
    ```c++
struct a {
    char x[1ull<<60];
    char x2[1ull<<60];
};
a z[1];
long long x() { return sizeof(a); }
long long x2() { return sizeof(a::x); }
long long x3() { return sizeof(a::x2); }
long long x4() { return sizeof(z); }
```
```asm
x(): # @x()
        movabs  rax, 1152921504606846976
        ret
x2(): # @x2()
        movabs  rax, 1152921504606846976
        ret
x3():                                 # @x3()
        movabs  rax, 1152921504606846976
        ret
x4(): # @x4()
        movabs  rax, 1152921504606846976
        ret
z:
        .zero 1
```
https://godbolt.org/z/5GMber5GM

Certainly sizeof a struct isn't allowed to be less than the sum of its members (unless some members are empty structs with [[no_unique_address]])?

And certainly z should be assigned a .zero equal to its sizeof?

(Correct behavior would be erroring out if a struct goes anywhere near 2\*\*60 bytes. Such structs have zero usecases other than breaking things.)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVMty47gO_Rp4g2oXBephLbSwnXKvenU_oIuUEIl3KDHNRxz766dkK85ryjOLsFiUBOIAh0cgVAimn5gbKHZQPKxUioPzzda2yruVdt2pgVJcZwu0m6d4ALEN0ac2okKoFgsiYjsojy9Q7LJkLcg9yH0poHgA-cWJ7nhB9fau8Dx7vt-2burxsrwAbYDqmQR6jslPGMyZ3SPQRgHVIHc4B_sMo7s4uQW5fbkDl_8BTnfw-R38-TPupv-nTxXGq2URAeQWgSRCLl4tN8nnMbpnpQOiVy9Ae8yygmrKCpGXotzkZV2VH_09xyU-fU1A35tBvmX4t_HKQH4vg_zrGfNvzXCe6-LD1vrM3mH2j395iPEpzAg6AB1612ln49r5HuhwBjoUP39p9sXPXwv6su7ZR2Ume1qqCRUu19SECaiKqKx1R-4wOtSMlkPAOKgJ48AY0ojuEU0MOPKo2QcE2qTp4hXcyDez8ow8PsXTEj7g0cQBLy1kN7nfaTJ_Ev9WXec5hPnmFg8XbQ_v2W6nDtsb4zOGwSXbzbyWptShWjTiP0nZmfRMbrkpH4MBbfbOe24jah7Us3Eej6_x2HvnzdSjSxHNO1l6xwHVdDoO7BknVh4Jij3Q9rqWAvUpcljj_1I73E47qGfGC7EUuFWBA7o4sL9qqT2rv-ZscTBTH9ZA9aprZFfLWq24ycoqL4WoaloNzaOQpZKlrLu8Ktu8qMpSV49acyUyoVmuTEOCpMgoJypkRutCt0IXsm7LTatyxZALHpWxa2ufx7lAViaExE0pqKKVVZpteG3uvpmdfujUB8iFNSGGN1g00XKz1SH5zp5Qm_523p4jHv3cua7ar5K3zacKNXFIet26Eegwx1weP568-z-3Eehw4RWADhdqfwcAAP__ZP3SXg">