xref: /llvm-project/compiler-rt/test/asan/TestCases/Windows/beginthreadex.cpp (revision 3c1aa20c63548c77ddce3dabc7b25c7c7edccaac)
1*3c1aa20cSAlvin Wong // RUN: %clang_cl_asan %Od %s %Fe%t
2673dc3d4SNico Weber // RUN: %run %t
3673dc3d4SNico Weber 
4673dc3d4SNico Weber #include <windows.h>
5673dc3d4SNico Weber #include <process.h>
6673dc3d4SNico Weber 
thread_proc(void *)7673dc3d4SNico Weber unsigned WINAPI thread_proc(void *) {
8673dc3d4SNico Weber   volatile char stack_buffer[42];
9673dc3d4SNico Weber   for (int i = 0; i < sizeof(stack_buffer); ++i)
10673dc3d4SNico Weber     stack_buffer[i] = 42;
11673dc3d4SNico Weber   return 0;
12673dc3d4SNico Weber }
13673dc3d4SNico Weber 
main()14673dc3d4SNico Weber int main() {
15673dc3d4SNico Weber   HANDLE thr = (HANDLE)_beginthreadex(NULL, 0, thread_proc, NULL, 0, NULL);
16673dc3d4SNico Weber   if (thr == 0)
17673dc3d4SNico Weber     return 1;
18673dc3d4SNico Weber   if (WAIT_OBJECT_0 != WaitForSingleObject(thr, INFINITE))
19673dc3d4SNico Weber     return 2;
20673dc3d4SNico Weber   CloseHandle(thr);
21673dc3d4SNico Weber }
22