-
Notifications
You must be signed in to change notification settings - Fork 15.1k
Closed
llvm/llvm-project-release-prs
#305Milestone
Description
Here is a minimal OpenMP program:
#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:
❯ 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:
❯ clang++-13 main.cpp -fopenmp && ./a.out
done
Another example is simply getting number of threads using OpenMP:
#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:
❯ 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
Metadata
Metadata
Assignees
Type
Projects
Status
Done