diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:03:21 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:03:21 +0000 |
commit | 4e3a0d5a8f750527f2f433019967f8f8214c558a (patch) | |
tree | ab93a9af59dcc83ceaf0deabab831818cc44e49c /test/asan | |
parent | 5c909fa013fc285f010a95e8d387e0ef3412da9c (diff) | |
download | src-4e3a0d5a8f750527f2f433019967f8f8214c558a.tar.gz src-4e3a0d5a8f750527f2f433019967f8f8214c558a.zip |
Vendor import of compiler-rt trunk r256945:vendor/compiler-rt/compiler-rt-trunk-r256945
Notes
Notes:
svn path=/vendor/compiler-rt/dist/; revision=293253
svn path=/vendor/compiler-rt/compiler-rt-trunk-r256945/; revision=293254; tag=vendor/compiler-rt/compiler-rt-trunk-r256945
Diffstat (limited to 'test/asan')
-rw-r--r-- | test/asan/TestCases/coverage-pc-buffer.cc | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/test/asan/TestCases/coverage-pc-buffer.cc b/test/asan/TestCases/coverage-pc-buffer.cc new file mode 100644 index 000000000000..67b6935ec602 --- /dev/null +++ b/test/asan/TestCases/coverage-pc-buffer.cc @@ -0,0 +1,48 @@ +// Test __sanitizer_coverage_pc_buffer(). + +// RUN: %clangxx_asan -fsanitize-coverage=edge %s -o %t && %run %t + +// UNSUPPORTED: android + +#include <assert.h> +#include <sanitizer/coverage_interface.h> +#include <stdio.h> + +static volatile int sink; +__attribute__((noinline)) void bar() { sink = 2; } +__attribute__((noinline)) void foo() { sink = 1; } + +void assertNotZeroPcs(uintptr_t *buf, uintptr_t size) { + assert(buf); + for (uintptr_t i = 0; i < size; ++i) + assert(buf[i]); +} + +int main() { + uintptr_t *buf = NULL; + uintptr_t sz = __sanitizer_get_coverage_pc_buffer(&buf); + assertNotZeroPcs(buf, sz); + assert(sz); + + foo(); + bar(); + uintptr_t *buf1 = NULL; + uintptr_t sz1 = __sanitizer_get_coverage_pc_buffer(&buf1); + assertNotZeroPcs(buf1, sz1); + assert(buf1 == buf); + assert(sz1 > sz); + + bar(); + uintptr_t *buf2 = NULL; + uintptr_t sz2 = __sanitizer_get_coverage_pc_buffer(&buf2); + assertNotZeroPcs(buf2, sz2); + assert(buf2 == buf); + assert(sz2 > sz1); + + __sanitizer_reset_coverage(); + uintptr_t *buf3 = NULL; + uintptr_t sz3 = __sanitizer_get_coverage_pc_buffer(&buf3); + assertNotZeroPcs(buf3, sz3); + assert(buf3 == buf); + assert(sz3 < sz2); +} |