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

    <tr>
        <th>Summary</th>
        <td>
            libfuzzer corpus minimization seems to ignore __libfuzzer_extra_counters (on Windows at least).
        </td>
    </tr>

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

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

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

<pre>
    Hello. Is the following unexpected or am I missing something?

```
> clang -v
clang version 15.0.5
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Programs\LLVM\bin
```

src.cpp:
```
#  pragma section(".data$__libfuzzer_extra_counters")
__declspec(allocate(".data$__libfuzzer_extra_counters"))
static uint8_t Counters[256];

#include <iostream>
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data) {
    Counters[Data[0]] = 1;
    std::cout << static_cast<int>(Data[0]) << std::endl;
    return 0;
}
```

Compile and run:
```
clang++ -o test.exe src.cpp -std=c++2b -O1 -g -fsanitize=fuzzer,address
mkdir CORPUS_DIR
test.exe -max_total_time=10 CORPUS_DIR
# This prints some values in [0, 255], all of them if run long enough.

mkdir NEW_CORPUS_DIR 
test.exe -merge=1 NEW_CORPUS_DIR CORPUS_DIR
# This leaves in NEW_CORPUS_DIR too few testcases to cover all Counters[256].
```
If I change the declaration of Counters to `static uint8_t Counters[256];` and instead call `__sanitizer_cov_8bit_counters_init(reinterpret_cast<char*>(Counters), reinterpret_cast<char*>(Counters+256));`, the minimized corpus does keep 256 testcases as I expect.

Also, neither of those 2 ways to have extra counters are documented in https://llvm.org/docs/LibFuzzer.html, is that intentional ?

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVV2v2jgQ_TXmZUQUHJILDzxAKFqk7rbqdrePkWMPibeOHdkToPfXr5wAvbcfq66EghKPz5w58yVC0I1F3LB8x_L9TAzUOr_xOgyXy3lWO_Vl8xsa4xI4BqAW4eSMcRdtGxgsXnuUhAqcB9HBETodQjwKrkNqtW1YdmDpnqXb27NIb7_pNXsD0gjbwPw8fZnezuiDdhYWeZIm-XTyUfgGiWVbuK6KqljOezm_aKvcJcy7cJY3q9ajUNA5hSba9i7o63R0tIGEMaj22sejkmVblpfvvWu86ALLy7dv__6d5WWt7Y_Zjs_gZSL7Pl7-oRHPAHovmk5AQEnaWcZXjPNECRKML6vK6Po0PD-jr_BKXlTSDZbQB8Y54-sJpqoUShN6lIyvhDFOCsL_CXTHCiRISxi0pVVFUN6t8h3PC5bvWbZ7lSOeaSvNoBBYVmoXyKPoWPZmOsYrobfAOC8Z56AtQdTtMBL5iIHeWTzafiDGV9LZQA_HjG_3I_U1sKebSwB4SWg8z3dpZJXvgWV7WDzoRdtAKiqfbaUbKPJjWQlTgJUUgSJjS5EsX70Eiz7vxjcEtMq8wvZIg7eQftXjaf8fhVC6rtcGQVgFfrA_K4ixohnfMb6DuQPCQAleEW51BPOR0F5OJryG-bsFzBuYn4KwmvQzsmw_pZnxUijlMYQJuvustIfy3Yf3f_1Z7Y8fpq8PD_NOXCtyJExFuoswi_Q761ivH1sdoPfaUhg7F87CDBhAWxj14yXwPB9lLEEYA-4UR0EH-hQjB-NsA2jd0LTJS4Umfn-8-VR99QrfkUTfjNy-NfwpU4PiPLH75gY5Bye8jBpLETAAOZDujH5k_V3hJz9M2PEER5CtsA2OAy82ovAidnIM_I4SsVmR_kpzFelYJNoGisNJRjKsSKvqnmFfSXeuVrWmRw9X2urYQh51fO890r3AZSs849upyB8OY8OX8OvmI79pSowU4-0Ybqet7vQzKpDO90MA5TDAZ8QeeF680FYEOMK0AV5lfWuCi2AWNbXop2JxAYHDRXwZdWvFGWGcWXCPF4RHUE4OHdq4UbSFlqgPsa34gfGDMecucb5h_KCcDIwf3up6mjpJS52JLnVcUYLiUEIbEyYMPDbQTG0ytc7WYoabRfFUrPPF05rP2k1RK4VPeSbEqljnqITIi-KULk5PmC3T5WKmNzzlWcr5Is3yIuNJqup0tcgXGZfZ6SRqtkyxE9okd5IzHcKAmyJdrZczI2o0YdywnFu8wHgYh3S-n_lNvDOvhyawZWp0oPAVhTQZ3DzG_D0jtxRNJRkQu1FU3VjnEX6-FoDxlbPwaVqaICh2UiDG18ls8GbzWu9GUzvUiXTdTfzb37z37h-UxPhhjCNmYozz3wAAAP__DOqUyw">