// Test __sanitizer_coverage_pc_buffer(). // RUN: %clangxx_asan -fsanitize-coverage=edge %s -o %t && %run %t // UNSUPPORTED: android #include #include #include 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); }