// 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 *)'}} } |