llvm-project/compiler-rt/test/asan/TestCases/disable_container_overflow_checks.cpp
Dan Blackwell 96fb2942cb
[ASan] Enable __SANITIZER_DISABLE_CONTAINER_OVERFLOW__ tests (#181721)
Now that the corresponding libcxx change has landed, these tests should
be passing on some platforms.

This patch re-enables them for all platforms, so that we can see which
bots these do not work on and mark them unsupported accordingly.

rdar://167946476
2026-03-24 08:23:15 +00:00

50 lines
1.7 KiB
C++

// Test crash gives guidance on -D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__ and
// ASAN_OPTIONS=detect_container_overflow=0
// RUN: %clangxx_asan -O %s -o %t
// RUN: not %run %t 2>&1 | FileCheck --check-prefix=CHECK-CRASH %s
//
// Test overflow checks can be disabled at runtime with
// ASAN_OPTIONS=detect_container_overflow=0
// RUN: %env_asan_opts=detect_container_overflow=0 %run %t 2>&1 | FileCheck --check-prefix=CHECK-NOCRASH %s
//
// Illustrate use of -D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__ flag to suppress
// overflow checks at compile time.
// RUN: %clangxx_asan -D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__ -O %s -o %t-no-overflow
// RUN: %run %t-no-overflow 2>&1 | FileCheck --check-prefix=CHECK-NOCRASH %s
#include <assert.h>
#include <stdio.h>
#include <string.h>
// public definition of __sanitizer_annotate_contiguous_container
#include "sanitizer/common_interface_defs.h"
static volatile int one = 1;
int TestCrash() {
long t[100];
t[60] = 0;
#if __has_feature(address_sanitizer)
__sanitizer_annotate_contiguous_container(&t[0], &t[0] + 100, &t[0] + 100,
&t[0] + 50);
#endif
// CHECK-CRASH: AddressSanitizer: container-overflow
// CHECK-CRASH: ASAN_OPTIONS=detect_container_overflow=0
// CHECK-CRASH: __SANITIZER_DISABLE_CONTAINER_OVERFLOW__
// CHECK-NOCRASH-NOT: AddressSanitizer: container-overflow
// CHECK-NOCRASH-NOT: ASAN_OPTIONS=detect_container_overflow=0
// CHECK-NOCRASH-NOT: __SANITIZER_DISABLE_CONTAINER_OVERFLOW__
return (int)t[60 * one]; // Touches the poisoned memory.
}
int main(int argc, char **argv) {
int retval = 0;
retval = TestCrash();
printf("Exiting main\n");
return retval;
}