File: opencl-cxx-keywords.cl

package info (click to toggle)
llvm-toolchain-15 1%3A15.0.6-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,554,644 kB
  • sloc: cpp: 5,922,452; ansic: 1,012,136; asm: 674,362; python: 191,568; objc: 73,855; f90: 42,327; lisp: 31,913; pascal: 11,973; javascript: 10,144; sh: 9,421; perl: 7,447; ml: 5,527; awk: 3,523; makefile: 2,520; xml: 885; cs: 573; fortran: 567
file content (52 lines) | stat: -rw-r--r-- 1,725 bytes parent folder | download | duplicates (11)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// 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}}