summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaExpr.cpp
diff options
context:
space:
mode:
authorAndrew Savonichev <andrew.savonichev@intel.com>2018-09-17 11:19:42 +0000
committerAndrew Savonichev <andrew.savonichev@intel.com>2018-09-17 11:19:42 +0000
commit83ace12e861599f808e7dae2880c3a98f8a076f0 (patch)
treedd52f566c9974200d74c786ae4f1e43903148eb6 /clang/lib/Sema/SemaExpr.cpp
parentcd488efe7e55aa3b4b36ab56ca12036b1869bfc4 (diff)
downloadbcm5719-llvm-83ace12e861599f808e7dae2880c3a98f8a076f0.tar.gz
bcm5719-llvm-83ace12e861599f808e7dae2880c3a98f8a076f0.zip
[OpenCL] Allow blocks to capture arrays in OpenCL
Summary: Patch by Egor Churaev Reviewers: Anastasia, yaxunl Reviewed By: Anastasia Subscribers: asavonic, bader, cfe-commits Differential Revision: https://reviews.llvm.org/D51722 llvm-svn: 342370
Diffstat (limited to 'clang/lib/Sema/SemaExpr.cpp')
-rw-r--r--clang/lib/Sema/SemaExpr.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 45510da0b1a..5bf7098dfa2 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -14627,8 +14627,10 @@ static bool captureInBlock(BlockScopeInfo *BSI, VarDecl *Var,
Expr *CopyExpr = nullptr;
bool ByRef = false;
- // Blocks are not allowed to capture arrays.
- if (CaptureType->isArrayType()) {
+ // Blocks are not allowed to capture arrays, excepting OpenCL.
+ // OpenCL v2.0 s1.12.5 (revision 40): arrays are captured by reference
+ // (decayed to pointers).
+ if (!S.getLangOpts().OpenCL && CaptureType->isArrayType()) {
if (BuildAndDiagnose) {
S.Diag(Loc, diag::err_ref_array_type);
S.Diag(Var->getLocation(), diag::note_previous_decl)
OpenPOWER on IntegriCloud