summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaOpenCL/func.cl
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/SemaOpenCL/func.cl')
-rw-r--r--clang/test/SemaOpenCL/func.cl26
1 files changed, 26 insertions, 0 deletions
diff --git a/clang/test/SemaOpenCL/func.cl b/clang/test/SemaOpenCL/func.cl
new file mode 100644
index 00000000000..ea3bab6c514
--- /dev/null
+++ b/clang/test/SemaOpenCL/func.cl
@@ -0,0 +1,26 @@
+// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only
+
+// Variadic functions
+void vararg_f(int, ...); // expected-error {{invalid prototype, variadic arguments are not allowed in OpenCL}}
+void __vararg_f(int, ...);
+typedef void (*vararg_fptr_t)(int, ...); // expected-error {{invalid prototype, variadic arguments are not allowed in OpenCL}}
+int printf(__constant const char *st, ...); // expected-error {{invalid prototype, variadic arguments are not allowed in OpenCL}}
+
+//Function pointer
+void foo(void*);
+
+void bar()
+{
+ // declaring a function pointer is an error
+ void (*fptr)(int); // expected-error{{pointers to functions are not allowed}}
+
+ // taking the address of a function is an error
+ foo((void*)foo); // expected-error{{taking address of function is not allowed}}
+ foo(&foo); // expected-error{{taking address of function is not allowed}}
+
+ // initializing an array with the address of functions is an error
+ void* vptrarr[2] = {foo, &foo}; // expected-error{{taking address of function is not allowed}} expected-error{{taking address of function is not allowed}}
+
+ // just calling a function is correct
+ foo(0);
+}
OpenPOWER on IntegriCloud