// 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 type cannot be qualified with address space}}