[ASan] Split throw_catch tests into two files: throw/catch + longjmp

Also add some more assertions into these tests

llvm-svn: 213642
This commit is contained in:
Timur Iskhodzhanov 2014-07-22 11:46:24 +00:00
parent fcc6df310d
commit 723c81ff80
2 changed files with 32 additions and 18 deletions

View File

@ -0,0 +1,29 @@
// RUN: %clangxx_asan -O %s -o %t && %run %t
#include <assert.h>
#include <setjmp.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sanitizer/asan_interface.h>
static jmp_buf buf;
void TestLongJmp() {
char x[32];
fprintf(stderr, "\nTestLongJmp\n");
fprintf(stderr, "Before: %p poisoned: %d\n", &x,
__asan_address_is_poisoned(x + 32));
assert(__asan_address_is_poisoned(x + 32));
if (0 == setjmp(buf))
longjmp(buf, 1);
fprintf(stderr, "After: %p poisoned: %d\n", &x,
__asan_address_is_poisoned(x + 32));
// FIXME: Invert this assertion once we fix
// https://code.google.com/p/address-sanitizer/issues/detail?id=258
assert(!__asan_address_is_poisoned(x + 32));
}
int main(int argc, char **argv) {
TestLongJmp();
}

View File

@ -31,6 +31,7 @@ void TestThrow() {
char x[32];
fprintf(stderr, "Before: %p poisoned: %d\n", &x,
__asan_address_is_poisoned(x + 32));
assert(__asan_address_is_poisoned(x + 32));
ThrowAndCatch();
fprintf(stderr, "After: %p poisoned: %d\n", &x,
__asan_address_is_poisoned(x + 32));
@ -43,6 +44,7 @@ void TestThrowInline() {
char x[32];
fprintf(stderr, "Before: %p poisoned: %d\n", &x,
__asan_address_is_poisoned(x + 32));
assert(__asan_address_is_poisoned(x + 32));
try {
Throw();
} catch(...) {
@ -55,24 +57,7 @@ void TestThrowInline() {
assert(!__asan_address_is_poisoned(x + 32));
}
static jmp_buf buf;
void TestLongJmp() {
char x[32];
fprintf(stderr, "\nTestLongJmp\n");
fprintf(stderr, "Before: %p poisoned: %d\n", &x,
__asan_address_is_poisoned(x + 32));
if (0 == setjmp(buf))
longjmp(buf, 1);
fprintf(stderr, "After: %p poisoned: %d\n", &x,
__asan_address_is_poisoned(x + 32));
// FIXME: Invert this assertion once we fix
// https://code.google.com/p/address-sanitizer/issues/detail?id=258
assert(!__asan_address_is_poisoned(x + 32));
}
int main(int argc, char **argv) {
TestThrow();
TestThrowInline();
TestLongJmp();
TestThrow();
}