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