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