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