xref: /llvm-project/compiler-rt/test/rtsan/disabler.cpp (revision 5a2071b184e00f086f5b538f2209bcdb8aba3078)
15d146c68SChris Apple // RUN: %clangxx -fsanitize=realtime %s -o %t
25d146c68SChris Apple // RUN: not %run %t 2>&1 | FileCheck %s
35d146c68SChris Apple // RUN: %clangxx %s -fsanitize=realtime -o - -S -emit-llvm | FileCheck %s --check-prefix=CHECK-ENABLED-IR
45d146c68SChris Apple // RUN: %clangxx %s -o - -S -emit-llvm | FileCheck %s --check-prefix=CHECK-DISABLED-IR
55d146c68SChris Apple // UNSUPPORTED: ios
65d146c68SChris Apple 
75d146c68SChris Apple #include <stdio.h>
85d146c68SChris Apple #include <stdlib.h>
95d146c68SChris Apple 
105d146c68SChris Apple #include "sanitizer/rtsan_interface.h"
115d146c68SChris Apple 
125d146c68SChris Apple void violation() [[clang::nonblocking]] {
135d146c68SChris Apple   void *ptr;
145d146c68SChris Apple   {
155d146c68SChris Apple     __rtsan::ScopedDisabler disabler{};
165d146c68SChris Apple     ptr = malloc(2);
175d146c68SChris Apple     fprintf(stderr, "Allocated pointer %p in disabled context\n", ptr);
185d146c68SChris Apple   }
195d146c68SChris Apple 
205d146c68SChris Apple   // ensure nested disablers don't interfere with one another
215d146c68SChris Apple   {
225d146c68SChris Apple     void *ptr2;
235d146c68SChris Apple     __rtsan::ScopedDisabler disabler{};
245d146c68SChris Apple     {
255d146c68SChris Apple       __rtsan::ScopedDisabler disabler2{};
265d146c68SChris Apple       ptr2 = malloc(2);
275d146c68SChris Apple       fprintf(stderr, "Allocated second pointer %p in disabled context\n",
285d146c68SChris Apple               ptr2);
295d146c68SChris Apple     }
305d146c68SChris Apple 
315d146c68SChris Apple     free(ptr2);
325d146c68SChris Apple     fprintf(stderr, "Free'd second pointer in disabled context\n");
335d146c68SChris Apple   }
345d146c68SChris Apple 
355d146c68SChris Apple   free(ptr);
365d146c68SChris Apple }
375d146c68SChris Apple 
385d146c68SChris Apple int main() {
395d146c68SChris Apple   violation();
405d146c68SChris Apple   return 0;
415d146c68SChris Apple   // CHECK: Allocated pointer {{.*}} in disabled context
425d146c68SChris Apple   // CHECK: Allocated second pointer {{.*}} in disabled context
435d146c68SChris Apple   // CHECK: Free'd second pointer in disabled context
44*5a2071b1SChris Apple   // CHECK: ==ERROR: RealtimeSanitizer: unsafe-library-call
455d146c68SChris Apple   // CHECK-NOT: {{.*malloc*}}
465d146c68SChris Apple   // CHECK-NEXT: {{.*free.*}}
475d146c68SChris Apple }
485d146c68SChris Apple 
495d146c68SChris Apple // CHECK-ENABLED-IR: {{.*@__rtsan_disable.*}}
505d146c68SChris Apple // CHECK-ENABLED-IR: {{.*@__rtsan_enable.*}}
515d146c68SChris Apple 
525d146c68SChris Apple // CHECK-DISABLED-IR-NOT: {{.*__rtsan_disable.*}}
535d146c68SChris Apple // CHECK-DISABLED-IR-NOT: {{.*__rtsan_enable.*}}
54