1*f9e0df07SNico Weber // RUN: %clangxx_hwasan -DERR=1 %s -o %t && not %run %t 2>&1 | FileCheck %s 2*f9e0df07SNico Weber // RUN: %clangxx_hwasan -DERR=2 %s -o %t && not %run %t 2>&1 | FileCheck %s 3*f9e0df07SNico Weber // REQUIRES: android 4*f9e0df07SNico Weber 5*f9e0df07SNico Weber #include <stdlib.h> 6*f9e0df07SNico Weber #include <stdio.h> 7*f9e0df07SNico Weber 8*f9e0df07SNico Weber #include <sanitizer/hwasan_interface.h> 9*f9e0df07SNico Weber 10*f9e0df07SNico Weber __attribute__((no_sanitize("hwaddress"))) android_set_abort_message(const char * msg)11*f9e0df07SNico Weberextern "C" void android_set_abort_message(const char *msg) { 12*f9e0df07SNico Weber fprintf(stderr, "== abort message start\n%s\n== abort message end\n", msg); 13*f9e0df07SNico Weber } 14*f9e0df07SNico Weber main()15*f9e0df07SNico Weberint main() { 16*f9e0df07SNico Weber __hwasan_enable_allocator_tagging(); 17*f9e0df07SNico Weber char *volatile p = (char *)malloc(16); 18*f9e0df07SNico Weber if (ERR==1) { 19*f9e0df07SNico Weber p[16] = 1; 20*f9e0df07SNico Weber } else { 21*f9e0df07SNico Weber free(p); 22*f9e0df07SNico Weber free(p); 23*f9e0df07SNico Weber } 24*f9e0df07SNico Weber // CHECK: ERROR: HWAddressSanitizer: 25*f9e0df07SNico Weber // CHECK: == abort message start 26*f9e0df07SNico Weber // CHECK: ERROR: HWAddressSanitizer: 27*f9e0df07SNico Weber // CHECK: == abort message end 28*f9e0df07SNico Weber } 29