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

    <tr>
        <th>Summary</th>
        <td>
            Incorrect initialization of global arrays that are 2^32 bytes or larger
        </td>
    </tr>

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

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

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

<pre>
    C programs with partially initialized arrays that are larger than 2^32 bytes aren't compiled correctly:
* `char` arrays get initialized entirely to zero, even if they have a non-zero initializer in the original source code
* when initializing arrays of other types, LLVM emits a `.space` or `.zero` directive with a negative byte count, which is rejected by the assembler.

```C
char bad_char[4294967296] = {1};
char ok_char[4294967295u] = {1};

int bad_int[1073741824] = {1};
int ok_int[1073741823] = {1};
```

Compiling this with `clang -S -arch x86_64 bad_static_arrays.c` produces:

```asm
        .section        __TEXT,__text,regular,pure_instructions
        .build_version macos, 10, 15    sdk_version 10, 15
        .globl  _bad_char               ## @bad_char
.zerofill __DATA,__common,_bad_char,4294967296,4
        .section        __DATA,__data
        .globl  _ok_char                ## @ok_char
        .p2align        4
_ok_char:
        .byte   1                       ## 0x1
        .space  4294967294

        .globl  _bad_int                ## @bad_int
        .p2align        4
_bad_int:
        .long   1                       ## 0x1
        .space  4294967292
        .space  -4294967296

        .globl  _ok_int                 ## @ok_int
        .p2align        4
_ok_int:
        .long   1                       ## 0x1
        .space  4294967288


.subsections_via_symbols

```

That's from compiling with Clang 11.0, but it looks like the issue exists in the most recent version too: https://godbolt.org/z/eobvhbf7s
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytVUuPozgQ_jXkYiUC8woHDun0jLTS7Glao7khGyrgbYMj26Q7_eun7ISEZDqzh92IgMt2VX315qo5lluy16rVrDfkTdiO7Jm2gkl5JGIQbiU-oCFMa3Y0xHbM4hqIZLoF7eiB0CD9ElPCjxaMOxwCmltSq34vJLLWSmuorTwG8SYIn4NwE9ANCbKw7pjGzyS7BXujEgYrNCAOq8gHaBXQLYEDDETsUC8cSccOQBgZ1LB05zNmjWt3hygtWjEwSYwadQ2IpYErhrfOSZu4xNBOUNSOKGRH-457ME7xt28__ibQC4sWOuwrs2c1OPRKe9ojRLIRzliByLw3ER60zNPOPwhgHKwT-NaJuiPCEA3_IAPay48eMjMGei5Br85AT-8sPD3bE-18RzhrKu_E9CmhRVJkOS2yIH0mQYz__CkK8ucgfppxqNffGNLxEcfpLQbrFeEX2aIwj_MkWtPkEZe7j2rurscPlUyGzXVufe64gNhOnPPSJYxkuLX8TpZMo_Pe11mVJR6csejjujqFb1W7QGBWN2ON0btk3a0-Zvppv1gZFzM14LKqXr78fMEIVZWFdxcqDe2I6Y6r_agBDTNWj_66uQrgo5BNdQBtcJ_0rFY-baLQv1O8YprXy_l1e-JvpeLSqZ9iSm5_AXqQxiRIwkvQPa_Pu52QklTV8-Zl44Fj6fVoDC4vl-l2liFIfG76RULDLPsE3Dl9yENwU35dWPcUS6t10s8qJxmzsKD3sDTwG90LvpUfvkcz2L7-UOxkVnIT5XuXuqz8o0tdvv4B9XRljlqqof2vqOnvZ8tZpB6ZdCqwRypPgfgXi843_meD1utbzD5HzcjPWWaqg2CVOfZcSfNpWc43X3Da4CwxZKdVfx4orin4frD1zSCKVr6W-IjDwxKp1KshUryC76XCmBEIvAuDffs8EnplLDbdGscLmerRKoWOIJ21e98v6Fd8WtUgSrtSukXqA_-g-KHju9wsoIyyLIrXOQ3TRVPGTREXbGGFlVD-NZwn3nW0MGe7myougDiN7qfpzQTFgXKarotRy_IOE1o-8hW6AgkpD9Nnid3OjREkvc3YfL6meZzGi66M4wSSJinicL3Oap7ypKZ1jHiLHauzIl9IxkGaEtt1QOkAbye34Rp79kKUNKQ0XNM0DGmWpKu04KwusiiJeRrTosBkg54JuXI4nLMWuvSQ-NgaPJTO-ddDHG-YhwBeHcpno-2ULgdp2NDg1Ft45aUH_wsSRYRD">