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