Consider the following example:
#include
int main () {
int i = 0;
#pragma omp parallel
{
#pragma omp critical
even with the suppression you will still get false positives on the OpenMP runtime because there are some synchronization mechanism within the runtime that Tsan is not able to understand.
We worked on the OpenMP runtime to make Tsan understand this synchronization points and remove all the false positives.
Take a look to this project:
https://github.com/PRUNER/archer
Let me know if you need more help.
Best,
Simone