Files
llvm-project/clang/test/SemaOpenCL/half.cl
Yaxun Liu 39cf40f6b4 [OpenCL] Add supported OpenCL extensions to target info.
Add supported OpenCL extensions to target info. It serves as default values to save the users of the burden setting each supported extensions and optional core features in command line.

Re-commit after fixing build error due to missing override attribute.

Differential Revision: http://reviews.llvm.org/D19484

llvm-svn: 269670
2016-05-16 17:06:34 +00:00

47 lines
1.5 KiB
Common Lisp

// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -Wno-unused-value -triple spir-unknown-unknown
#pragma OPENCL EXTENSION cl_khr_fp16 : disable
constant float f = 1.0h; // expected-error{{half precision constant requires cl_khr_fp16}}
half half_disabled(half *p, // expected-error{{declaring function return value of type 'half' is not allowed}}
half h) // expected-error{{declaring function parameter of type 'half' is not allowed}}
{
half a[2]; // expected-error{{declaring variable of type 'half [2]' is not allowed}}
half b; // expected-error{{declaring variable of type 'half' is not allowed}}
*p; // expected-error{{loading directly from pointer to type 'half' is not allowed}}
p[1]; // expected-error{{loading directly from pointer to type 'half' is not allowed}}
float c = 1.0f;
b = (half) c; // expected-error{{casting to type 'half' is not allowed}}
c = (float) 1.0h; // expected-error{{half precision constant requires cl_khr_fp16}}
b = 1.0h; // expected-error{{half precision constant requires cl_khr_fp16}}
half *allowed = &p[1];
half *allowed2 = &*p;
half *allowed3 = p + 1;
return h;
}
// Exactly the same as above but with the cl_khr_fp16 extension enabled.
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
constant half a = 1.0h;
half half_enabled(half *p, half h)
{
half a[2];
half b;
*p;
p[1];
float c = 1.0f;
b = (half) c;
c = (float) 1.0h;
b = 1.0h;
half *allowed = &p[1];
half *allowed2 = &*p;
half *allowed3 = p + 1;
return h;
}