[compiler-rt] 2fd4eca - [sanitizer] Add allocator_interface test

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Wed May 24 08:32:39 PDT 2023


Author: Vitaly Buka
Date: 2023-05-24T08:31:58-07:00
New Revision: 2fd4eca16107057944ffefdc94ff99e9a7505bf9

URL: https://github.com/llvm/llvm-project/commit/2fd4eca16107057944ffefdc94ff99e9a7505bf9
DIFF: https://github.com/llvm/llvm-project/commit/2fd4eca16107057944ffefdc94ff99e9a7505bf9.diff

LOG: [sanitizer] Add allocator_interface test

Hooks are in malloc_hook.cpp.

Added: 
    compiler-rt/test/sanitizer_common/TestCases/allocator_interface.cpp

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/compiler-rt/test/sanitizer_common/TestCases/allocator_interface.cpp b/compiler-rt/test/sanitizer_common/TestCases/allocator_interface.cpp
new file mode 100644
index 0000000000000..815a7964d9414
--- /dev/null
+++ b/compiler-rt/test/sanitizer_common/TestCases/allocator_interface.cpp
@@ -0,0 +1,49 @@
+// RUN: %clangxx %s -o %t && %run %t 1234
+// RUN: %clangxx %s -o %t && %run %t 5678910
+
+// No allocator.
+// UNSUPPORTED: ubsan
+
+// FIXME: implementation is incomplete.
+// XFAIL: msan, lsan, hwasan, tsan
+
+#include <assert.h>
+#include <sanitizer/allocator_interface.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <thread>
+
+void Test(int size) {
+  auto allocated_bytes_before = __sanitizer_get_current_allocated_bytes();
+  int *p = (int *)malloc(size);
+  assert(__sanitizer_get_estimated_allocated_size(size) >= size);
+  assert(__sanitizer_get_ownership(p));
+  assert(!__sanitizer_get_ownership(&p));
+  assert(__sanitizer_get_allocated_size(p) == size);
+  assert(__sanitizer_get_allocated_begin(p) == p);
+  assert(__sanitizer_get_allocated_begin(p + 1) == p);
+  assert(__sanitizer_get_current_allocated_bytes() >=
+         size + allocated_bytes_before);
+  assert(__sanitizer_get_current_allocated_bytes() <=
+         2 * size + allocated_bytes_before);
+  assert(__sanitizer_get_heap_size() >= size);
+  free(p);
+
+  // These are not implemented.
+  assert(__sanitizer_get_unmapped_bytes() <= 1);
+  assert(__sanitizer_get_free_bytes() > 0);
+
+  __sanitizer_purge_allocator();
+}
+
+int main(int argc, char **argv) {
+  int size = atoi(argv[1]);
+
+  Test(size);
+
+  // Check the thread local caches work as well.
+  std::thread t(Test, size);
+  t.join();
+
+  return 0;
+}
\ No newline at end of file


        


More information about the llvm-commits mailing list