1673dc3d4SNico Weber // Main executable is uninstrumented, but linked to ASan runtime.
2673dc3d4SNico Weber // Regression test for https://code.google.com/p/address-sanitizer/issues/detail?id=357.
3673dc3d4SNico Weber
4673dc3d4SNico Weber // RUN: %clangxx -g -O0 %s -c -o %t.o
5673dc3d4SNico Weber // RUN: %clangxx_asan -g -O0 %t.o -o %t
6673dc3d4SNico Weber // RUN: %run %t 2>&1 | FileCheck %s
7673dc3d4SNico Weber
8673dc3d4SNico Weber #include <stdio.h>
9673dc3d4SNico Weber #include <stdlib.h>
10673dc3d4SNico Weber #include <string.h>
11673dc3d4SNico Weber
12673dc3d4SNico Weber #include "sanitizer/asan_interface.h"
13*b316c302SEmily Shi #if __has_feature(ptrauth_calls)
14*b316c302SEmily Shi # include <ptrauth.h>
15*b316c302SEmily Shi #endif
16673dc3d4SNico Weber
test_shadow(char * p,size_t size)17673dc3d4SNico Weber void test_shadow(char *p, size_t size) {
18673dc3d4SNico Weber fprintf(stderr, "p = %p\n", p);
19673dc3d4SNico Weber char *q = (char *)__asan_region_is_poisoned(p, size);
20673dc3d4SNico Weber fprintf(stderr, "=%zd=\n", q ? q - p : -1);
21673dc3d4SNico Weber }
22673dc3d4SNico Weber
main(int argc,char * argv[])23673dc3d4SNico Weber int main(int argc, char *argv[]) {
24673dc3d4SNico Weber char *p = (char *)malloc(10000);
25673dc3d4SNico Weber test_shadow(p, 100);
26673dc3d4SNico Weber free(p);
27673dc3d4SNico Weber // CHECK: =-1=
28673dc3d4SNico Weber
29*b316c302SEmily Shi char *mainptr;
30*b316c302SEmily Shi #if __has_feature(ptrauth_calls)
31*b316c302SEmily Shi mainptr = (char *)ptrauth_strip((void *)&main, ptrauth_key_return_address);
32*b316c302SEmily Shi #else
33*b316c302SEmily Shi mainptr = (char *)&main;
34*b316c302SEmily Shi #endif
35*b316c302SEmily Shi test_shadow(mainptr, 1);
36673dc3d4SNico Weber // CHECK: =-1=
37673dc3d4SNico Weber
38673dc3d4SNico Weber test_shadow((char *)&p, 1);
39673dc3d4SNico Weber // CHECK: =-1=
40673dc3d4SNico Weber
41673dc3d4SNico Weber return 0;
42673dc3d4SNico Weber }
43