1*dcf23e13SMitch Phillips // REQUIRES: gwp_asan 2*dcf23e13SMitch Phillips // RUN: %clangxx_gwp_asan %s -o %t 3*dcf23e13SMitch Phillips // RUN: %expect_crash %run %t 2>&1 | FileCheck %s 4*dcf23e13SMitch Phillips 5*dcf23e13SMitch Phillips // RUN: %clangxx_gwp_asan %s -o %t -DTOUCH_GUARD_PAGE 6*dcf23e13SMitch Phillips // RUN: %expect_crash %run %t 2>&1 | FileCheck %s 7*dcf23e13SMitch Phillips 8*dcf23e13SMitch Phillips // CHECK: GWP-ASan detected a memory error 9*dcf23e13SMitch Phillips // CHECK: Use After Free 10*dcf23e13SMitch Phillips // CHECK-SAME: warning: buffer overflow/underflow detected on a free()'d allocation 11*dcf23e13SMitch Phillips // CHECK-SAME: at 0x{{[a-f0-9]+}} ({{[0-9]+}} byte{{s?}} to the right 12*dcf23e13SMitch Phillips 13*dcf23e13SMitch Phillips #include <cstdlib> 14*dcf23e13SMitch Phillips 15*dcf23e13SMitch Phillips #include "page_size.h" 16*dcf23e13SMitch Phillips main()17*dcf23e13SMitch Phillipsint main() { 18*dcf23e13SMitch Phillips unsigned malloc_size = 1; 19*dcf23e13SMitch Phillips #ifdef TOUCH_GUARD_PAGE 20*dcf23e13SMitch Phillips malloc_size = pageSize(); 21*dcf23e13SMitch Phillips #endif // TOUCH_GUARD_PAGE 22*dcf23e13SMitch Phillips char *Ptr = reinterpret_cast<char *>(malloc(malloc_size)); 23*dcf23e13SMitch Phillips free(Ptr); 24*dcf23e13SMitch Phillips volatile char x = *(Ptr + malloc_size); 25*dcf23e13SMitch Phillips return 0; 26*dcf23e13SMitch Phillips } 27