pxli168 added inline comments. ================ Comment at: lib/Sema/SemaExpr.cpp:6194-6203 @@ +6193,12 @@ + + incompatTy = S.Context.getPointerType( + S.Context.getAddrSpaceQualType(S.Context.VoidTy, ResultAddrSpace)); + LHS = S.ImpCastExprToType(LHS.get(), incompatTy, + (lhQual.getAddressSpace() != ResultAddrSpace) + ? CK_AddressSpaceConversion + : CK_BitCast); + RHS = S.ImpCastExprToType(RHS.get(), incompatTy, + (rhQual.getAddressSpace() != ResultAddrSpace) + ? CK_AddressSpaceConversion + : CK_BitCast); + } else { ---------------- I am quite confused by these codes. It seems in some situations you need both BitCast and AddressSpaceConversion. It seems the logic here is too complex. Maybe you can try to simplify it
================ Comment at: lib/Sema/SemaExpr.cpp:6220-6232 @@ -6186,7 +6219,15 @@ ResultTy = S.Context.getBlockPointerType(ResultTy); - else + else { + auto ResultAddrSpace = ResultTy.getQualifiers().getAddressSpace(); + LHSCastKind = lhQual.getAddressSpace() == ResultAddrSpace + ? CK_BitCast + : CK_AddressSpaceConversion; + RHSCastKind = rhQual.getAddressSpace() == ResultAddrSpace + ? CK_BitCast + : CK_AddressSpaceConversion; ResultTy = S.Context.getPointerType(ResultTy); + } - LHS = S.ImpCastExprToType(LHS.get(), ResultTy, CK_BitCast); - RHS = S.ImpCastExprToType(RHS.get(), ResultTy, CK_BitCast); + LHS = S.ImpCastExprToType(LHS.get(), ResultTy, LHSCastKind); + RHS = S.ImpCastExprToType(RHS.get(), ResultTy, RHSCastKind); return ResultTy; ---------------- Why change about block pointer? Block can not be used with ternary selection operator (?:) in OpenCL. Repository: rL LLVM http://reviews.llvm.org/D17412 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits