mirror of https://github.com/microsoft/clang.git
[OpenCL] Traverse vector types for ocl extensions support
Summary: Given the following kernel: __kernel void foo() { double d; double4 dd; } and cl_khr_fp64 is disabled, the compilation would fail due to the presence of 'double d', but when removed, it passes. The expectation is that extended vector types of unsupported types will also be unsupported. The patch adds the check for this scenario. Patch by: Ofir Cohen Reviewers: bader, Anastasia, AlexeySotkin, yaxunl Reviewed By: Anastasia Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D51296 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@341309 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1bc73590ad
commit
325385cbbe
|
@ -1889,6 +1889,14 @@ bool Sema::checkOpenCLDisabledTypeDeclSpec(const DeclSpec &DS, QualType QT) {
|
|||
if (auto TagT = dyn_cast<TagType>(QT.getCanonicalType().getTypePtr()))
|
||||
Decl = TagT->getDecl();
|
||||
auto Loc = DS.getTypeSpecTypeLoc();
|
||||
|
||||
// Check extensions for vector types.
|
||||
// e.g. double4 is not allowed when cl_khr_fp64 is absent.
|
||||
if (QT->isExtVectorType()) {
|
||||
auto TypePtr = QT->castAs<ExtVectorType>()->getElementType().getTypePtr();
|
||||
return checkOpenCLDisabledTypeOrDecl(TypePtr, Loc, QT, OpenCLTypeExtMap);
|
||||
}
|
||||
|
||||
if (checkOpenCLDisabledTypeOrDecl(Decl, Loc, QT, OpenCLDeclExtMap))
|
||||
return true;
|
||||
|
||||
|
|
|
@ -68,6 +68,13 @@ void f2(void) {
|
|||
double d;
|
||||
#ifdef NOFP64
|
||||
// expected-error@-2{{use of type 'double' requires cl_khr_fp64 extension to be enabled}}
|
||||
#endif
|
||||
|
||||
typedef double double4 __attribute__((ext_vector_type(4)));
|
||||
double4 d4 = {0.0f, 2.0f, 3.0f, 1.0f};
|
||||
#ifdef NOFP64
|
||||
// expected-error@-3 {{use of type 'double' requires cl_khr_fp64 extension to be enabled}}
|
||||
// expected-error@-3 {{use of type 'double4' (vector of 4 'double' values) requires cl_khr_fp64 extension to be enabled}}
|
||||
#endif
|
||||
|
||||
(void) 1.0;
|
||||
|
|
Loading…
Reference in New Issue