[llvm-branch-commits] [asan] Add tests for __sanitizer_annotate_double_ended_contiguous_container (PR #195673)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon May 4 08:22:51 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-compiler-rt-sanitizer
Author: Vitaly Buka (vitalybuka)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/195673.diff
1 Files Affected:
- (modified) compiler-rt/test/asan/TestCases/contiguous_container_crash.cpp (+73)
``````````diff
diff --git a/compiler-rt/test/asan/TestCases/contiguous_container_crash.cpp b/compiler-rt/test/asan/TestCases/contiguous_container_crash.cpp
index a13d52bb21743..93e0d8d158d80 100644
--- a/compiler-rt/test/asan/TestCases/contiguous_container_crash.cpp
+++ b/compiler-rt/test/asan/TestCases/contiguous_container_crash.cpp
@@ -6,6 +6,15 @@
// RUN: not %run %t odd-alignment-end 2>&1 | FileCheck --check-prefix=CHECK-CRASH %s
// RUN: %env_asan_opts=detect_container_overflow=0 %run %t crash
//
+// RUN: not %run %t double-crash-beg 2>&1 | FileCheck --check-prefix=DOUBLE-CRASH-BEG %s
+// RUN: not %run %t double-crash-end 2>&1 | FileCheck --check-prefix=DOUBLE-CRASH-END %s
+// RUN: not %run %t double-bad-bounds 2>&1 | FileCheck --check-prefix=DOUBLE-BAD-BOUNDS %s
+// RUN: not %run %t double-unaligned-bad-bounds 2>&1 | FileCheck --check-prefix=DOUBLE-UNALIGNED-BAD-BOUNDS %s --implicit-check-not="beg is not aligned by"
+// RUN: not %run %t double-odd-alignment 2>&1 | FileCheck --check-prefix=DOUBLE-CRASH-BEG %s
+// RUN: not %run %t double-odd-alignment-end 2>&1 | FileCheck --check-prefix=DOUBLE-CRASH-END %s
+// RUN: %env_asan_opts=detect_container_overflow=0 %run %t double-crash-beg
+// RUN: %env_asan_opts=detect_container_overflow=0 %run %t double-crash-end
+//
// Test crash due to __sanitizer_annotate_contiguous_container.
#include <assert.h>
@@ -55,6 +64,58 @@ int OddAlignmentEnd() {
return (int)t[60 * one]; // Touches the poisoned memory.
}
+int DoubleEndedTestCrashBeg() {
+ long t[100];
+ t[15] = 0;
+ __sanitizer_annotate_double_ended_contiguous_container(
+ &t[0], &t[0] + 100, &t[0], &t[0] + 100, &t[0] + 25, &t[0] + 75);
+// DOUBLE-CRASH-BEG: AddressSanitizer: container-overflow
+// DOUBLE-CRASH-BEG: if you don't care about these errors you may set ASAN_OPTIONS=detect_container_overflow=0
+ return (int)t[15 * one];
+}
+
+int DoubleEndedTestCrashEnd() {
+ long t[100];
+ t[85] = 0;
+ __sanitizer_annotate_double_ended_contiguous_container(
+ &t[0], &t[0] + 100, &t[0], &t[0] + 100, &t[0] + 25, &t[0] + 75);
+// DOUBLE-CRASH-END: AddressSanitizer: container-overflow
+// DOUBLE-CRASH-END: if you don't care about these errors you may set ASAN_OPTIONS=detect_container_overflow=0
+ return (int)t[85 * one];
+}
+
+void DoubleEndedBadBounds() {
+ long t[100];
+// DOUBLE-BAD-BOUNDS: ERROR: AddressSanitizer: bad parameters to __sanitizer_annotate_double_ended_contiguous_container
+ __sanitizer_annotate_double_ended_contiguous_container(
+ &t[0], &t[0] + 100, &t[0], &t[0] + 100, &t[0] + 75, &t[0] + 25);
+}
+
+void DoubleEndedUnalignedBadBounds() {
+ char t[100];
+// DOUBLE-UNALIGNED-BAD-BOUNDS: ERROR: AddressSanitizer: bad parameters to __sanitizer_annotate_double_ended_contiguous_container
+ __sanitizer_annotate_double_ended_contiguous_container(
+ &t[1], &t[0] + 100, &t[0], &t[0] + 100, &t[0] + 25, &t[0] + 75);
+}
+
+int DoubleEndedOddAlignment() {
+ int t[100];
+ t[5] = 0;
+ __sanitizer_annotate_double_ended_contiguous_container(
+ &t[1], &t[0] + 100, &t[1], &t[0] + 100, &t[1] + 10, &t[1] + 60);
+// DOUBLE-CRASH-BEG: AddressSanitizer: container-overflow
+ return (int)t[5 * one];
+}
+
+int DoubleEndedOddAlignmentEnd() {
+ int t[100];
+ t[95] = 0;
+ __sanitizer_annotate_double_ended_contiguous_container(
+ &t[0], &t[0] + 99, &t[0], &t[0] + 99, &t[0] + 10, &t[0] + 90);
+// DOUBLE-CRASH-END: AddressSanitizer: container-overflow
+ return (int)t[95 * one];
+}
+
int main(int argc, char **argv) {
assert(argc == 2);
if (!strcmp(argv[1], "crash"))
@@ -67,5 +128,17 @@ int main(int argc, char **argv) {
return OddAlignment();
else if (!strcmp(argv[1], "odd-alignment-end"))
return OddAlignmentEnd();
+ else if (!strcmp(argv[1], "double-crash-beg"))
+ return DoubleEndedTestCrashBeg();
+ else if (!strcmp(argv[1], "double-crash-end"))
+ return DoubleEndedTestCrashEnd();
+ else if (!strcmp(argv[1], "double-bad-bounds"))
+ DoubleEndedBadBounds();
+ else if (!strcmp(argv[1], "double-unaligned-bad-bounds"))
+ DoubleEndedUnalignedBadBounds();
+ else if (!strcmp(argv[1], "double-odd-alignment"))
+ return DoubleEndedOddAlignment();
+ else if (!strcmp(argv[1], "double-odd-alignment-end"))
+ return DoubleEndedOddAlignmentEnd();
return 0;
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/195673
More information about the llvm-branch-commits
mailing list