blob: 39f3f6f542ac75de11e43f8fb10a460159dc3e93 [file] [log] [blame]
Akira Hatanakae9744792017-09-20 06:32:45 +00001// RUN: %clang_cc1 -fsyntax-only -verify %s
2
3void escapefunc(int *);
4void noescapefunc(__attribute__((noescape)) int *);
5void (*escapefuncptr)(int *);
6void (*noescapefuncptr)(__attribute__((noescape)) int *);
7
8void func_ne(__attribute__((noescape)) int *, int *);
9void func_en(int *, __attribute__((noescape)) int *);
10
11void (*funcptr_ee)(int *, int *);
12void (*funcptr_nn)(__attribute__((noescape)) int *, __attribute__((noescape)) int *);
13
14void 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}