[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