| // RUN: %clang_cc1 -fsyntax-only -verify %s |
| |
| void escapefunc(int *); |
| void noescapefunc(__attribute__((noescape)) int *); |
| void (*escapefuncptr)(int *); |
| void (*noescapefuncptr)(__attribute__((noescape)) int *); |
| |
| void func_ne(__attribute__((noescape)) int *, int *); |
| void func_en(int *, __attribute__((noescape)) int *); |
| |
| void (*funcptr_ee)(int *, int *); |
| void (*funcptr_nn)(__attribute__((noescape)) int *, __attribute__((noescape)) int *); |
| |
| void test0(int c) { |
| escapefuncptr = &escapefunc; |
| escapefuncptr = &noescapefunc; |
| noescapefuncptr = &escapefunc; // expected-warning {{incompatible function pointer types assigning to 'void (*)(__attribute__((noescape)) int *)' from 'void (*)(int *)'}} |
| noescapefuncptr = &noescapefunc; |
| |
| escapefuncptr = c ? &escapefunc : &noescapefunc; |
| noescapefuncptr = c ? &escapefunc : &noescapefunc; // expected-warning {{incompatible function pointer types assigning to 'void (*)(__attribute__((noescape)) int *)' from 'void (*)(int *)'}} |
| |
| funcptr_ee = c ? &func_ne : &func_en; |
| funcptr_nn = c ? &func_ne : &func_en; // expected-warning {{incompatible function pointer types assigning to 'void (*)(__attribute__((noescape)) int *, __attribute__((noescape)) int *)' from 'void (*)(int *, int *)'}} |
| } |