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