summaryrefslogtreecommitdiff
path: root/test/Sema/noescape.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/Sema/noescape.c')
-rw-r--r--test/Sema/noescape.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/test/Sema/noescape.c b/test/Sema/noescape.c
new file mode 100644
index 0000000000000..39f3f6f542ac7
--- /dev/null
+++ b/test/Sema/noescape.c
@@ -0,0 +1,25 @@
+// 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 *)'}}
+}