[cfe-dev] OpenCL2.x: Declare ndrange_t / queue_t with global address space in program scope

Chuang-Yu Cheng via cfe-dev cfe-dev at lists.llvm.org
Mon Oct 11 05:05:59 PDT 2021


Hi,

In OpenCL2.x, I think it is not legal to declare ndrange_t / queue_t
with global address space in program scope, for example:

test.cl
```c
global ndrange_t nrt;
global queue_t qt;

kernel void test(global int *a) { a[0] = 0; }
```

Given the OpenCL2.x spec states:
https://www.khronos.org/registry/OpenCL/specs/2.2/html/OpenCL_C.html

In 6.5.1. __global (or global):
"Variables defined at program scope and static variables inside a
function can also be declared in the global address space. They can be
defined with any valid OpenCL C data type except for those in Other
Built-in Data Types. In particular, such program scope variables may
be of any user-defined type, or a pointer to a user-defined type."

But I use clang-13 to compile the test case, it passes without any
warning or error:

clang-13 --target=amdgcn -cl-std=CL2.0 -S -O3 test.cl

Should we add more check in:
https://clang.llvm.org/doxygen/SemaDecl_8cpp_source.html#l06825

/// Returns true if there hasn't been any invalid type diagnosed.
static bool diagnoseOpenCLTypes(Sema &Se, VarDecl *NewVD)

Thanks,
CY


More information about the cfe-dev mailing list