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

    <tr>
        <th>Summary</th>
        <td>
            ASan failed to detect a global-buffer-overflow
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          jun-wei-zeng
      </td>
    </tr>
</table>

<pre>
    Compiler explorer: https://godbolt.org/z/E41e9qW8M

For the following code, all opt levels of clang's ASan failed to detect a global-buffer-overflow, while gcc can.

```c
$ cat example.c
int printf(const char *, ...);
int a = 101;
int b[3] = {0};
void func(int b[3])
{
    for (short i = 0; i < 3; i--)
        a = b[i];
}
int main()
{
 func(b);
    printf("a = %d\n", a);
}
$ clang-tk -fsanitize=undefined,address example.c && ./a.out
a = 0
$ gcc-tk -fsanitize=undefined,address example.c && ./a.out
=================================================================
==1==ERROR: AddressSanitizer: global-buffer-overflow on address 0x0000004043fc at pc 0x00000040124e bp 0x7ffffbbbdc50 sp 0x7ffffbbbdc48
READ of size 4 at 0x0000004043fc thread T0
    #0 0x40124d in func /app/example.c:7
 #1 0x401281 in main /app/example.c:11
    #2 0x7fce52fa6082 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24082)
    #3 0x4010dd in _start (/app/output.s+0x4010dd)


0x0000004043fc is located 36 bytes to the left of global variable 'b' defined in '/app/example.c:3:5' (0x404420) of size 12
SUMMARY: AddressSanitizer: global-buffer-overflow /app/example.c:7 in func
Shadow bytes around the buggy address:
  0x000080078820: 00 02 f9 f9 f9 f9 f9 f9 00 00 00 00 f9 f9 f9 f9
  0x000080078830: 00 00 00 00 00 f9 f9 f9 f9 f9 f9 f9 00 00 00 00
  0x000080078840: f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9
 0x000080078850: f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9
 0x000080078860: f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9
=>0x000080078870: f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9[f9]
 0x000080078880: 00 00 00 00 00 04 f9 f9 f9 f9 f9 f9 00 00 00 00
 0x000080078890: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 0x0000800788a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 0x0000800788b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 0x0000800788c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
 Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope: f8
  Global redzone:          f9
  Global init order:       f6
 Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal: fe
  Left alloca redzone:     ca
  Right alloca redzone: cb
==1==ABORTING
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUl91u27gSx5-GvhnYoKjvC1_YcdxT4PS0SHqw2KuAoiiZLU1qSSpx8vQL6sOWXS12W-RmBUJxqP_8OJzRUCS1VtSK8zWKtyjeLWjrDtqsv7Vq-cLF8o2relHo8nV9p4-NkNwAPzVSG25QuIGDc41F4QaRPSL7WpeFlm6lTY3I_g2R_X0U8PyP37JPCO8Q3vT3vTbgDhwqLaV-EaoGpkuOyB1QKUE3DiR_5tKCroBJqmpEUgubR6qgokLyEpyGkjvOHFCopS6oXBZtVXGz1M_cVFK_eNrLQUgONWPAqFpNPUAJ7hsb_icRMOqAn-ixkXw1dAvloDFCuQqRjGllHbADNYDIxvNXqxUiOQq3FzUFFO4gwMFVb4HibYjiXfcQpVuM0t1Z8KxFCVWrGCLZVOzRvXPpoAQAqLQfPrMHbRyIDohRuO1-3kHY_Vwuz7YwXL1fHi08ehzb-3H28kiFQiSbGXfwrpjO1lPPsUGE9CMgEpcovlOIkC6fU4vzYF20fV6X7jssK0uVcOKNo3DXqpJXQvESkTtaloZbe8kJIJIgksAKkT1d6db1NDoE4YyuGXsXMAp3__o2mUjQ_7l_ePj84Et304fhcQhSV87ztQRawRg0fMLdFeEorBhQBw2bdAYk4lA0gE9pVVVVURQlizHY654o6x17uN_sfJFb8cYh8rAbvDsYTkv4ii_vHCIhBnzqhipBqO7lBJ-5pkFkf6ngcJMOVoiEwWCSBd7Ev-nzJkFwNRLp3GY8JhVNcEa88dOTFAV7so4a9zSQMkT2UhSI7E9Z8pRESylUe1rWqu0fsJXVqwSRLT6RCGfkqj4RCcPePVx2M-rZA7b3Ubeuad3KdoheeanTyf0mfsKC1Iw6XkKYQPHquPVrp198Ja-cj32fcnimRtBCckAkLRBJYagX6OaXzgYrROEm9lpEMu9VFBGMSH7OaEB6px7__-nT5uH3n3zp5lM6ZnwgH2ipX4aJUaNbVXaTK9q6fh3fWf95GoLdhyfDOM0ygv3gGAMmUOW3zfePbdI_BwrPoHmbWegcKOpAs5Z_3QbQlBO_Eyf5dU631txPYelPw1C89bfdjGfZXMhx9I9CPuXks5y_aTMc-k6c4p047Nc5k5ICyWuuSl_eWnGwkyeGN4ZbrpyFDGjTSMGoE1r1pdh99ceiG0reLy7eqct1KYIv1DhBpTyX7CjGga9OHPrc4hhwAjiF0eo_nDb9MmZ4-abVBF_RUbQ3nJdw8FLDa6HVRFSOokdH2fd5VBVci46inBmOXIuMqA8_oKrwWkQrxw0Y7lpzcaqKr0Wt5YPQMt10rCobJR_6pfsHdzwnvxEJJRxoU_ZL7iBKBtEXLaz2i33x6kecSKAaP6Jwp5WjQnED5z322Ws2ijbG0FdgWn8XN9kGehZ9VM5Q0MU3v4G_9r4oziS_3RfKcaOo7ObNx0f_9Ymi0n_ZbifPzol_6HLwo4oVM5uizfbzw9eP__twczpYlOuwzMOcLvg6SHJCkoiE-eKwTgOaJEUS5AEpKWZJzlmVFUUcpSVLyjxeiDXBJMRZkOKchHG-4qxgOK94FtAkq-IURZgfqZArKZ-P_sC0ENa2fJ1EaRItJC24tN2RjBDFX6B76DfV8W5h1t5mWbS1RRGWwjp7oTjhJF__3Flp0Rq5vjnJCXdoixXTR7-Bkc_jn2VjtE8bIvvOJYvIvnP5zwAAAP__ObTehQ">