Static Analysis Problem Type Reference
A PRIVATE variable is uninitialized.
PRIVATE variables are not, by default, initialized to the value of the corresponding outer variable. To cause this to occur, you must use the FIRSTPRIVATE clause instead of the PRIVATE clause. Therefore, each thread is responsible for initializing its own PRIVATE variables before they are used. This error is simply another form of the uninitialized variable error where the variable is PRIVATE.
|
ID |
Code Location |
Description |
|---|---|---|
|
1 |
Uninitialized read |
The place where the uninitialized PRIVATE variable was read |
#include <stdio.h>
#include <omp.h>
int b;
void do_work()
{
int i;
#pragma omp parallel
{
#pragma omp for ordered private(b)
// INCORRECT: private variable "b" not initialized before entry to the loop
for (i = b; i < 100; i++) {
b++;
#pragma omp ordered
printf("i = %d, #threads = %d, b = %d\n", i, omp_get_thread_num (), b);
}
}
}
int main(int argc, char **argv)
{
b = 50;
omp_set_num_threads(3);
do_work();
return 0;
}