1d21b3d34SFangrui Song // RUN: %clangxx_msan -DERROR %s -o %t && not %run %t 2>&1 | \ 2d21b3d34SFangrui Song // RUN: FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NOCB 3d21b3d34SFangrui Song // RUN: %clangxx_msan -DERROR -DMSANCB_SET %s -o %t && not %run %t 2>&1 | \ 4d21b3d34SFangrui Song // RUN: FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-CB 5d21b3d34SFangrui Song // RUN: %clangxx_msan -DERROR -DMSANCB_SET -DMSANCB_CLEAR %s -o %t && not %run %t 2>&1 | \ 6d21b3d34SFangrui Song // RUN: FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NOCB 7d21b3d34SFangrui Song // RUN: %clangxx_msan -DMSANCB_SET %s -o %t && %run %t 2>&1 | \ 8*a59283a7SFangrui Song // RUN: FileCheck %s --check-prefixes=SUCCEED,CHECK-NOCB 9d21b3d34SFangrui Song 10d21b3d34SFangrui Song #include <sanitizer/msan_interface.h> 11d21b3d34SFangrui Song #include <stdio.h> 12d21b3d34SFangrui Song #include <stdlib.h> 13d21b3d34SFangrui Song cb(void)14d21b3d34SFangrui Songvoid cb(void) { 15d21b3d34SFangrui Song fprintf(stderr, "msan-death-callback\n"); 16d21b3d34SFangrui Song } 17d21b3d34SFangrui Song main(int argc,char ** argv)18d21b3d34SFangrui Songint main(int argc, char **argv) { 19d21b3d34SFangrui Song int *volatile p = (int *)malloc(sizeof(int)); 20d21b3d34SFangrui Song *p = 42; 21d21b3d34SFangrui Song free(p); 22d21b3d34SFangrui Song 23d21b3d34SFangrui Song #ifdef MSANCB_SET 24d21b3d34SFangrui Song __msan_set_death_callback(cb); 25d21b3d34SFangrui Song #endif 26d21b3d34SFangrui Song 27d21b3d34SFangrui Song #ifdef MSANCB_CLEAR 28d21b3d34SFangrui Song __msan_set_death_callback(0); 29d21b3d34SFangrui Song #endif 30d21b3d34SFangrui Song 31d21b3d34SFangrui Song #ifdef ERROR 32d21b3d34SFangrui Song if (*p) 33d21b3d34SFangrui Song exit(0); 34d21b3d34SFangrui Song #endif 35d21b3d34SFangrui Song // CHECK-CB: msan-death-callback 36d21b3d34SFangrui Song // CHECK-NOCB-NOT: msan-death-callback 37*a59283a7SFangrui Song 38*a59283a7SFangrui Song // CHECK-NOT: done 39*a59283a7SFangrui Song // SUCCEED: done 40d21b3d34SFangrui Song fprintf(stderr, "done\n"); 41d21b3d34SFangrui Song return 0; 42d21b3d34SFangrui Song } 43