13c1aa20cSAlvin Wong // RUN: %clang_cl_asan %Od %s %Fe%t 2673dc3d4SNico Weber // RUN: not %run %t 2>&1 | FileCheck %s 3673dc3d4SNico Weber 4673dc3d4SNico Weber #include <windows.h> 5673dc3d4SNico Weber 6673dc3d4SNico Weber typedef struct _S { 7673dc3d4SNico Weber unsigned int bf1:1; 8673dc3d4SNico Weber unsigned int bf2:2; 9673dc3d4SNico Weber unsigned int bf3:3; 10673dc3d4SNico Weber unsigned int bf4:4; 11673dc3d4SNico Weber } S; 12673dc3d4SNico Weber make_access(S * s)13673dc3d4SNico Webervoid make_access(S *s) { 14673dc3d4SNico Weber s->bf2 = 2; 15673dc3d4SNico Weber // CHECK: AddressSanitizer: heap-use-after-free on address [[ADDR:0x[0-9a-f]+]] 16673dc3d4SNico Weber // CHECK: READ of size {{[124]}} at [[ADDR]] 17673dc3d4SNico Weber // CHECK: {{#0 .* make_access.*bitfield_uaf.cpp}}:[[@LINE-3]] 18673dc3d4SNico Weber // CHECK: {{#1 .* main}} 19673dc3d4SNico Weber } 20673dc3d4SNico Weber main(void)21673dc3d4SNico Weberint main(void) { 22673dc3d4SNico Weber S *s = (S*)malloc(sizeof(S)); 23673dc3d4SNico Weber free(s); 24673dc3d4SNico Weber // CHECK: [[ADDR]] is located 0 bytes inside of 4-byte region 25673dc3d4SNico Weber // CHECK-LABEL: freed by thread T0 here: 26673dc3d4SNico Weber // CHECK: {{#0 .* free }} 27*b91b8feaSCharlie Barto // CHECK: {{ #[1-3] .* main .*bitfield_uaf.cpp}}:[[@LINE-4]] 28673dc3d4SNico Weber // CHECK-LABEL: previously allocated by thread T0 here: 29673dc3d4SNico Weber // CHECK: {{#0 .* malloc }} 30*b91b8feaSCharlie Barto // CHECK: {{ #[1-3] .* main .*bitfield_uaf.cpp}}:[[@LINE-8]] 31673dc3d4SNico Weber make_access(s); 32673dc3d4SNico Weber return 0; 33673dc3d4SNico Weber } 34673dc3d4SNico Weber 35