| // RUN: %clang_cc1 %s -triple spir-unknown-unknown -cl-std=clc++ -verify -fsyntax-only |
| // RUN: %clang_cc1 %s -triple spir-unknown-unknown -cl-std=clc++ -verify -fsyntax-only -fexceptions -fcxx-exceptions |
| |
| // This test checks that various C++ and OpenCL C keywords are not available |
| // in OpenCL. |
| |
| // 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; |
| __global int *uug; |
| int global; // expected-warning{{declaration does not declare anything}} |
| |
| local int *l; |
| __local int *uul; |
| int local; // expected-warning{{declaration does not declare anything}} |
| |
| private int *p; |
| __private int *uup; |
| int private; // expected-warning{{declaration does not declare anything}} |
| |
| constant int *c; |
| __constant int *uuc; |
| int constant; // expected-warning{{declaration does not declare anything}} |
| |
| generic int *ge; |
| __generic int *uuge; |
| int generic; // expected-warning{{declaration does not declare anything}} |
| }; |
| |
| // Test that 'private' can be parsed as an access qualifier and an address space too. |
| class A{ |
| private: |
| private int i; //expected-error{{field may not be qualified with an address space}} |
| }; |
| |
| private ::A i; //expected-error{{program scope variable must reside in global or constant address space}} |
| |
| void foo(private int i); |
| |
| private int bar(); //expected-error{{return value cannot be qualified with address space}} |