| // 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++ |
| }; |