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 Weber extern "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 Weber int 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