This triggers a bunch of warnings: lib/AST/Expr.cpp:1519:11: error: enumeration value 'CK_ZeroToOCLQueue' not handled in switch [-Werror,-Wswitch] lib/CodeGen/CGExprConstant.cpp:654:13: error: enumeration value 'CK_ZeroToOCLQueue' not handled in switch [-Werror,-Wswitch] lib/Edit/RewriteObjCFoundationAPI.cpp:1000:13: error: enumeration value 'CK_ZeroToOCLQueue' not handled in switch [-Werror,-Wswitch] lib/StaticAnalyzer/Core/ExprEngineC.cpp:314:13: error: enumeration value 'CK_ZeroToOCLQueue' not handled in switch [-Werror,-Wswitch]
Can you please fix or roll back quickly? On Tue, Dec 20, 2016 at 10:15 AM, Egor Churaev via cfe-commits < cfe-commits@lists.llvm.org> wrote: > Author: echuraev > Date: Tue Dec 20 03:15:21 2016 > New Revision: 290171 > > URL: http://llvm.org/viewvc/llvm-project?rev=290171&view=rev > Log: > [OpenCL] Enabling the usage of CLK_NULL_QUEUE as compare operand. > > Summary: Enabling the compression of CLK_NULL_QUEUE to variable of type > queue_t. > > Reviewers: Anastasia > > Subscribers: cfe-commits, yaxunl, bader > > Differential Revision: https://reviews.llvm.org/D27569 > > Added: > cfe/trunk/test/CodeGenOpenCL/null_queue.cl > cfe/trunk/test/SemaOpenCL/null_queue.cl > cfe/trunk/test/SemaOpenCL/queue_t_overload.cl > Modified: > cfe/trunk/include/clang/AST/OperationKinds.def > cfe/trunk/include/clang/Sema/Initialization.h > cfe/trunk/include/clang/Sema/Overload.h > cfe/trunk/lib/AST/ExprConstant.cpp > cfe/trunk/lib/CodeGen/CGExprAgg.cpp > cfe/trunk/lib/CodeGen/CGExprComplex.cpp > cfe/trunk/lib/CodeGen/CGExprScalar.cpp > cfe/trunk/lib/Sema/SemaExpr.cpp > cfe/trunk/lib/Sema/SemaExprCXX.cpp > cfe/trunk/lib/Sema/SemaInit.cpp > cfe/trunk/lib/Sema/SemaOverload.cpp > > Modified: cfe/trunk/include/clang/AST/OperationKinds.def > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/ > clang/AST/OperationKinds.def?rev=290171&r1=290170&r2=290171&view=diff > ============================================================ > ================== > --- cfe/trunk/include/clang/AST/OperationKinds.def (original) > +++ cfe/trunk/include/clang/AST/OperationKinds.def Tue Dec 20 03:15:21 > 2016 > @@ -321,6 +321,9 @@ CAST_OPERATION(BuiltinFnToFnPtr) > // Convert a zero value for OpenCL event_t initialization. > CAST_OPERATION(ZeroToOCLEvent) > > +// Convert a zero value for OpenCL queue_t initialization. > +CAST_OPERATION(ZeroToOCLQueue) > + > // Convert a pointer to a different address space. > CAST_OPERATION(AddressSpaceConversion) > > > Modified: cfe/trunk/include/clang/Sema/Initialization.h > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/ > clang/Sema/Initialization.h?rev=290171&r1=290170&r2=290171&view=diff > ============================================================ > ================== > --- cfe/trunk/include/clang/Sema/Initialization.h (original) > +++ cfe/trunk/include/clang/Sema/Initialization.h Tue Dec 20 03:15:21 2016 > @@ -751,6 +751,8 @@ public: > SK_StdInitializerListConstructorCall, > /// \brief Initialize an OpenCL sampler from an integer. > SK_OCLSamplerInit, > + /// \brief Initialize queue_t from 0. > + SK_OCLZeroQueue, > /// \brief Passing zero to a function where OpenCL event_t is > expected. > SK_OCLZeroEvent > }; > @@ -1148,6 +1150,9 @@ public: > /// constant. > void AddOCLZeroEventStep(QualType T); > > + /// \brief Add a step to initialize an OpenCL queue_t from 0. > + void AddOCLZeroQueueStep(QualType T); > + > /// \brief Add steps to unwrap a initializer list for a reference > around a > /// single element and rewrap it at the end. > void RewrapReferenceInitList(QualType T, InitListExpr *Syntactic); > > Modified: cfe/trunk/include/clang/Sema/Overload.h > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/ > clang/Sema/Overload.h?rev=290171&r1=290170&r2=290171&view=diff > ============================================================ > ================== > --- cfe/trunk/include/clang/Sema/Overload.h (original) > +++ cfe/trunk/include/clang/Sema/Overload.h Tue Dec 20 03:15:21 2016 > @@ -83,6 +83,7 @@ namespace clang { > ICK_TransparentUnionConversion, ///< Transparent Union Conversions > ICK_Writeback_Conversion, ///< Objective-C ARC writeback conversion > ICK_Zero_Event_Conversion, ///< Zero constant to event (OpenCL1.2 > 6.12.10) > + ICK_Zero_Queue_Conversion, ///< Zero constant to queue > ICK_C_Only_Conversion, ///< Conversions allowed in C, but not C++ > ICK_Incompatible_Pointer_Conversion, ///< C-only conversion between > pointers > /// with incompatible types > > Modified: cfe/trunk/lib/AST/ExprConstant.cpp > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ > ExprConstant.cpp?rev=290171&r1=290170&r2=290171&view=diff > ============================================================ > ================== > --- cfe/trunk/lib/AST/ExprConstant.cpp (original) > +++ cfe/trunk/lib/AST/ExprConstant.cpp Tue Dec 20 03:15:21 2016 > @@ -8340,6 +8340,7 @@ bool IntExprEvaluator::VisitCastExpr(con > case CK_IntegralComplexToFloatingComplex: > case CK_BuiltinFnToFnPtr: > case CK_ZeroToOCLEvent: > + case CK_ZeroToOCLQueue: > case CK_NonAtomicToAtomic: > case CK_AddressSpaceConversion: > case CK_IntToOCLSampler: > @@ -8837,6 +8838,7 @@ bool ComplexExprEvaluator::VisitCastExpr > case CK_CopyAndAutoreleaseBlockObject: > case CK_BuiltinFnToFnPtr: > case CK_ZeroToOCLEvent: > + case CK_ZeroToOCLQueue: > case CK_NonAtomicToAtomic: > case CK_AddressSpaceConversion: > case CK_IntToOCLSampler: > > Modified: cfe/trunk/lib/CodeGen/CGExprAgg.cpp > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ > CGExprAgg.cpp?rev=290171&r1=290170&r2=290171&view=diff > ============================================================ > ================== > --- cfe/trunk/lib/CodeGen/CGExprAgg.cpp (original) > +++ cfe/trunk/lib/CodeGen/CGExprAgg.cpp Tue Dec 20 03:15:21 2016 > @@ -751,6 +751,7 @@ void AggExprEmitter::VisitCastExpr(CastE > case CK_CopyAndAutoreleaseBlockObject: > case CK_BuiltinFnToFnPtr: > case CK_ZeroToOCLEvent: > + case CK_ZeroToOCLQueue: > case CK_AddressSpaceConversion: > case CK_IntToOCLSampler: > llvm_unreachable("cast kind invalid for aggregate types"); > > Modified: cfe/trunk/lib/CodeGen/CGExprComplex.cpp > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ > CGExprComplex.cpp?rev=290171&r1=290170&r2=290171&view=diff > ============================================================ > ================== > --- cfe/trunk/lib/CodeGen/CGExprComplex.cpp (original) > +++ cfe/trunk/lib/CodeGen/CGExprComplex.cpp Tue Dec 20 03:15:21 2016 > @@ -480,6 +480,7 @@ ComplexPairTy ComplexExprEmitter::EmitCa > case CK_CopyAndAutoreleaseBlockObject: > case CK_BuiltinFnToFnPtr: > case CK_ZeroToOCLEvent: > + case CK_ZeroToOCLQueue: > case CK_AddressSpaceConversion: > case CK_IntToOCLSampler: > llvm_unreachable("invalid cast kind for complex value"); > > Modified: cfe/trunk/lib/CodeGen/CGExprScalar.cpp > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ > CGExprScalar.cpp?rev=290171&r1=290170&r2=290171&view=diff > ============================================================ > ================== > --- cfe/trunk/lib/CodeGen/CGExprScalar.cpp (original) > +++ cfe/trunk/lib/CodeGen/CGExprScalar.cpp Tue Dec 20 03:15:21 2016 > @@ -1593,6 +1593,11 @@ Value *ScalarExprEmitter::VisitCastExpr( > return llvm::Constant::getNullValue(ConvertType(DestTy)); > } > > + case CK_ZeroToOCLQueue: { > + assert(DestTy->isQueueT() && "CK_ZeroToOCLQueue cast on non queue_t > type"); > + return llvm::Constant::getNullValue(ConvertType(DestTy)); > + } > + > case CK_IntToOCLSampler: > return CGF.CGM.createOpenCLIntToSamplerConversion(E, CGF); > > > Modified: cfe/trunk/lib/Sema/SemaExpr.cpp > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/ > SemaExpr.cpp?rev=290171&r1=290170&r2=290171&view=diff > ============================================================ > ================== > --- cfe/trunk/lib/Sema/SemaExpr.cpp (original) > +++ cfe/trunk/lib/Sema/SemaExpr.cpp Tue Dec 20 03:15:21 2016 > @@ -9635,6 +9635,18 @@ QualType Sema::CheckCompareOperands(Expr > return ResultTy; > } > > + if (getLangOpts().OpenCLVersion >= 200) { > + if (LHSIsNull && RHSType->isQueueT()) { > + LHS = ImpCastExprToType(LHS.get(), RHSType, CK_NullToPointer); > + return ResultTy; > + } > + > + if (LHSType->isQueueT() && RHSIsNull) { > + RHS = ImpCastExprToType(RHS.get(), LHSType, CK_NullToPointer); > + return ResultTy; > + } > + } > + > return InvalidOperands(Loc, LHS, RHS); > } > > > Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/ > SemaExprCXX.cpp?rev=290171&r1=290170&r2=290171&view=diff > ============================================================ > ================== > --- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original) > +++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Tue Dec 20 03:15:21 2016 > @@ -3878,6 +3878,12 @@ Sema::PerformImplicitConversion(Expr *Fr > From->getValueKind()).get(); > break; > > + case ICK_Zero_Queue_Conversion: > + From = ImpCastExprToType(From, ToType, > + CK_ZeroToOCLQueue, > + From->getValueKind()).get(); > + break; > + > case ICK_Lvalue_To_Rvalue: > case ICK_Array_To_Pointer: > case ICK_Function_To_Pointer: > > Modified: cfe/trunk/lib/Sema/SemaInit.cpp > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/ > SemaInit.cpp?rev=290171&r1=290170&r2=290171&view=diff > ============================================================ > ================== > --- cfe/trunk/lib/Sema/SemaInit.cpp (original) > +++ cfe/trunk/lib/Sema/SemaInit.cpp Tue Dec 20 03:15:21 2016 > @@ -3077,6 +3077,7 @@ void InitializationSequence::Step::Destr > case SK_StdInitializerListConstructorCall: > case SK_OCLSamplerInit: > case SK_OCLZeroEvent: > + case SK_OCLZeroQueue: > break; > > case SK_ConversionSequence: > @@ -3365,6 +3366,13 @@ void InitializationSequence::AddOCLZeroE > Steps.push_back(S); > } > > +void InitializationSequence::AddOCLZeroQueueStep(QualType T) { > + Step S; > + S.Kind = SK_OCLZeroQueue; > + S.Type = T; > + Steps.push_back(S); > +} > + > void InitializationSequence::RewrapReferenceInitList(QualType T, > InitListExpr > *Syntactic) { > assert(Syntactic->getNumInits() == 1 && > @@ -5030,6 +5038,20 @@ static bool TryOCLZeroEventInitializatio > return true; > } > > +static bool TryOCLZeroQueueInitialization(Sema &S, > + InitializationSequence > &Sequence, > + QualType DestType, > + Expr *Initializer) { > + if (!S.getLangOpts().OpenCL || S.getLangOpts().OpenCLVersion < 200 || > + !DestType->isQueueT() || > + !Initializer->isIntegerConstantExpr(S.getASTContext()) || > + (Initializer->EvaluateKnownConstInt(S.getASTContext()) != 0)) > + return false; > + > + Sequence.AddOCLZeroQueueStep(DestType); > + return true; > +} > + > InitializationSequence::InitializationSequence(Sema &S, > const InitializedEntity > &Entity, > const InitializationKind > &Kind, > @@ -5292,6 +5314,9 @@ void InitializationSequence::InitializeF > if (TryOCLZeroEventInitialization(S, *this, DestType, Initializer)) > return; > > + if (TryOCLZeroQueueInitialization(S, *this, DestType, Initializer)) > + return; > + > // Handle initialization in C > AddCAssignmentStep(DestType); > MaybeProduceObjCObject(S, *this, Entity); > @@ -6529,7 +6554,8 @@ InitializationSequence::Perform(Sema &S, > case SK_ProduceObjCObject: > case SK_StdInitializerList: > case SK_OCLSamplerInit: > - case SK_OCLZeroEvent: { > + case SK_OCLZeroEvent: > + case SK_OCLZeroQueue: { > assert(Args.size() == 1); > CurInit = Args[0]; > if (!CurInit.get()) return ExprError(); > @@ -7213,6 +7239,15 @@ InitializationSequence::Perform(Sema &S, > CurInit.get()->getValueKind()); > break; > } > + case SK_OCLZeroQueue: { > + assert(Step->Type->isQueueT() && > + "Event initialization on non queue type."); > + > + CurInit = S.ImpCastExprToType(CurInit.get(), Step->Type, > + CK_ZeroToOCLQueue, > + CurInit.get()->getValueKind()); > + break; > + } > } > } > > @@ -8041,6 +8076,10 @@ void InitializationSequence::dump(raw_os > case SK_OCLZeroEvent: > OS << "OpenCL event_t from zero"; > break; > + > + case SK_OCLZeroQueue: > + OS << "OpenCL queue_t from zero"; > + break; > } > > OS << " [" << S->Type.getAsString() << ']'; > > Modified: cfe/trunk/lib/Sema/SemaOverload.cpp > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/ > SemaOverload.cpp?rev=290171&r1=290170&r2=290171&view=diff > ============================================================ > ================== > --- cfe/trunk/lib/Sema/SemaOverload.cpp (original) > +++ cfe/trunk/lib/Sema/SemaOverload.cpp Tue Dec 20 03:15:21 2016 > @@ -1785,6 +1785,11 @@ static bool IsStandardConversion(Sema &S > From->EvaluateKnownConstInt(S.getASTContext()) == 0) { > SCS.Second = ICK_Zero_Event_Conversion; > FromType = ToType; > + } else if (ToType->isQueueT() && > + From->isIntegerConstantExpr(S.getASTContext()) && > + (From->EvaluateKnownConstInt(S.getASTContext()) == 0)) { > + SCS.Second = ICK_Zero_Queue_Conversion; > + FromType = ToType; > } else { > // No second conversion required. > SCS.Second = ICK_Identity; > @@ -5162,6 +5167,7 @@ static bool CheckConvertedConstantConver > case ICK_Function_Conversion: > case ICK_Integral_Promotion: > case ICK_Integral_Conversion: // Narrowing conversions are checked > elsewhere. > + case ICK_Zero_Queue_Conversion: > return true; > > case ICK_Boolean_Conversion: > > Added: cfe/trunk/test/CodeGenOpenCL/null_queue.cl > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ > CodeGenOpenCL/null_queue.cl?rev=290171&view=auto > ============================================================ > ================== > --- cfe/trunk/test/CodeGenOpenCL/null_queue.cl (added) > +++ cfe/trunk/test/CodeGenOpenCL/null_queue.cl Tue Dec 20 03:15:21 2016 > @@ -0,0 +1,18 @@ > +// RUN: %clang_cc1 -O0 -cl-std=CL2.0 -emit-llvm %s -o - | FileCheck %s > +extern queue_t get_default_queue(); > + > +bool compare() { > + return 0 == get_default_queue() && > + get_default_queue() == 0; > + // CHECK: icmp eq %opencl.queue_t* null, %{{.*}} > + // CHECK: icmp eq %opencl.queue_t* %{{.*}}, null > +} > + > +void func(queue_t q); > + > +void init() { > + queue_t q = 0; > + func(0); > + // CHECK: store %opencl.queue_t* null, %opencl.queue_t** %q > + // CHECK: call void @func(%opencl.queue_t* null) > +} > > Added: cfe/trunk/test/SemaOpenCL/null_queue.cl > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ > SemaOpenCL/null_queue.cl?rev=290171&view=auto > ============================================================ > ================== > --- cfe/trunk/test/SemaOpenCL/null_queue.cl (added) > +++ cfe/trunk/test/SemaOpenCL/null_queue.cl Tue Dec 20 03:15:21 2016 > @@ -0,0 +1,12 @@ > +// RUN: %clang_cc1 %s -cl-std=CL2.0 -verify -pedantic -fsyntax-only > +extern queue_t get_default_queue(); > + > +bool compare() { > + return 1 == get_default_queue() && // expected-error{{invalid operands > to binary expression ('int' and 'queue_t')}} > + get_default_queue() == 1; // expected-error{{invalid operands to > binary expression ('queue_t' and 'int')}} > +} > + > +void init() { > + queue_t q1 = 1; // expected-error{{initializing 'queue_t' with an > expression of incompatible type 'int'}} > + queue_t q = 0; > +} > > Added: cfe/trunk/test/SemaOpenCL/queue_t_overload.cl > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ > SemaOpenCL/queue_t_overload.cl?rev=290171&view=auto > ============================================================ > ================== > --- cfe/trunk/test/SemaOpenCL/queue_t_overload.cl (added) > +++ cfe/trunk/test/SemaOpenCL/queue_t_overload.cl Tue Dec 20 03:15:21 2016 > @@ -0,0 +1,12 @@ > +// RUN: %clang_cc1 %s -cl-std=CL2.0 -verify -pedantic -fsyntax-only > + > +void __attribute__((overloadable)) foo(queue_t, __local char *); // > expected-note {{candidate function not viable: no known conversion from > 'int' to 'queue_t' for 1st argument}} // expected-note {{candidate > function}} > +void __attribute__((overloadable)) foo(queue_t, __local float *); // > expected-note {{candidate function not viable: no known conversion from > 'int' to 'queue_t' for 1st argument}} // expected-note {{candidate > function}} > + > +void kernel ker(__local char *src1, __local float *src2, __global int > *src3) { > + queue_t q; > + foo(q, src1); > + foo(0, src2); > + foo(q, src3); // expected-error {{call to 'foo' is ambiguous}} > + foo(1, src3); // expected-error {{no matching function for call to > 'foo'}} > +} > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits