1*c4992bf5SKevin Athey // RUN: %clangxx_asan -fsanitize-address-use-after-return=never -O %s -o %t && %run %t
2673dc3d4SNico Weber 
3673dc3d4SNico Weber #include <assert.h>
4673dc3d4SNico Weber #include <setjmp.h>
5673dc3d4SNico Weber #include <stdio.h>
6673dc3d4SNico Weber #include <sanitizer/asan_interface.h>
7673dc3d4SNico Weber 
8673dc3d4SNico Weber static jmp_buf buf;
9673dc3d4SNico Weber 
main()10673dc3d4SNico Weber int main() {
11673dc3d4SNico Weber   char x[32];
12673dc3d4SNico Weber   fprintf(stderr, "\nTestLongJmp\n");
13673dc3d4SNico Weber   fprintf(stderr, "Before: %p poisoned: %d\n", &x,
14673dc3d4SNico Weber           __asan_address_is_poisoned(x + 32));
15673dc3d4SNico Weber   assert(__asan_address_is_poisoned(x + 32));
16673dc3d4SNico Weber   if (0 == setjmp(buf))
17673dc3d4SNico Weber     longjmp(buf, 1);
18673dc3d4SNico Weber   fprintf(stderr, "After:  %p poisoned: %d\n",  &x,
19673dc3d4SNico Weber           __asan_address_is_poisoned(x + 32));
20673dc3d4SNico Weber   assert(!__asan_address_is_poisoned(x + 32));
21673dc3d4SNico Weber }
22