While SYCL does not support __float128 for some device targets, emitting the
diagnostic in the old way prevents the compilation of host header files with
__float128 type usage and valid host code with __float128 type usage.
CUDA/OMP deferred diagnostic interface is going to be used for SYCL device.
Implemented __float128 diagnostic is a combination of CUDA/OMP deferred
diagnostic and Unavailable attribute previously used for ObjC ARC:
- If some declaration with __float128 type usage was made somewhere in the code, that is invalid in device code, so we defer this diagnostic via CUDA/OMP deferred diagnostics until we know that this code will be actually emitted for device.
- Along with this, we add the special attribute UnavailableAttr to this declaration, so if declaration was made in the host code, but used in the device code we can emit errors about it.
- Diagnostics about usage of declaration with UnavailableAttr attribute also are deferred via CUDA/OMP deferred diagnostics until we know that this code will beactually emitted for device.