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

    <tr>
        <th>Summary</th>
        <td>
            MemorySanitizer detects use-of-uninitialized-value in a simple OpenMP program
        </td>
    </tr>

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

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

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

<pre>
    Here is a minimal OpenMP program:

```c++
#include <omp.h>
#include <stdio.h>

int main() {
#pragma omp parallel for
    for (int i = 0; i < 10; i++) {
        // do nothing
    }
    printf("done\n");
}
```

But MemorySanitizer detects use-of-uninitialized-value error:

```bash
❯ clang++-13 main.cpp -fopenmp -fsanitize=memory && ./a.out
Uninitialized bytes in __interceptor_strlen at offset 2259 inside [0x71d000000040, 2260)
==3120751==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x7faa9ed131f5  (/lib/x86_64-linux-gnu/libomp.so.5+0x4a1f5)
    #1 0x7faa9ed00fd6  (/lib/x86_64-linux-gnu/libomp.so.5+0x37fd6)
    #2 0x7faa9ed00f44  (/lib/x86_64-linux-gnu/libomp.so.5+0x37f44)
    #3 0x7faa9ecf489c in __kmpc_fork_call (/lib/x86_64-linux-gnu/libomp.so.5+0x2b89c)
    #4 0x4a0f05 in main (/home/qliu/workspace/test-openmp-msan/a.out+0x4a0f05)
    #5 0x7faa9eaaad8f in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16
    #6 0x7faa9eaaae3f in __libc_start_main csu/../csu/libc-start.c:392:3
    #7 0x420244 in _start (/home/qliu/workspace/test-openmp-msan/a.out+0x420244)

SUMMARY: MemorySanitizer: use-of-uninitialized-value (/lib/x86_64-linux-gnu/libomp.so.5+0x4a1f5)
Exiting
```

Without MemorySantinizer, it's ok:

```bash
❯ clang++-13 main.cpp -fopenmp && ./a.out
done
```

Another example is simply getting number of threads using OpenMP:

```c++
#include <omp.h>
#include <stdio.h>

int main() {
    int number_of_threads = omp_get_max_threads();
    printf("number_of_threads: %d\n", number_of_threads);

    return 0;
}
```

This program crashes too with MemorySantinizer:

```bash
❯ clang++-13 main.cpp -fopenmp -fsanitize=memory && ./a.out
Uninitialized bytes in __interceptor_strlen at offset 2259 inside [0x71d000000040, 2260)
==3125901==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x7f8d2b0fa1f5  (/lib/x86_64-linux-gnu/libomp.so.5+0x4a1f5)
    #1 0x7f8d2b0e7fd6  (/lib/x86_64-linux-gnu/libomp.so.5+0x37fd6)
    #2 0x7f8d2b0f5be8  (/lib/x86_64-linux-gnu/libomp.so.5+0x45be8)
    #3 0x7f8d2b0f5bb9  (/lib/x86_64-linux-gnu/libomp.so.5+0x45bb9)
    #4 0x7f8d2b16e9a4 in omp_get_max_threads (/lib/x86_64-linux-gnu/libomp.so.5+0xbe9a4)
    #5 0x4a0ee3 in main (/home/qliu/workspace/test-openmp-msan/a.out+0x4a0ee3)
    #6 0x7f8d2ae91d8f in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16
    #7 0x7f8d2ae91e3f in __libc_start_main csu/../csu/libc-start.c:392:3
    #8 0x420224 in _start (/home/qliu/workspace/test-openmp-msan/a.out+0x420224)

SUMMARY: MemorySanitizer: use-of-uninitialized-value (/lib/x86_64-linux-gnu/libomp.so.5+0x4a1f5)
Exiting
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkV99v2zYQ_mvol4MNitTPBz84cb3tId3Qrij2ZFDSyeJCkSpJtU7_-oFS7DiOCyytsQ2YISgSj_ruu-PxvlA4J3cacUmSG5KsZ2LwrbFL9alVs9LUD8uf0SJIBwI6qWUnFPzao777DXprdlZ0hK8IXRN6uKd0uirCbsI1jTIudaWGGoHwW9P1i5bwN5dsztfSnFrHu9QeOiE1YTlhBZDsCbe3YtcJMF0PvbBCKVTQGDvZASC8AGF5gJBA-Boo4Tfj4y1E0_Mj1VNkePwRtiFsA7UBbXwr9e7JTLL100tvpfbNyI_VRiNJbjVhjLCC8APZw_xjjk5DvBk83GFn7MN7oaWXX9FCjR4r72BwODfNfNAyWISSX7GefxZqQEBrjf3WGpTCtY9Dbxgp1mS1gUoJvZsCnkd8zOqi6nuYN6ZH3YUH90iA8HU3MgLCUsJSWBC2EQsz-An0wykfKB88OpAatlupPdoKe2_s1nmrUIPwYJrGoQfGkgKkdjIseHJD91lU0-kXU8JugbGUhrxNxPma8DWPGM2SaHr5uHr39pe3PxG-Ok9YGPp2rk5WjnEKdJ81QhRYRzxqkjCYE7ZRsiRss8_TbRrPldTDfr7Tw2QIdevMIiHshu5jETXJkeYjavSESmlTp69G5VlTp-eo7BlqHH8Pahyfo_IjatXEeVFNS3ff9dW2MfZ-WwmlXuuIlXlRnTuKIWSLNjQJLkLBPcK2pkPCNp-UDFhfjL13vajCkEfn51M9zjsn9LHupswHrHMvyTEcIUSdN1M4SpbV1nlh_RjPdvReueBvEarZPbgae0fYRvdeTRG9-CC0o1WSE76K0mc-01OfyF_6PHc3PYYJ83HCoiJ8xQsW7s-Qs5AzRlkcj5jj5B_M2oj2tK_G-_sPd3erd3-8eiv92GZ5s5f-2EkvNsOP0rfmtCF6qUdW7BakJyxzYO6v2vUud7ixk3-b5ipoAlrAveh6Ncqkk12vHmCHPoQIeuhKtGAa8K1FUYdeHsYnDf1XtTNUWrBNFLem2R4oBpE0Xb_dYajg_WF8AjjK2bnqvcAJJURYUh-l8Palr2f6eIS16AerR6H-O9L5eyvd4d8RqKxwLTrwxsAX6duXNfQ_EMukoNcXy7xmJW3ElcVyRMXsymI5cU1KzF_PNXx1WSwPqGXxPahlcUkZJ9QoxUKMvf7CxnutrzJgXdLHWFBEfjUVRuTnXtJDRAKL6B9S4ezU51VVOH9UYXZVFWb_ZRWe1UteF7wQM1xGaZbwIqcJn7VLzHkRY4MVr1kUY5ZWdZ43cZZhRJuKZTO5ZJRxyiinMaMJX9R12ZQi5qlIRZNXjMQUOyHVQqnP3cLY3Uw6N-AypQmNZkqUqNx4DGVM4xcYjUE3kvXMLsM383LYORJTJZ13TyheeoXL7zg7SQ1iEmw8O9TOBquWrfd9ELHpCLiTvh3KRWW6kFn1-fBn3lvzJ1aesM3IOFTxGNFfAQAA__8l9onR">