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