diff options
Diffstat (limited to 'test/Parser/opencl-cxx-keywords.cl')
-rw-r--r-- | test/Parser/opencl-cxx-keywords.cl | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/test/Parser/opencl-cxx-keywords.cl b/test/Parser/opencl-cxx-keywords.cl new file mode 100644 index 000000000000..791da9361d31 --- /dev/null +++ b/test/Parser/opencl-cxx-keywords.cl @@ -0,0 +1,50 @@ +// RUN: %clang_cc1 %s -triple spir-unknown-unknown -cl-std=c++ -verify -fsyntax-only +// RUN: %clang_cc1 %s -triple spir-unknown-unknown -cl-std=c++ -verify -fsyntax-only -fexceptions -fcxx-exceptions + +// This test checks that various C++ and OpenCL C keywords are not available +// in OpenCL C++, according to OpenCL C++ 1.0 Specification Section 2.9. + +// Test that exceptions are disabled despite passing -fcxx-exceptions. +kernel void test_exceptions() { + int x; + try { + // expected-error@-1 {{cannot use 'try' with exceptions disabled}} + throw 0; + // expected-error@-1 {{cannot use 'throw' with exceptions disabled}} + } catch (int i) { + x = 41; + } +} + +// Test that only __-prefixed address space qualifiers are accepted. +struct test_address_space_qualifiers { + global int *g; + // expected-error@-1 {{unknown type name 'global'}} + // expected-error@-2 {{expected member name or ';' after declaration specifiers}} + __global int *uug; + int global; // should be fine in OpenCL C++ + + local int *l; + // expected-error@-1 {{unknown type name 'local'}} + // expected-error@-2 {{expected member name or ';' after declaration specifiers}} + __local int *uul; + int local; // should be fine in OpenCL C++ + + private int *p; + // expected-error@-1 {{expected ':'}} + __private int *uup; + int private; // 'private' is a keyword in C++14 and thus in OpenCL C++ + // expected-error@-1 {{expected member name or ';' after declaration specifiers}} + + constant int *c; + // expected-error@-1 {{unknown type name 'constant'}} + // expected-error@-2 {{expected member name or ';' after declaration specifiers}} + __constant int *uuc; + int constant; // should be fine in OpenCL C++ + + generic int *ge; + // expected-error@-1 {{unknown type name 'generic'}} + // expected-error@-2 {{expected member name or ';' after declaration specifiers}} + __generic int *uuge; + int generic; // should be fine in OpenCL C++ +}; |