<div dir="ltr">Reverted in <span style="font-size:12.8px">rL290173.</span></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Dec 20, 2016 at 11:02 AM, Daniel Jasper <span dir="ltr"><<a href="mailto:djasper@google.com" target="_blank">djasper@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><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><span style="font-size:12.8px">cpp<wbr>: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><span style="font-size:12.8px">RewriteObjCFoundation<wbr>API.cpp:</span><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><span style="font-size:12.8px">ExprEn<wbr>gineC.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="HOEnZb"><div class="h5"><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-pr<wbr>oject?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/D2756<wbr>9</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/Op<wbr>erationKinds.def<br>
cfe/trunk/include/clang/Sema/I<wbr>nitialization.h<br>
cfe/trunk/include/clang/Sema/O<wbr>verload.h<br>
cfe/trunk/lib/AST/ExprConstant<wbr>.cpp<br>
cfe/trunk/lib/CodeGen/CGExprAg<wbr>g.cpp<br>
cfe/trunk/lib/CodeGen/CGExprCo<wbr>mplex.cpp<br>
cfe/trunk/lib/CodeGen/CGExprSc<wbr>alar.cpp<br>
cfe/trunk/lib/Sema/SemaExpr.cp<wbr>p<br>
cfe/trunk/lib/Sema/SemaExprCXX<wbr>.cpp<br>
cfe/trunk/lib/Sema/SemaInit.cp<wbr>p<br>
cfe/trunk/lib/Sema/SemaOverloa<wbr>d.cpp<br>
<br>
Modified: cfe/trunk/include/clang/AST/Op<wbr>erationKinds.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-pr<wbr>oject/cfe/trunk/include/clang/<wbr>AST/OperationKinds.def?rev=<wbr>290171&r1=290170&r2=290171&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/include/clang/AST/Op<wbr>erationKinds.def (original)<br>
+++ cfe/trunk/include/clang/AST/Op<wbr>erationKinds.def Tue Dec 20 03:15:21 2016<br>
@@ -321,6 +321,9 @@ CAST_OPERATION(BuiltinFnToFnPt<wbr>r)<br>
// Convert a zero value for OpenCL event_t initialization.<br>
CAST_OPERATION(<wbr>ZeroToOCLEvent)<br>
<br>
+// Convert a zero value for OpenCL queue_t initialization.<br>
+CAST_OPERATION(ZeroToOCLQueue<wbr>)<br>
+<br>
// Convert a pointer to a different address space.<br>
CAST_OPERATION(AddressSpaceCo<wbr>nversion)<br>
<br>
<br>
Modified: cfe/trunk/include/clang/Sema/I<wbr>nitialization.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-pr<wbr>oject/cfe/trunk/include/clang/<wbr>Sema/Initialization.h?rev=<wbr>290171&r1=290170&r2=290171&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/include/clang/Sema/I<wbr>nitialization.h (original)<br>
+++ cfe/trunk/include/clang/Sema/I<wbr>nitialization.h Tue Dec 20 03:15:21 2016<br>
@@ -751,6 +751,8 @@ public:<br>
SK_StdInitializerListConstruc<wbr>torCall,<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(QualTy<wbr>pe T, InitListExpr *Syntactic);<br>
<br>
Modified: cfe/trunk/include/clang/Sema/O<wbr>verload.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-pr<wbr>oject/cfe/trunk/include/clang/<wbr>Sema/Overload.h?rev=290171&r1=<wbr>290170&r2=290171&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/include/clang/Sema/O<wbr>verload.h (original)<br>
+++ cfe/trunk/include/clang/Sema/O<wbr>verload.h Tue Dec 20 03:15:21 2016<br>
@@ -83,6 +83,7 @@ namespace clang {<br>
ICK_TransparentUnionConversio<wbr>n, ///< 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_Conv<wbr>ersion, ///< C-only conversion between pointers<br>
/// with incompatible types<br>
<br>
Modified: cfe/trunk/lib/AST/ExprConstant<wbr>.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-pr<wbr>oject/cfe/trunk/lib/AST/ExprCo<wbr>nstant.cpp?rev=290171&r1=<wbr>290170&r2=290171&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/AST/ExprConstant<wbr>.cpp (original)<br>
+++ cfe/trunk/lib/AST/ExprConstant<wbr>.cpp Tue Dec 20 03:15:21 2016<br>
@@ -8340,6 +8340,7 @@ bool IntExprEvaluator::VisitCastExp<wbr>r(con<br>
case CK_IntegralComplexToFloatingCo<wbr>mplex:<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::VisitCas<wbr>tExpr<br>
case CK_CopyAndAutoreleaseBlockObje<wbr>ct:<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/CGExprAg<wbr>g.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-pr<wbr>oject/cfe/trunk/lib/CodeGen/CG<wbr>ExprAgg.cpp?rev=290171&r1=2901<wbr>70&r2=290171&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/CodeGen/CGExprAg<wbr>g.cpp (original)<br>
+++ cfe/trunk/lib/CodeGen/CGExprAg<wbr>g.cpp Tue Dec 20 03:15:21 2016<br>
@@ -751,6 +751,7 @@ void AggExprEmitter::VisitCastExpr(<wbr>CastE<br>
case CK_CopyAndAutoreleaseBlockObje<wbr>ct:<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/CGExprCo<wbr>mplex.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-pr<wbr>oject/cfe/trunk/lib/CodeGen/CG<wbr>ExprComplex.cpp?rev=290171&r1=<wbr>290170&r2=290171&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/CodeGen/CGExprCo<wbr>mplex.cpp (original)<br>
+++ cfe/trunk/lib/CodeGen/CGExprCo<wbr>mplex.cpp Tue Dec 20 03:15:21 2016<br>
@@ -480,6 +480,7 @@ ComplexPairTy ComplexExprEmitter::EmitCa<br>
case CK_CopyAndAutoreleaseBlockObje<wbr>ct:<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/CGExprSc<wbr>alar.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-pr<wbr>oject/cfe/trunk/lib/CodeGen/CG<wbr>ExprScalar.cpp?rev=290171&r1=<wbr>290170&r2=290171&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/CodeGen/CGExprSc<wbr>alar.cpp (original)<br>
+++ cfe/trunk/lib/CodeGen/CGExprSc<wbr>alar.cpp Tue Dec 20 03:15:21 2016<br>
@@ -1593,6 +1593,11 @@ Value *ScalarExprEmitter::VisitCastE<wbr>xpr(<br>
return llvm::Constant::getNullValue(C<wbr>onvertType(DestTy));<br>
}<br>
<br>
+ case CK_ZeroToOCLQueue: {<br>
+ assert(DestTy->isQueueT() && "CK_ZeroToOCLQueue cast on non queue_t type");<br>
+ return llvm::Constant::getNullValue(C<wbr>onvertType(DestTy));<br>
+ }<br>
+<br>
case CK_IntToOCLSampler:<br>
return CGF.CGM.createOpenCLIntToSampl<wbr>erConversion(E, CGF);<br>
<br>
<br>
Modified: cfe/trunk/lib/Sema/SemaExpr.cp<wbr>p<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-pr<wbr>oject/cfe/trunk/lib/Sema/SemaE<wbr>xpr.cpp?rev=290171&r1=290170&<wbr>r2=290171&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/Sema/SemaExpr.cp<wbr>p (original)<br>
+++ cfe/trunk/lib/Sema/SemaExpr.cp<wbr>p Tue Dec 20 03:15:21 2016<br>
@@ -9635,6 +9635,18 @@ QualType Sema::CheckCompareOperands(Exp<wbr>r<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/SemaExprCXX<wbr>.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-pr<wbr>oject/cfe/trunk/lib/Sema/SemaE<wbr>xprCXX.cpp?rev=290171&r1=29017<wbr>0&r2=290171&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/Sema/SemaExprCXX<wbr>.cpp (original)<br>
+++ cfe/trunk/lib/Sema/SemaExprCXX<wbr>.cpp Tue Dec 20 03:15:21 2016<br>
@@ -3878,6 +3878,12 @@ Sema::PerformImplicitConversio<wbr>n(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.cp<wbr>p<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-pr<wbr>oject/cfe/trunk/lib/Sema/SemaI<wbr>nit.cpp?rev=290171&r1=290170&<wbr>r2=290171&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/Sema/SemaInit.cp<wbr>p (original)<br>
+++ cfe/trunk/lib/Sema/SemaInit.cp<wbr>p Tue Dec 20 03:15:21 2016<br>
@@ -3077,6 +3077,7 @@ void InitializationSequence::Step::<wbr>Destr<br>
case SK_StdInitializerListConstruct<wbr>orCall:<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::AddOCL<wbr>ZeroE<br>
Steps.push_back(S);<br>
}<br>
<br>
+void InitializationSequence::AddOCL<wbr>ZeroQueueStep(QualType T) {<br>
+ Step S;<br>
+ S.Kind = SK_OCLZeroQueue;<br>
+ S.Type = T;<br>
+ Steps.push_back(S);<br>
+}<br>
+<br>
void InitializationSequence::Rewrap<wbr>ReferenceInitList(QualType T,<br>
InitListExpr *Syntactic) {<br>
assert(Syntactic-><wbr>getNumInits() == 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->isIntegerConstan<wbr>tExpr(S.getASTContext()) ||<br>
+ (Initializer->EvaluateKnownCon<wbr>stInt(S.getASTContext()) != 0))<br>
+ return false;<br>
+<br>
+ Sequence.AddOCLZeroQueueStep(D<wbr>estType);<br>
+ return true;<br>
+}<br>
+<br>
InitializationSequence::Initi<wbr>alizationSequence(Sema &S,<br>
const InitializedEntity &Entity,<br>
const InitializationKind &Kind,<br>
@@ -5292,6 +5314,9 @@ void InitializationSequence::Initia<wbr>lizeF<br>
if (TryOCLZeroEventInitialization<wbr>(S, *this, DestType, Initializer))<br>
return;<br>
<br>
+ if (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::Perfor<wbr>m(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::Perfor<wbr>m(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.ge<wbr>t(), Step->Type,<br>
+ CK_ZeroToOCLQueue,<br>
+ CurInit.get()->getValueKind())<wbr>;<br>
+ break;<br>
+ }<br>
}<br>
}<br>
<br>
@@ -8041,6 +8076,10 @@ void InitializationSequence::dump(r<wbr>aw_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/SemaOverloa<wbr>d.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-pr<wbr>oject/cfe/trunk/lib/Sema/SemaO<wbr>verload.cpp?rev=290171&r1=<wbr>290170&r2=290171&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/Sema/SemaOverloa<wbr>d.cpp (original)<br>
+++ cfe/trunk/lib/Sema/SemaOverloa<wbr>d.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(<wbr>S.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-pr<wbr>oject/cfe/trunk/test/CodeGenOp<wbr>enCL/null_queue.cl?rev=290171&<wbr>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-pr<wbr>oject/cfe/trunk/test/SemaOpenC<wbr>L/null_queue.cl?rev=290171&<wbr>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-pr<wbr>oject/cfe/trunk/test/SemaOpenC<wbr>L/queue_t_overload.cl?rev=<wbr>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" target="_blank">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>
</div></div></blockquote></div><br></div>