break;
case ICK_Block_Pointer_Conversion: {
- From = ImpCastExprToType(From, ToType.getUnqualifiedType(), CK_BitCast,
+ QualType LHSType = Context.getCanonicalType(ToType).getUnqualifiedType();
+ QualType RHSType = Context.getCanonicalType(FromType).getUnqualifiedType();
+
+ // Assumptions based on Sema::IsBlockPointerConversion.
+ assert(isa<BlockPointerType>(LHSType) && "BlockPointerType expected");
+ assert(isa<BlockPointerType>(RHSType) && "BlockPointerType expected");
+
+ LangAS AddrSpaceL =
+ LHSType->getAs<BlockPointerType>()->getPointeeType().getAddressSpace();
+ LangAS AddrSpaceR =
+ RHSType->getAs<BlockPointerType>()->getPointeeType().getAddressSpace();
+ CastKind Kind =
+ AddrSpaceL != AddrSpaceR ? CK_AddressSpaceConversion : CK_BitCast;
+ From = ImpCastExprToType(From, ToType.getUnqualifiedType(), Kind,
VK_RValue, /*BasePath=*/nullptr, CCK).get();
break;
}