|
@@ -3077,6 +3077,7 @@ void InitializationSequence::Step::Destroy() {
|
|
case SK_StdInitializerListConstructorCall:
|
|
case SK_StdInitializerListConstructorCall:
|
|
case SK_OCLSamplerInit:
|
|
case SK_OCLSamplerInit:
|
|
case SK_OCLZeroEvent:
|
|
case SK_OCLZeroEvent:
|
|
|
|
+ case SK_OCLZeroQueue:
|
|
break;
|
|
break;
|
|
|
|
|
|
case SK_ConversionSequence:
|
|
case SK_ConversionSequence:
|
|
@@ -3365,6 +3366,13 @@ void InitializationSequence::AddOCLZeroEventStep(QualType T) {
|
|
Steps.push_back(S);
|
|
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,
|
|
void InitializationSequence::RewrapReferenceInitList(QualType T,
|
|
InitListExpr *Syntactic) {
|
|
InitListExpr *Syntactic) {
|
|
assert(Syntactic->getNumInits() == 1 &&
|
|
assert(Syntactic->getNumInits() == 1 &&
|
|
@@ -5022,6 +5030,20 @@ static bool TryOCLZeroEventInitialization(Sema &S,
|
|
return true;
|
|
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,
|
|
InitializationSequence::InitializationSequence(Sema &S,
|
|
const InitializedEntity &Entity,
|
|
const InitializedEntity &Entity,
|
|
const InitializationKind &Kind,
|
|
const InitializationKind &Kind,
|
|
@@ -5284,6 +5306,9 @@ void InitializationSequence::InitializeFrom(Sema &S,
|
|
if (TryOCLZeroEventInitialization(S, *this, DestType, Initializer))
|
|
if (TryOCLZeroEventInitialization(S, *this, DestType, Initializer))
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
+ if (TryOCLZeroQueueInitialization(S, *this, DestType, Initializer))
|
|
|
|
+ return;
|
|
|
|
+
|
|
// Handle initialization in C
|
|
// Handle initialization in C
|
|
AddCAssignmentStep(DestType);
|
|
AddCAssignmentStep(DestType);
|
|
MaybeProduceObjCObject(S, *this, Entity);
|
|
MaybeProduceObjCObject(S, *this, Entity);
|
|
@@ -6521,7 +6546,8 @@ InitializationSequence::Perform(Sema &S,
|
|
case SK_ProduceObjCObject:
|
|
case SK_ProduceObjCObject:
|
|
case SK_StdInitializerList:
|
|
case SK_StdInitializerList:
|
|
case SK_OCLSamplerInit:
|
|
case SK_OCLSamplerInit:
|
|
- case SK_OCLZeroEvent: {
|
|
|
|
|
|
+ case SK_OCLZeroEvent:
|
|
|
|
+ case SK_OCLZeroQueue: {
|
|
assert(Args.size() == 1);
|
|
assert(Args.size() == 1);
|
|
CurInit = Args[0];
|
|
CurInit = Args[0];
|
|
if (!CurInit.get()) return ExprError();
|
|
if (!CurInit.get()) return ExprError();
|
|
@@ -7205,6 +7231,15 @@ InitializationSequence::Perform(Sema &S,
|
|
CurInit.get()->getValueKind());
|
|
CurInit.get()->getValueKind());
|
|
break;
|
|
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;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -8033,6 +8068,10 @@ void InitializationSequence::dump(raw_ostream &OS) const {
|
|
case SK_OCLZeroEvent:
|
|
case SK_OCLZeroEvent:
|
|
OS << "OpenCL event_t from zero";
|
|
OS << "OpenCL event_t from zero";
|
|
break;
|
|
break;
|
|
|
|
+
|
|
|
|
+ case SK_OCLZeroQueue:
|
|
|
|
+ OS << "OpenCL queue_t from zero";
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
|
|
|
|
OS << " [" << S->Type.getAsString() << ']';
|
|
OS << " [" << S->Type.getAsString() << ']';
|