summaryrefslogtreecommitdiff
path: root/test/asan/TestCases/coverage-pc-buffer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'test/asan/TestCases/coverage-pc-buffer.cc')
-rw-r--r--test/asan/TestCases/coverage-pc-buffer.cc40
1 files changed, 18 insertions, 22 deletions
diff --git a/test/asan/TestCases/coverage-pc-buffer.cc b/test/asan/TestCases/coverage-pc-buffer.cc
index 5895a5c45..0e0434a5f 100644
--- a/test/asan/TestCases/coverage-pc-buffer.cc
+++ b/test/asan/TestCases/coverage-pc-buffer.cc
@@ -1,11 +1,13 @@
// Test __sanitizer_coverage_pc_buffer().
-// RUN: %clangxx_asan -fsanitize-coverage=edge %s -o %t && %run %t
+// RUN: %clangxx_asan -fsanitize-coverage=edge -std=c++11 %s -O3 -o %t && %run %t
// UNSUPPORTED: android
#include <assert.h>
+#include <memory>
#include <sanitizer/coverage_interface.h>
+#include <stdint.h>
#include <stdio.h>
static volatile int sink;
@@ -19,47 +21,41 @@ void assertNotZeroPcs(uintptr_t *buf, uintptr_t size) {
}
int main() {
+ uintptr_t buf_size = 1 << 20;
+ std::unique_ptr<uintptr_t[]> buf(new uintptr_t[buf_size]);
+ __sanitizer_set_coverage_pc_buffer(buf.get(), buf_size);
+
{
- uintptr_t *buf = NULL;
- uintptr_t sz = __sanitizer_get_coverage_pc_buffer(&buf);
- assertNotZeroPcs(buf, sz);
+ uintptr_t sz = __sanitizer_get_coverage_pc_buffer_pos();
+ assertNotZeroPcs(buf.get(), sz);
assert(sz);
}
{
- uintptr_t *buf = NULL;
- uintptr_t sz = __sanitizer_get_coverage_pc_buffer(&buf);
+ uintptr_t sz = __sanitizer_get_coverage_pc_buffer_pos();
// call functions for the first time.
foo();
bar();
- uintptr_t *buf1 = NULL;
- uintptr_t sz1 = __sanitizer_get_coverage_pc_buffer(&buf1);
- assertNotZeroPcs(buf1, sz1);
- assert(buf1 == buf);
+ uintptr_t sz1 = __sanitizer_get_coverage_pc_buffer_pos();
+ assertNotZeroPcs(buf.get(), sz1);
assert(sz1 > sz);
}
{
- uintptr_t *buf = NULL;
- uintptr_t sz = __sanitizer_get_coverage_pc_buffer(&buf);
+ uintptr_t sz = __sanitizer_get_coverage_pc_buffer_pos();
// second call shouldn't increase coverage.
bar();
- uintptr_t *buf1 = NULL;
- uintptr_t sz1 = __sanitizer_get_coverage_pc_buffer(&buf1);
- assertNotZeroPcs(buf1, sz1);
- assert(buf1 == buf);
+ uintptr_t sz1 = __sanitizer_get_coverage_pc_buffer_pos();
assert(sz1 == sz);
+ assertNotZeroPcs(buf.get(), sz1);
}
{
- uintptr_t *buf = NULL;
- uintptr_t sz = __sanitizer_get_coverage_pc_buffer(&buf);
+ uintptr_t sz = __sanitizer_get_coverage_pc_buffer_pos();
// reset coverage to 0.
__sanitizer_reset_coverage();
- uintptr_t *buf1 = NULL;
- uintptr_t sz1 = __sanitizer_get_coverage_pc_buffer(&buf1);
- assertNotZeroPcs(buf1, sz1);
- assert(buf1 == buf);
+ uintptr_t sz1 = __sanitizer_get_coverage_pc_buffer_pos();
+ assertNotZeroPcs(buf.get(), sz1);
assert(sz1 < sz);
}
}