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 | |
14 | void test0(int c) { |
15 | escapefuncptr = &escapefunc; |
16 | escapefuncptr = &noescapefunc; |
17 | noescapefuncptr = &escapefunc; // expected-warning {{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-warning {{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-warning {{incompatible function pointer types assigning to 'void (*)(__attribute__((noescape)) int *, __attribute__((noescape)) int *)' from 'void (*)(int *, int *)'}} |
25 | } |
26 | |