Skip to content

Commit e37f8e5

Browse files
committed
[test][asan] Simplify __sanitizer_verify_contiguous_container test
1 parent d06b8b4 commit e37f8e5

File tree

1 file changed

+24
-16
lines changed

1 file changed

+24
-16
lines changed

compiler-rt/test/asan/TestCases/contiguous_container.cpp

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -48,23 +48,31 @@ void TestContainer(size_t capacity, size_t off_begin, bool poison_buffer) {
4848
// bytes after the end.
4949
for (; cur != end + kGranularity; ++cur)
5050
assert(__asan_address_is_poisoned(cur) == poison_buffer);
51-
assert(__sanitizer_verify_contiguous_container(beg, mid, end));
52-
assert(NULL ==
53-
__sanitizer_contiguous_container_find_bad_address(beg, mid, end));
54-
size_t distance = (end > RoundDown(end)) ? kGranularity + 1 : 1;
55-
if (mid >= beg + distance) {
56-
assert(
57-
!__sanitizer_verify_contiguous_container(beg, mid - distance, end));
58-
assert(mid - distance ==
59-
__sanitizer_contiguous_container_find_bad_address(
60-
beg, mid - distance, end));
61-
}
51+
}
52+
53+
for (int i = 0; i <= capacity; i++) {
54+
old_mid = mid;
55+
mid = beg + i;
56+
__sanitizer_annotate_contiguous_container(beg, end, old_mid, mid);
6257

63-
if (mid + distance <= end) {
64-
assert(
65-
!__sanitizer_verify_contiguous_container(beg, mid + distance, end));
66-
assert(mid == __sanitizer_contiguous_container_find_bad_address(
67-
beg, mid + distance, end));
58+
for (char *cur = std::max(beg, mid - 2 * kGranularity);
59+
cur <= std::min(end, mid + 2 * kGranularity); ++cur) {
60+
if (cur == mid ||
61+
// Any mid in the last unaligned granule is OK, if bytes after the
62+
// storage are not poisoned.
63+
(!poison_buffer && RoundDown(end) <= std::min(cur, mid))) {
64+
assert(__sanitizer_verify_contiguous_container(beg, cur, end));
65+
assert(NULL == __sanitizer_contiguous_container_find_bad_address(
66+
beg, cur, end));
67+
} else if (cur < mid) {
68+
assert(!__sanitizer_verify_contiguous_container(beg, cur, end));
69+
assert(cur == __sanitizer_contiguous_container_find_bad_address(
70+
beg, cur, end));
71+
} else {
72+
assert(!__sanitizer_verify_contiguous_container(beg, cur, end));
73+
assert(mid == __sanitizer_contiguous_container_find_bad_address(
74+
beg, cur, end));
75+
}
6876
}
6977
}
7078

0 commit comments

Comments
 (0)