diff --git a/clang/bindings/python/clang/cindex.py b/clang/bindings/python/clang/cindex.py index cf867bbf7d0b..48fc8b13a209 100644 --- a/clang/bindings/python/clang/cindex.py +++ b/clang/bindings/python/clang/cindex.py @@ -1887,6 +1887,7 @@ TypeKind.OBJCID = TypeKind(27) TypeKind.OBJCCLASS = TypeKind(28) TypeKind.OBJCSEL = TypeKind(29) TypeKind.FLOAT128 = TypeKind(30) +TypeKind.HALF = TypeKind(31) TypeKind.COMPLEX = TypeKind(100) TypeKind.POINTER = TypeKind(101) TypeKind.BLOCKPOINTER = TypeKind(102) diff --git a/clang/include/clang-c/Index.h b/clang/include/clang-c/Index.h index 15fde19eb974..d466fce85155 100644 --- a/clang/include/clang-c/Index.h +++ b/clang/include/clang-c/Index.h @@ -3011,8 +3011,9 @@ enum CXTypeKind { CXType_ObjCClass = 28, CXType_ObjCSel = 29, CXType_Float128 = 30, + CXType_Half = 31, CXType_FirstBuiltin = CXType_Void, - CXType_LastBuiltin = CXType_ObjCSel, + CXType_LastBuiltin = CXType_Half, CXType_Complex = 100, CXType_Pointer = 101, diff --git a/clang/test/Index/opencl-types.cl b/clang/test/Index/opencl-types.cl new file mode 100644 index 000000000000..f15bc745a80f --- /dev/null +++ b/clang/test/Index/opencl-types.cl @@ -0,0 +1,24 @@ +// RUN: c-index-test -test-print-type %s | FileCheck %s + +#pragma OPENCL EXTENSION cl_khr_fp16 : enable +#pragma OPENCL EXTENSION cl_khr_fp64 : enable + +typedef half half4 __attribute__((ext_vector_type(4))); +typedef float float4 __attribute__((ext_vector_type(4))); +typedef double double4 __attribute__((ext_vector_type(4))); + +void kernel testFloatTypes() { + half scalarHalf; + half4 vectorHalf; + float scalarFloat; + float4 vectorFloat; + double scalarDouble; + double4 vectorDouble; +} + +// CHECK: VarDecl=scalarHalf:11:8 (Definition) [type=half] [typekind=Half] [isPOD=1] +// CHECK: VarDecl=vectorHalf:12:9 (Definition) [type=half4] [typekind=Typedef] [canonicaltype=half __attribute__((ext_vector_type(4)))] [canonicaltypekind=Unexposed] [isPOD=1] +// CHECK: VarDecl=scalarFloat:13:9 (Definition) [type=float] [typekind=Float] [isPOD=1] +// CHECK: VarDecl=vectorFloat:14:10 (Definition) [type=float4] [typekind=Typedef] [canonicaltype=float __attribute__((ext_vector_type(4)))] [canonicaltypekind=Unexposed] [isPOD=1] +// CHECK: VarDecl=scalarDouble:15:10 (Definition) [type=double] [typekind=Double] [isPOD=1] +// CHECK: VarDecl=vectorDouble:16:11 (Definition) [type=double4] [typekind=Typedef] [canonicaltype=double __attribute__((ext_vector_type(4)))] [canonicaltypekind=Unexposed] [isPOD=1] diff --git a/clang/tools/libclang/CXType.cpp b/clang/tools/libclang/CXType.cpp index 2eeeba4366c8..54549ef1e3a5 100644 --- a/clang/tools/libclang/CXType.cpp +++ b/clang/tools/libclang/CXType.cpp @@ -48,6 +48,7 @@ static CXTypeKind GetBuiltinTypeKind(const BuiltinType *BT) { BTCASE(Long); BTCASE(LongLong); BTCASE(Int128); + BTCASE(Half); BTCASE(Float); BTCASE(Double); BTCASE(LongDouble); @@ -503,6 +504,7 @@ CXString clang_getTypeKindSpelling(enum CXTypeKind K) { TKIND(Long); TKIND(LongLong); TKIND(Int128); + TKIND(Half); TKIND(Float); TKIND(Double); TKIND(LongDouble);