]>
Commit | Line | Data |
---|---|---|
92a42be0 SL |
1 | // RUN: %clang_cl_asan -O0 %s -Fe%t |
2 | // RUN: not %run %t 2>&1 | FileCheck %s | |
3 | ||
4 | #include <windows.h> | |
5 | ||
6 | HANDLE done; | |
7 | ||
8 | DWORD CALLBACK work_item(LPVOID) { | |
9 | int subscript = -1; | |
10 | volatile char stack_buffer[42]; | |
11 | stack_buffer[subscript] = 42; | |
12 | // CHECK: AddressSanitizer: stack-buffer-underflow on address [[ADDR:0x[0-9a-f]+]] | |
13 | // CHECK: WRITE of size 1 at [[ADDR]] thread T1 | |
14 | // CHECK: {{#0 .* work_item.*queue_user_work_item_report.cc}}:[[@LINE-3]] | |
92a42be0 SL |
15 | SetEvent(done); |
16 | return 0; | |
17 | } | |
18 | ||
19 | int main(int argc, char **argv) { | |
20 | done = CreateEvent(0, false, false, "job is done"); | |
21 | if (!done) | |
22 | return 1; | |
23 | // CHECK-NOT: Thread T1 created | |
24 | QueueUserWorkItem(&work_item, nullptr, 0); | |
5bcae85e | 25 | if (WAIT_OBJECT_0 != WaitForSingleObject(done, 10 * 1000)) |
92a42be0 SL |
26 | return 2; |
27 | } |