diff options
author | Sven van Haastregt <sven.vanhaastregt@arm.com> | 2017-05-08 09:29:06 +0000 |
---|---|---|
committer | Sven van Haastregt <sven.vanhaastregt@arm.com> | 2017-05-08 09:29:06 +0000 |
commit | 511f0b8d02ae14d243aeb81cb9e3621ba25076d4 (patch) | |
tree | 78841be850daddd623e7bcde15ef9b11d15e0af2 /clang/lib/Sema/SemaDecl.cpp | |
parent | 605b965ae5068f62dc49ae61d1bb89ef8b61b0dc (diff) | |
download | bcm5719-llvm-511f0b8d02ae14d243aeb81cb9e3621ba25076d4.tar.gz bcm5719-llvm-511f0b8d02ae14d243aeb81cb9e3621ba25076d4.zip |
[OpenCL] Check that global samplers are const
Patch by Simon Perretta.
Differential Revision: https://reviews.llvm.org/D32856
llvm-svn: 302411
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 3b831657b70..2612023f59d 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -6070,12 +6070,24 @@ NamedDecl *Sema::ActOnVariableDeclarator( } } - // OpenCL v1.2 s6.9.b p4: - // The sampler type cannot be used with the __local and __global address - // space qualifiers. - if (R->isSamplerT() && (R.getAddressSpace() == LangAS::opencl_local || - R.getAddressSpace() == LangAS::opencl_global)) { - Diag(D.getIdentifierLoc(), diag::err_wrong_sampler_addressspace); + if (R->isSamplerT()) { + // OpenCL v1.2 s6.9.b p4: + // The sampler type cannot be used with the __local and __global address + // space qualifiers. + if (R.getAddressSpace() == LangAS::opencl_local || + R.getAddressSpace() == LangAS::opencl_global) { + Diag(D.getIdentifierLoc(), diag::err_wrong_sampler_addressspace); + } + + // OpenCL v1.2 s6.12.14.1: + // A global sampler must be declared with either the constant address + // space qualifier or with the const qualifier. + if (DC->isTranslationUnit() && + !(R.getAddressSpace() == LangAS::opencl_constant || + R.isConstQualified())) { + Diag(D.getIdentifierLoc(), diag::err_opencl_nonconst_global_sampler); + D.setInvalidType(); + } } // OpenCL v1.2 s6.9.r: |