diff options
author | Teresa Johnson <tejohnson@google.com> | 2017-11-08 20:27:28 +0000 |
---|---|---|
committer | Teresa Johnson <tejohnson@google.com> | 2017-11-08 20:27:28 +0000 |
commit | 4468fdf54b97cdc36654eadb4c4fa84ec44ac20c (patch) | |
tree | bceb857c883a7d5db15c929a562271eba042aec4 /test | |
parent | 23507b4feefd35b704481acb5dd1eff22e9696cc (diff) |
[ThinLTO] Ensure sanitizer passes are run
Recommit new test as linux-only.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@317723 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/asan/TestCases/Linux/contiguous_container_crash_thinlto.cc | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/test/asan/TestCases/Linux/contiguous_container_crash_thinlto.cc b/test/asan/TestCases/Linux/contiguous_container_crash_thinlto.cc new file mode 100644 index 000000000..e2f7a66f2 --- /dev/null +++ b/test/asan/TestCases/Linux/contiguous_container_crash_thinlto.cc @@ -0,0 +1,53 @@ +// RUN: %clangxx_asan -flto=thin -O %s -o %t.thinlto +// RUN: not %run %t.thinlto crash 2>&1 | FileCheck --check-prefix=CHECK-CRASH %s +// RUN: not %run %t.thinlto bad-bounds 2>&1 | FileCheck --check-prefix=CHECK-BAD-BOUNDS %s +// RUN: not %run %t.thinlto bad-alignment 2>&1 | FileCheck --check-prefix=CHECK-BAD-ALIGNMENT %s +// RUN: %env_asan_opts=detect_container_overflow=0 %run %t.thinlto crash +// +// Test crash due to __sanitizer_annotate_contiguous_container. + +#include <assert.h> +#include <string.h> + +extern "C" { +void __sanitizer_annotate_contiguous_container(const void *beg, const void *end, + const void *old_mid, + const void *new_mid); +} // extern "C" + +static volatile int one = 1; + +int TestCrash() { + long t[100]; + t[60] = 0; + __sanitizer_annotate_contiguous_container(&t[0], &t[0] + 100, &t[0] + 100, + &t[0] + 50); +// CHECK-CRASH: AddressSanitizer: container-overflow +// CHECK-CRASH: if you don't care about these errors you may set ASAN_OPTIONS=detect_container_overflow=0 + return (int)t[60 * one]; // Touches the poisoned memory. +} + +void BadBounds() { + long t[100]; +// CHECK-BAD-BOUNDS: ERROR: AddressSanitizer: bad parameters to __sanitizer_annotate_contiguous_container + __sanitizer_annotate_contiguous_container(&t[0], &t[0] + 100, &t[0] + 101, + &t[0] + 50); +} + +void BadAlignment() { + int t[100]; +// CHECK-BAD-ALIGNMENT: ERROR: AddressSanitizer: bad parameters to __sanitizer_annotate_contiguous_container +// CHECK-BAD-ALIGNMENT: ERROR: beg is not aligned by 8 + __sanitizer_annotate_contiguous_container(&t[1], &t[0] + 100, &t[1] + 10, + &t[0] + 50); +} + +int main(int argc, char **argv) { + assert(argc == 2); + if (!strcmp(argv[1], "crash")) + return TestCrash(); + else if (!strcmp(argv[1], "bad-bounds")) + BadBounds(); + else if (!strcmp(argv[1], "bad-alignment")) + BadAlignment(); +} |