brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · dd1d443 Raw
54 lines · cpp
1// RUN: %clangxx -fsanitize=realtime %s -o %t2// RUN: not %run %t 2>&1 | FileCheck %s3// RUN: %clangxx %s -fsanitize=realtime -o - -S -emit-llvm | FileCheck %s --check-prefix=CHECK-ENABLED-IR4// RUN: %clangxx %s -o - -S -emit-llvm | FileCheck %s --check-prefix=CHECK-DISABLED-IR5// UNSUPPORTED: ios6 7#include <stdio.h>8#include <stdlib.h>9 10#include "sanitizer/rtsan_interface.h"11 12void violation() [[clang::nonblocking]] {13  void *ptr;14  {15    __rtsan::ScopedDisabler disabler{};16    ptr = malloc(2);17    fprintf(stderr, "Allocated pointer %p in disabled context\n", ptr);18  }19 20  // ensure nested disablers don't interfere with one another21  {22    void *ptr2;23    __rtsan::ScopedDisabler disabler{};24    {25      __rtsan::ScopedDisabler disabler2{};26      ptr2 = malloc(2);27      fprintf(stderr, "Allocated second pointer %p in disabled context\n",28              ptr2);29    }30 31    free(ptr2);32    fprintf(stderr, "Free'd second pointer in disabled context\n");33  }34 35  free(ptr);36}37 38int main() {39  violation();40  return 0;41  // CHECK: Allocated pointer {{.*}} in disabled context42  // CHECK: Allocated second pointer {{.*}} in disabled context43  // CHECK: Free'd second pointer in disabled context44  // CHECK: ==ERROR: RealtimeSanitizer: unsafe-library-call45  // CHECK-NOT: {{.*malloc*}}46  // CHECK-NEXT: {{.*free.*}}47}48 49// CHECK-ENABLED-IR: {{.*@__rtsan_disable.*}}50// CHECK-ENABLED-IR: {{.*@__rtsan_enable.*}}51 52// CHECK-DISABLED-IR-NOT: {{.*__rtsan_disable.*}}53// CHECK-DISABLED-IR-NOT: {{.*__rtsan_enable.*}}54