]> git.proxmox.com Git - rustc.git/blame - src/compiler-rt/test/asan/TestCases/longjmp.cc
New upstream version 1.19.0+dfsg3
[rustc.git] / src / compiler-rt / test / asan / TestCases / longjmp.cc
CommitLineData
92a42be0
SL
1// RUN: %clangxx_asan -O %s -o %t && %run %t
2
3#include <assert.h>
4#include <setjmp.h>
5#include <stdio.h>
6#include <sanitizer/asan_interface.h>
7
8static jmp_buf buf;
9
10int main() {
11 char x[32];
12 fprintf(stderr, "\nTestLongJmp\n");
13 fprintf(stderr, "Before: %p poisoned: %d\n", &x,
14 __asan_address_is_poisoned(x + 32));
15 assert(__asan_address_is_poisoned(x + 32));
16 if (0 == setjmp(buf))
17 longjmp(buf, 1);
18 fprintf(stderr, "After: %p poisoned: %d\n", &x,
19 __asan_address_is_poisoned(x + 32));
20 // FIXME: Invert this assertion once we fix
21 // https://code.google.com/p/address-sanitizer/issues/detail?id=258
22 // This assertion works only w/o UAR.
23 if (!__asan_get_current_fake_stack())
24 assert(!__asan_address_is_poisoned(x + 32));
25}