diff options
author | Andrew Savonichev <andrew.savonichev@intel.com> | 2018-09-17 11:19:42 +0000 |
---|---|---|
committer | Andrew Savonichev <andrew.savonichev@intel.com> | 2018-09-17 11:19:42 +0000 |
commit | 83ace12e861599f808e7dae2880c3a98f8a076f0 (patch) | |
tree | dd52f566c9974200d74c786ae4f1e43903148eb6 /clang/lib/Sema/SemaExpr.cpp | |
parent | cd488efe7e55aa3b4b36ab56ca12036b1869bfc4 (diff) | |
download | bcm5719-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.cpp | 6 |
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) |