diff options
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/SemaOpenCL/builtin.cl | 2 | ||||
-rw-r--r-- | clang/test/SemaOpenCL/func.cl (renamed from clang/test/SemaOpenCL/func_ptr.cl) | 7 | ||||
-rw-r--r-- | clang/test/SemaOpenCL/invalid-block.cl | 27 |
3 files changed, 25 insertions, 11 deletions
diff --git a/clang/test/SemaOpenCL/builtin.cl b/clang/test/SemaOpenCL/builtin.cl index d48a0c44959..c4d3a2399fe 100644 --- a/clang/test/SemaOpenCL/builtin.cl +++ b/clang/test/SemaOpenCL/builtin.cl @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only +// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -cl-std=CL1.2 // expected-no-diagnostics diff --git a/clang/test/SemaOpenCL/func_ptr.cl b/clang/test/SemaOpenCL/func.cl index abeab73a779..ea3bab6c514 100644 --- a/clang/test/SemaOpenCL/func_ptr.cl +++ b/clang/test/SemaOpenCL/func.cl @@ -1,5 +1,12 @@ // 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() diff --git a/clang/test/SemaOpenCL/invalid-block.cl b/clang/test/SemaOpenCL/invalid-block.cl index 6721d0ea234..a9eac1c2b58 100644 --- a/clang/test/SemaOpenCL/invalid-block.cl +++ b/clang/test/SemaOpenCL/invalid-block.cl @@ -31,23 +31,30 @@ void f4() { } // A block with variadic argument is not allowed. -int (^bl)(int, ...) = ^int(int I, ...) { // expected-error {{invalid block prototype, variadic arguments are not allowed in OpenCL}} +int (^bl)(int, ...) = ^int(int I, ...) { // expected-error {{invalid prototype, variadic arguments are not allowed in OpenCL}} expected-error {{invalid prototype, variadic arguments are not allowed in OpenCL}} return 0; }; +typedef int (^bl1_t)(int, ...); // expected-error {{invalid prototype, variadic arguments are not allowed in OpenCL}} // A block can't be used to declare an array -typedef int (^bl1_t)(int); +typedef int (^bl2_t)(int); void f5(int i) { - bl1_t bl1 = ^(int i) {return 1;}; - bl1_t bl2 = ^(int i) {return 2;}; - bl1_t arr[] = {bl1, bl2}; // expected-error {{array of 'bl1_t' (aka 'int (^const)(int)') type is invalid in OpenCL}} + bl2_t bl1 = ^(int i) { + return 1; + }; + bl2_t bl2 = ^(int i) { + return 2; + }; + bl2_t arr[] = {bl1, bl2}; // expected-error {{array of 'bl2_t' (aka 'int (^const)(int)') type is invalid in OpenCL}} int tmp = i ? bl1(i) // expected-error {{block type cannot be used as expression in ternary expression in OpenCL}} : bl2(i); // expected-error {{block type cannot be used as expression in ternary expression in OpenCL}} } // A block pointer type and all pointer operations are disallowed -void f6(bl1_t * bl_ptr) { // expected-error{{pointer to type '__generic bl1_t' (aka 'int (^const __generic)(int)') is invalid in OpenCL}} - bl1_t bl = ^(int i) {return 1;}; - bl1_t *p; // expected-error {{pointer to type '__generic bl1_t' (aka 'int (^const __generic)(int)') is invalid in OpenCL}} - *bl; // expected-error {{invalid argument type 'bl1_t' (aka 'int (^const)(int)') to unary expression}} - &bl; // expected-error {{invalid argument type 'bl1_t' (aka 'int (^const)(int)') to unary expression}} +void f6(bl2_t *bl_ptr) { // expected-error{{pointer to type '__generic bl2_t' (aka 'int (^const __generic)(int)') is invalid in OpenCL}} + bl2_t bl = ^(int i) { + return 1; + }; + bl2_t *p; // expected-error {{pointer to type '__generic bl2_t' (aka 'int (^const __generic)(int)') is invalid in OpenCL}} + *bl; // expected-error {{invalid argument type 'bl2_t' (aka 'int (^const)(int)') to unary expression}} + &bl; // expected-error {{invalid argument type 'bl2_t' (aka 'int (^const)(int)') to unary expression}} } |