15d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: %clang_cl_asan -O0 %s -Fe%t 22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %run %t 32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <windows.h> 52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesDWORD WINAPI thread_proc_1(void *) { 72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines volatile int x, y, z; 82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines x = 1; 92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines y = 2; 102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines z = 3; 112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return 0; 122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesDWORD WINAPI thread_proc_2(void *) { 152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines volatile char stack_buffer[42]; 162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines for (int i = 0; i < sizeof(stack_buffer); ++i) 172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines stack_buffer[i] = 42; 182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return 0; 192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesint main(void) { 222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines HANDLE thr = NULL; 232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines thr = CreateThread(NULL, 0, thread_proc_1, NULL, 0, NULL); 252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines if (thr == 0) 262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return 1; 272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines if (WAIT_OBJECT_0 != WaitForSingleObject(thr, INFINITE)) 282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return 2; 292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines thr = CreateThread(NULL, 0, thread_proc_2, NULL, 0, NULL); 312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines if (thr == 0) 322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return 3; 332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines if (WAIT_OBJECT_0 != WaitForSingleObject(thr, INFINITE)) 342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return 4; 352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines CloseHandle(thr); 362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 372d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 38