forked from OSchip/llvm-project
[OpenCL] Enable -fblocks by default for OpenCL 2.0 and above.
Reviewed as part of http://reviews.llvm.org/D20444 llvm-svn: 272720
This commit is contained in:
parent
07543a8c2d
commit
18e3fd3ad6
|
@ -7349,7 +7349,7 @@ def err_generic_sel_multi_match : Error<
|
||||||
|
|
||||||
// Blocks
|
// Blocks
|
||||||
def err_blocks_disable : Error<"blocks support disabled - compile with -fblocks"
|
def err_blocks_disable : Error<"blocks support disabled - compile with -fblocks"
|
||||||
" or pick a deployment target that supports them">;
|
" or %select{pick a deployment target that supports them|for OpenCL 2.0 or above}0">;
|
||||||
def err_block_returning_array_function : Error<
|
def err_block_returning_array_function : Error<
|
||||||
"block cannot return %select{array|function}0 type %1">;
|
"block cannot return %select{array|function}0 type %1">;
|
||||||
|
|
||||||
|
|
|
@ -1827,7 +1827,8 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
|
||||||
|
|
||||||
Opts.RTTI = Opts.CPlusPlus && !Args.hasArg(OPT_fno_rtti);
|
Opts.RTTI = Opts.CPlusPlus && !Args.hasArg(OPT_fno_rtti);
|
||||||
Opts.RTTIData = Opts.RTTI && !Args.hasArg(OPT_fno_rtti_data);
|
Opts.RTTIData = Opts.RTTI && !Args.hasArg(OPT_fno_rtti_data);
|
||||||
Opts.Blocks = Args.hasArg(OPT_fblocks);
|
Opts.Blocks = Args.hasArg(OPT_fblocks) || (Opts.OpenCL
|
||||||
|
&& Opts.OpenCLVersion >= 200);
|
||||||
Opts.BlocksRuntimeOptional = Args.hasArg(OPT_fblocks_runtime_optional);
|
Opts.BlocksRuntimeOptional = Args.hasArg(OPT_fblocks_runtime_optional);
|
||||||
Opts.Coroutines = Args.hasArg(OPT_fcoroutines);
|
Opts.Coroutines = Args.hasArg(OPT_fcoroutines);
|
||||||
Opts.Modules = Args.hasArg(OPT_fmodules);
|
Opts.Modules = Args.hasArg(OPT_fmodules);
|
||||||
|
|
|
@ -12066,7 +12066,7 @@ ExprResult Sema::ActOnBlockStmtExpr(SourceLocation CaretLoc,
|
||||||
Stmt *Body, Scope *CurScope) {
|
Stmt *Body, Scope *CurScope) {
|
||||||
// If blocks are disabled, emit an error.
|
// If blocks are disabled, emit an error.
|
||||||
if (!LangOpts.Blocks)
|
if (!LangOpts.Blocks)
|
||||||
Diag(CaretLoc, diag::err_blocks_disable);
|
Diag(CaretLoc, diag::err_blocks_disable) << LangOpts.OpenCL;
|
||||||
|
|
||||||
// Leave the expression-evaluation context.
|
// Leave the expression-evaluation context.
|
||||||
if (hasAnyUnrecoverableErrorsInThisFunction())
|
if (hasAnyUnrecoverableErrorsInThisFunction())
|
||||||
|
|
|
@ -3811,7 +3811,7 @@ static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state,
|
||||||
case DeclaratorChunk::BlockPointer:
|
case DeclaratorChunk::BlockPointer:
|
||||||
// If blocks are disabled, emit an error.
|
// If blocks are disabled, emit an error.
|
||||||
if (!LangOpts.Blocks)
|
if (!LangOpts.Blocks)
|
||||||
S.Diag(DeclType.Loc, diag::err_blocks_disable);
|
S.Diag(DeclType.Loc, diag::err_blocks_disable) << LangOpts.OpenCL;
|
||||||
|
|
||||||
// Handle pointer nullability.
|
// Handle pointer nullability.
|
||||||
inferPointerNullability(SimplePointerKind::BlockPointer,
|
inferPointerNullability(SimplePointerKind::BlockPointer,
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
// RUN: %clang_cc1 %s -verify -fsyntax-only
|
||||||
|
// RUN: %clang_cc1 %s -verify -fsyntax-only -cl-std=CL1.1
|
||||||
|
// RUN: %clang_cc1 %s -verify -fsyntax-only -cl-std=CL1.2
|
||||||
|
// RUN: %clang_cc1 %s -verify -fsyntax-only -cl-std=CL2.0
|
||||||
|
// RUN: %clang_cc1 %s -verify -fsyntax-only -fblocks -DBLOCKS
|
||||||
|
// RUN: %clang_cc1 %s -verify -fsyntax-only -cl-std=CL1.1 -fblocks -DBLOCKS
|
||||||
|
// RUN: %clang_cc1 %s -verify -fsyntax-only -cl-std=CL1.2 -fblocks -DBLOCKS
|
||||||
|
// RUN: %clang_cc1 %s -triple amdgcn--amdhsa -x c -std=c99 -verify -fsyntax-only
|
||||||
|
|
||||||
|
void f(void (^g)(void)) {
|
||||||
|
#ifdef __OPENCL_C_VERSION__
|
||||||
|
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0 && !defined(BLOCKS)
|
||||||
|
// expected-error@-3{{blocks support disabled - compile with -fblocks or for OpenCL 2.0 or above}}
|
||||||
|
#else
|
||||||
|
// expected-no-diagnostics
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
// expected-error@-8{{blocks support disabled - compile with -fblocks or pick a deployment target that supports them}}
|
||||||
|
#endif
|
||||||
|
}
|
Loading…
Reference in New Issue