Restrict the following keywords in the OpenCL C++ language mode,
according to Section 2.9 of the OpenCL C++ 1.0 Specification.
- dynamic_cast
- typeid
- register (already restricted in OpenCL C, update the diagnostic)
- thread_local
- exceptions (try/catch/throw)
- OpenCL access qualifiers
Support the __global, __local, __constant, __private, and __generic
keywords in OpenCL C++. Leave the unprefixed address space qualifiers
such as global available, i.e., do not mark them as reserved keywords
in OpenCL C++. libclcxx provides explicit address space pointer
classes such as global_ptr and global<T> that are implemented using
the __-prefixed qualifiers.
This patch is only a first stab at implementing the restrictions of
OpenCL C++ and is by no means complete. It primarily covers
restrictions that are easily caught up to Sema.
KEYNOOPENCL is dead now, I think.