Clang Project

clang_source_code/test/SemaOpenCL/invalid-pipes-cl2.0.cl
1// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -cl-std=CL2.0
2
3global pipe int gp;            // expected-error {{type '__global read_only pipe int' can only be used as a function parameter in OpenCL}}
4global reserve_id_t rid;          // expected-error {{the '__global reserve_id_t' type cannot be used to declare a program scope variable}}
5
6extern pipe write_only int get_pipe(); // expected-error {{type '__global write_only pipe int (void)' can only be used as a function parameter in OpenCL}}
7
8kernel void test_invalid_reserved_id(reserve_id_t ID) { // expected-error {{'reserve_id_t' cannot be used as the type of a kernel parameter}}
9}
10
11void test1(pipe int *p) {// expected-error {{pipes packet types cannot be of reference type}}
12}
13void test2(pipe p) {// expected-error {{missing actual type specifier for pipe}}
14}
15void test3(int pipe p) {// expected-error {{cannot combine with previous 'int' declaration specifier}}
16}
17void test4() {
18  pipe int p; // expected-error {{type 'read_only pipe int' can only be used as a function parameter}}
19  //TODO: fix parsing of this pipe int (*p);
20}
21
22void test5(pipe int p) {
23  p+p; // expected-error{{invalid operands to binary expression ('read_only pipe int' and 'read_only pipe int')}}
24  p=p; // expected-error{{invalid operands to binary expression ('read_only pipe int' and 'read_only pipe int')}}
25  &p; // expected-error{{invalid argument type 'read_only pipe int' to unary expression}}
26  *p; // expected-error{{invalid argument type 'read_only pipe int' to unary expression}}
27}
28
29typedef pipe int pipe_int_t;
30pipe_int_t test6() {} // expected-error{{declaring function return value of type 'pipe_int_t' (aka 'read_only pipe int') is not allowed}}
31
32bool test_id_comprision(void) {
33  reserve_id_t id1, id2;
34  return (id1 == id2);          // expected-error {{invalid operands to binary expression ('reserve_id_t' and 'reserve_id_t')}}
35}
36
37// Tests ASTContext::mergeTypes rejects this.
38int f(pipe int x, int y); // expected-note {{previous declaration is here}}
39int f(x, y) // expected-error {{conflicting types for 'f}}
40pipe short x;
41int y;
42{
43    return y;
44}
45