|
@@ -4536,6 +4536,14 @@ QualType TreeTransform<Derived>::TransformDecayedType(TypeLocBuilder &TLB,
|
|
return Result;
|
|
return Result;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/// Helper to deduce addr space of a pointee type in OpenCL mode.
|
|
|
|
+/// If the type is updated it will be overwritten in PointeeType param.
|
|
|
|
+static void deduceOpenCLPointeeAddrSpace(Sema &SemaRef, QualType &PointeeType) {
|
|
|
|
+ if (PointeeType.getAddressSpace() == LangAS::Default)
|
|
|
|
+ PointeeType = SemaRef.Context.getAddrSpaceQualType(PointeeType,
|
|
|
|
+ LangAS::opencl_generic);
|
|
|
|
+}
|
|
|
|
+
|
|
template<typename Derived>
|
|
template<typename Derived>
|
|
QualType TreeTransform<Derived>::TransformPointerType(TypeLocBuilder &TLB,
|
|
QualType TreeTransform<Derived>::TransformPointerType(TypeLocBuilder &TLB,
|
|
PointerTypeLoc TL) {
|
|
PointerTypeLoc TL) {
|
|
@@ -4544,6 +4552,9 @@ QualType TreeTransform<Derived>::TransformPointerType(TypeLocBuilder &TLB,
|
|
if (PointeeType.isNull())
|
|
if (PointeeType.isNull())
|
|
return QualType();
|
|
return QualType();
|
|
|
|
|
|
|
|
+ if (SemaRef.getLangOpts().OpenCL)
|
|
|
|
+ deduceOpenCLPointeeAddrSpace(SemaRef, PointeeType);
|
|
|
|
+
|
|
QualType Result = TL.getType();
|
|
QualType Result = TL.getType();
|
|
if (PointeeType->getAs<ObjCObjectType>()) {
|
|
if (PointeeType->getAs<ObjCObjectType>()) {
|
|
// A dependent pointer type 'T *' has is being transformed such
|
|
// A dependent pointer type 'T *' has is being transformed such
|
|
@@ -4582,6 +4593,9 @@ TreeTransform<Derived>::TransformBlockPointerType(TypeLocBuilder &TLB,
|
|
if (PointeeType.isNull())
|
|
if (PointeeType.isNull())
|
|
return QualType();
|
|
return QualType();
|
|
|
|
|
|
|
|
+ if (SemaRef.getLangOpts().OpenCL)
|
|
|
|
+ deduceOpenCLPointeeAddrSpace(SemaRef, PointeeType);
|
|
|
|
+
|
|
QualType Result = TL.getType();
|
|
QualType Result = TL.getType();
|
|
if (getDerived().AlwaysRebuild() ||
|
|
if (getDerived().AlwaysRebuild() ||
|
|
PointeeType != TL.getPointeeLoc().getType()) {
|
|
PointeeType != TL.getPointeeLoc().getType()) {
|
|
@@ -4611,6 +4625,9 @@ TreeTransform<Derived>::TransformReferenceType(TypeLocBuilder &TLB,
|
|
if (PointeeType.isNull())
|
|
if (PointeeType.isNull())
|
|
return QualType();
|
|
return QualType();
|
|
|
|
|
|
|
|
+ if (SemaRef.getLangOpts().OpenCL)
|
|
|
|
+ deduceOpenCLPointeeAddrSpace(SemaRef, PointeeType);
|
|
|
|
+
|
|
QualType Result = TL.getType();
|
|
QualType Result = TL.getType();
|
|
if (getDerived().AlwaysRebuild() ||
|
|
if (getDerived().AlwaysRebuild() ||
|
|
PointeeType != T->getPointeeTypeAsWritten()) {
|
|
PointeeType != T->getPointeeTypeAsWritten()) {
|