xref: /llvm-project/clang/test/Sema/noescape.c (revision af01f717c48f0fd2481600ed6c00441763365b62)
1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 
3 void escapefunc(int *);
4 void noescapefunc(__attribute__((noescape)) int *);
5 void (*escapefuncptr)(int *);
6 void (*noescapefuncptr)(__attribute__((noescape)) int *);
7 
8 void func_ne(__attribute__((noescape)) int *, int *);
9 void func_en(int *, __attribute__((noescape)) int *);
10 
11 void (*funcptr_ee)(int *, int *);
12 void (*funcptr_nn)(__attribute__((noescape)) int *, __attribute__((noescape)) int *);
13 
test0(int c)14 void test0(int c) {
15   escapefuncptr = &escapefunc;
16   escapefuncptr = &noescapefunc;
17   noescapefuncptr = &escapefunc; // expected-error {{incompatible function pointer types assigning to 'void (*)(__attribute__((noescape)) int *)' from 'void (*)(int *)'}}
18   noescapefuncptr = &noescapefunc;
19 
20   escapefuncptr = c ? &escapefunc : &noescapefunc;
21   noescapefuncptr = c ? &escapefunc : &noescapefunc; // expected-error {{incompatible function pointer types assigning to 'void (*)(__attribute__((noescape)) int *)' from 'void (*)(int *)'}}
22 
23   funcptr_ee = c ? &func_ne : &func_en;
24   funcptr_nn = c ? &func_ne : &func_en; // expected-error {{incompatible function pointer types assigning to 'void (*)(__attribute__((noescape)) int *, __attribute__((noescape)) int *)' from 'void (*)(int *, int *)'}}
25 }
26