<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Clang breaks badly on too large object sizes"
   href="https://bugs.llvm.org/show_bug.cgi?id=52036">52036</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Clang breaks badly on too large object sizes
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>C
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>gabravier@gmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>blitzrakete@gmail.com, dgregor@apple.com, erik.pilkington@gmail.com, llvm-bugs@lists.llvm.org, richard-llvm@metafoo.co.uk
          </td>
        </tr></table>
      <p>
        <div>
        <pre>struct s {
    char arr[922337203685477587];
    char arr2[922337203685477587];
    char arr3[922337203685477587];
    char arr4[922337203685477587];
    char arr5[922337203685477587];
    char arr6[922337203685477587];
    char arr7[922337203685477587];
    char arr8[922337203685477587];
    char arr9[922337203685477587];
    char arr10[922337203685477587];
    char arr11[922337203685477587];
    char arr12[922337203685477587];
};

s x;

void f()
{
    volatile s x = {};
}

The size of `s` is simply not representable in `size_t`, which seems to break
Clang in multiple ways:
- It gives me a warning telling me that "stack frame size exceeds limit" when
the warning tells me of a stack frame size that's smaller than the limit (it
tells me the stack frame size is 1717986984 and that the limit is 4294967295)
- The emitted assembly tries to call memset with a size of 461168601842738840,
which is smaller than even a single one of the arrays in `s`.

Probably Clang should just error on the declaration of `s`, as GCC does:

<source>:1:8: error: size of type 's' is too large ('11068046444225731044'
bytes)
    1 | struct s {
      |        ^</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>