Lines Matching defs:Self

61       : Self(S), SrcExpr(src), DestType(destType),
87 Sema &Self;
125 Self.Context, Self.Context.ARCUnbridgedCastTy, CK_Dependent,
127 Self.CurFPFeatureOverrides());
156 Self.CheckCastAlign(SrcExpr.get(), DestType, OpRange);
160 assert(Self.getLangOpts().allowsNonTrivialObjCLifetimeQualifiers());
163 if (Self.ObjC().CheckObjCConversion(OpRange, DestType, src, CCK) ==
174 SrcExpr = Self.CheckPlaceholderExpr(SrcExpr.get());
198 CheckNoDeref(Op.Self, Op.SrcExpr.get()->getType(), Op.ResultType,
206 static void DiagnoseCastQual(Sema &Self, const ExprResult &SrcExpr,
220 static TryCastResult TryLValueToRValueCast(Sema &Self, Expr *SrcExpr,
225 static TryCastResult TryStaticReferenceDowncast(Sema &Self, Expr *SrcExpr,
231 static TryCastResult TryStaticPointerDowncast(Sema &Self, QualType SrcType,
237 static TryCastResult TryStaticDowncast(Sema &Self, CanQualType SrcType,
244 static TryCastResult TryStaticMemberPointerUpcast(Sema &Self, ExprResult &SrcExpr,
253 TryStaticImplicitCast(Sema &Self, ExprResult &SrcExpr, QualType DestType,
256 static TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr,
261 static TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr,
264 static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr,
268 static TryCastResult TryAddressSpaceCast(Sema &Self, ExprResult &SrcExpr,
674 CastsAwayConstness(Sema &Self, QualType SrcType, QualType DestType,
681 if (!CheckCVR && CheckObjCLifetime && !Self.Context.getLangOpts().ObjC)
693 QualType UnwrappedSrcType = Self.Context.getCanonicalType(SrcType),
694 UnwrappedDestType = Self.Context.getCanonicalType(DestType);
704 Self.Context, UnwrappedSrcType, UnwrappedDestType)) {
712 Self.Context.getUnqualifiedArrayType(UnwrappedSrcType, SrcQuals);
713 Self.Context.getUnqualifiedArrayType(UnwrappedDestType, DestQuals);
734 Self.getASTContext())) {
797 SrcExpr = Self.DefaultFunctionArrayLvalueConversion(SrcExpr.get());
799 SrcExpr = Self.CheckPlaceholderExpr(SrcExpr.get());
804 QualType DestType = Self.Context.getCanonicalType(this->DestType);
817 Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_ref_or_ptr)
827 if (Self.RequireCompleteType(OpRange.getBegin(), DestPointee,
834 Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_class)
844 QualType SrcType = Self.Context.getCanonicalType(OrigSrcType);
850 Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_ptr)
857 Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_rvalue)
865 SrcExpr = Self.CreateMaterializeTemporaryExpr(
872 if (Self.RequireCompleteType(OpRange.getBegin(), SrcPointee,
879 Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_class)
892 if (!DestPointee.isAtLeastAsQualifiedAs(SrcPointee, Self.getASTContext())) {
893 Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_qualifiers_away)
909 Self.IsDerivedFrom(OpRange.getBegin(), SrcPointee, DestPointee)) {
910 if (Self.CheckDerivedToBaseConversion(SrcPointee, DestPointee,
925 Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_polymorphic)
933 if (!Self.getLangOpts().RTTI && !DestPointee->isVoidType()) {
934 Self.Diag(OpRange.getBegin(), diag::err_no_dynamic_cast_with_fno_rtti);
940 if (!Self.getLangOpts().RTTIData) {
942 Self.getASTContext().getTargetInfo().getCXXABI().isMicrosoft();
943 bool isClangCL = Self.getDiagnostics().getDiagnosticOptions().getFormat() ==
946 Self.Diag(OpRange.getBegin(),
956 Self.MarkVTableUsed(OpRange.getBegin(), DestDecl);
972 SrcExpr = Self.DefaultFunctionArrayLvalueConversion(SrcExpr.get());
974 SrcExpr = Self.CheckPlaceholderExpr(SrcExpr.get());
979 auto TCR = TryConstCast(Self, SrcExpr, DestType, /*CStyle*/ false, msg);
981 Self.Diag(OpRange.getBegin(), msg) << CT_Const
991 TryAddressSpaceCast(Self, SrcExpr, DestType, /*CStyle*/ false, msg, Kind);
993 Self.Diag(OpRange.getBegin(), msg)
1002 static void DiagnoseReinterpretUpDownCast(Sema &Self, const Expr *SrcExpr,
1061 Self.Context.getASTRecordLayout(Class);
1085 Self.Diag(BeginLoc, diag::warn_reinterpret_different_from_static)
1088 Self.Diag(BeginLoc, diag::note_reinterpret_updowncast_use_static)
1108 static unsigned int checkCastFunctionType(Sema &Self, const ExprResult &SrcExpr,
1114 if (!Self.Diags.isIgnored(ID, SrcExpr.get()->getExprLoc())) {
1139 if (Self.Context.hasSameType(SrcFTy, DstFTy))
1160 Self.Context))
1187 DstFPTy->getParamType(i), Self.Context))
1200 SrcExpr = Self.DefaultFunctionArrayLvalueConversion(SrcExpr.get());
1208 TryReinterpretCast(Self, SrcExpr, DestType,
1213 if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {
1215 Self.Diag(OpRange.getBegin(), diag::err_bad_reinterpret_cast_overload)
1218 Self.NoteAllOverloadCandidates(SrcExpr.get());
1221 diagnoseBadCast(Self, msg, CT_Reinterpret, OpRange, SrcExpr.get(),
1227 if (Self.getLangOpts().allowsNonTrivialObjCLifetimeQualifiers())
1229 DiagnoseReinterpretUpDownCast(Self, SrcExpr.get(), DestType, OpRange);
1231 if (unsigned DiagID = checkCastFunctionType(Self, SrcExpr, DestType))
1232 Self.Diag(OpRange.getBegin(), DiagID)
1259 Self.ResolveAndFixSingleFunctionTemplateSpecialization(SrcExpr,
1267 SrcExpr = Self.IgnoredValueConversions(SrcExpr.get());
1273 SrcExpr = Self.DefaultFunctionArrayLvalueConversion(SrcExpr.get());
1280 TryStaticCast(Self, SrcExpr, DestType, CheckedConversionKind::OtherCast,
1285 if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {
1287 Self.Diag(OpRange.getBegin(), diag::err_bad_static_cast_overload)
1290 Self.NoteAllOverloadCandidates(SrcExpr.get());
1292 diagnoseBadCast(Self, msg, CT_Static, OpRange, SrcExpr.get(), DestType,
1300 if (Self.getLangOpts().allowsNonTrivialObjCLifetimeQualifiers())
1321 static TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr,
1350 tcr = TryStaticReferenceDowncast(Self, SrcExpr.get(), DestType, CStyle,
1358 tcr = TryLValueToRValueCast(Self, SrcExpr.get(), DestType, CStyle, Kind,
1365 tcr = TryStaticImplicitCast(Self, SrcExpr, DestType, CCK, OpRange, msg,
1382 QualType SrcType = Self.Context.getCanonicalType(SrcExpr.get()->getType());
1392 } else if (DestType->isIntegralType(Self.Context)) {
1411 if (Self.RequireCompleteType(OpRange.getBegin(), DestType,
1433 tcr = TryStaticPointerDowncast(Self, SrcType, DestType, CStyle, OpRange, msg,
1441 tcr = TryStaticMemberPointerUpcast(Self, SrcExpr, SrcType, DestType, CStyle,
1467 Self.getASTContext())) {
1480 if (!CStyle && Self.getLangOpts().MSVCCompat &&
1482 Self.Diag(OpRange.getBegin(), diag::ext_ms_cast_fn_obj) << OpRange;
1509 Self.ObjC().CheckTollFreeBridgeStaticCast(DestType, SrcExpr.get(), Kind))
1521 if (Self.CheckMatrixCast(OpRange, DestType, SrcType, Kind)) {
1533 TryCastResult TryLValueToRValueCast(Sema &Self, Expr *SrcExpr,
1558 Sema::ReferenceCompareResult RefResult = Self.CompareReferenceRelationship(
1575 if (!Self.IsDerivedFrom(SrcExpr->getBeginLoc(), SrcExpr->getType(),
1579 Self.BuildBasePathArray(Paths, BasePath);
1588 TryStaticReferenceDowncast(Sema &Self, Expr *SrcExpr, QualType DestType,
1617 return TryStaticDowncast(Self,
1618 Self.Context.getCanonicalType(SrcExpr->getType()),
1619 Self.Context.getCanonicalType(DestPointee), CStyle,
1626 TryStaticPointerDowncast(Sema &Self, QualType SrcType, QualType DestType,
1649 return TryStaticDowncast(Self,
1650 Self.Context.getCanonicalType(SrcPointer->getPointeeType()),
1651 Self.Context.getCanonicalType(DestPointer->getPointeeType()),
1660 TryStaticDowncast(Sema &Self, CanQualType SrcType, CanQualType DestType,
1665 if (!Self.isCompleteType(OpRange.getBegin(), SrcType) ||
1666 !Self.isCompleteType(OpRange.getBegin(), DestType))
1676 if (!Self.IsDerivedFrom(OpRange.getBegin(), DestType, SrcType, Paths)) {
1700 !DestType.isAtLeastAsQualifiedAs(SrcType, Self.getASTContext())) {
1713 Self.IsDerivedFrom(OpRange.getBegin(), DestType, SrcType, Paths);
1728 Self.Diag(OpRange.getBegin(), diag::err_ambiguous_base_to_derived_cast)
1738 Self.Diag(OpRange.getBegin(), diag::err_static_downcast_via_virtual)
1745 switch (Self.CheckBaseClassAccess(OpRange.getBegin(),
1760 Self.BuildBasePathArray(Paths, BasePath);
1773 TryStaticMemberPointerUpcast(Sema &Self, ExprResult &SrcExpr, QualType SrcType,
1784 if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {
1786 = Self.ResolveAddressOfOverloadedFunction(SrcExpr.get(), DestType, false,
1789 SrcType = Self.Context.getMemberPointerType(Fn->getType(),
1790 Self.Context.getTypeDeclType(M->getParent()).getTypePtr());
1803 if (Self.Context.getTargetInfo().getCXXABI().isMicrosoft()) {
1804 (void)Self.isCompleteType(OpRange.getBegin(), SrcType);
1805 (void)Self.isCompleteType(OpRange.getBegin(), DestType);
1809 if (!Self.Context.hasSameUnqualifiedType(SrcMemPtr->getPointeeType(),
1818 if (!Self.IsDerivedFrom(OpRange.getBegin(), SrcClass, DestClass, Paths))
1822 if (Paths.isAmbiguous(Self.Context.getCanonicalType(DestClass))) {
1826 Self.IsDerivedFrom(OpRange.getBegin(), SrcClass, DestClass, Paths);
1829 std::string PathDisplayStr = Self.getAmbiguousPathsDisplayString(Paths);
1830 Self.Diag(OpRange.getBegin(), diag::err_ambiguous_memptr_conv)
1837 Self.Diag(OpRange.getBegin(), diag::err_memptr_conv_via_virtual)
1844 switch (Self.CheckBaseClassAccess(OpRange.getBegin(),
1864 FunctionDecl *Fn = Self.ResolveAddressOfOverloadedFunction(SrcExpr.get(),
1873 SrcExpr = Self.FixOverloadedFunctionReference(SrcExpr, FoundOverload, Fn);
1880 Self.BuildBasePathArray(Paths, BasePath);
1890 TryCastResult TryStaticImplicitCast(Sema &Self, ExprResult &SrcExpr,
1896 if (Self.RequireCompleteType(OpRange.getBegin(), DestType,
1898 Self.RequireNonAbstractType(OpRange.getBegin(), DestType,
1918 InitializationSequence InitSeq(Self, Entity, InitKind, SrcExprRaw);
1930 ExprResult Result = InitSeq.Perform(Self, Entity, InitKind, SrcExprRaw);
1947 static TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr,
1950 DestType = Self.Context.getCanonicalType(DestType);
1997 DestType = Self.Context.getPointerType(DestTypeTmp->getPointeeType());
1998 SrcType = Self.Context.getPointerType(SrcType);
2032 if (!Self.Context.hasCvrSimilarType(SrcType, DestType))
2038 SrcExpr = Self.CreateMaterializeTemporaryExpr(SrcExpr.get()->getType(),
2104 static void DiagnoseCastOfObjCSEL(Sema &Self, const ExprResult &SrcExpr,
2107 if (Self.Context.hasSameType(SrcType, DestType))
2115 Self.Diag(SrcExpr.get()->getExprLoc(),
2123 static void DiagnoseCallingConvCast(Sema &Self, const ExprResult &SrcExpr,
2128 if (Self.Context.hasSameType(SrcType, DstType) ||
2157 CallingConv DefaultCC = Self.getASTContext().getDefaultCallingConvention(
2165 Self.Diag(OpRange.getBegin(), diag::warn_cast_calling_conv)
2171 if (Self.Diags.isIgnored(diag::warn_cast_calling_conv, OpRange.getBegin()))
2179 Preprocessor &PP = Self.getPreprocessor();
2183 if (Self.getLangOpts().MicrosoftExt) {
2187 AttrTokens.push_back(II->isKeyword(Self.getLangOpts())
2197 AttrTokens.push_back(II->isKeyword(Self.getLangOpts())
2207 Self.Diag(NameLoc, diag::note_change_calling_conv_fixit)
2213 Sema &Self) {
2219 if (CStyle && SrcType->isIntegralType(Self.Context)
2222 && !SrcExpr->isIntegerConstantExpr(Self.Context)
2223 && Self.Context.getTypeSize(DestType) >
2224 Self.Context.getTypeSize(SrcType)) {
2233 Self.Diag(OpRange.getBegin(), Diag) << SrcType << DestType << OpRange;
2237 static bool fixOverloadedReinterpretCastExpr(Sema &Self, QualType DestType,
2248 if (Self.ResolveAndFixSingleFunctionTemplateSpecialization(
2259 if (!Self.resolveAndFixAddressOfSingleOverloadCandidate(
2265 static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr,
2272 DestType = Self.Context.getCanonicalType(DestType);
2277 if (SrcType == Self.Context.OverloadTy) {
2279 if (!fixOverloadedReinterpretCastExpr(Self, DestType, FixedExpr))
2296 Self.CheckCompatibleReinterpretCast(SrcType, DestType,
2321 Self.Diag(OpRange.getBegin(), diag::err_bad_reinterpret_cast_reference)
2329 DestType = Self.Context.getPointerType(DestTypeTmp->getPointeeType());
2330 SrcType = Self.Context.getPointerType(SrcType);
2336 SrcType = Self.Context.getCanonicalType(SrcType);
2349 if (Self.Context.getTargetInfo().getCXXABI().isMicrosoft()) {
2352 (void)Self.isCompleteType(OpRange.getBegin(), SrcType);
2353 (void)Self.isCompleteType(OpRange.getBegin(), DestType);
2357 if (Self.Context.getTypeSize(DestMemPtr) !=
2358 Self.Context.getTypeSize(SrcMemPtr)) {
2368 CastsAwayConstness(Self, SrcType, DestType, /*CheckCVR=*/!CStyle,
2379 if (SrcType->isNullPtrType() && DestType->isIntegralType(Self.Context)) {
2384 if (Self.Context.getTypeSize(SrcType) >
2385 Self.Context.getTypeSize(DestType)) {
2399 if (Self.isValidSveBitcast(SrcType, DestType)) {
2405 if (Self.RISCV().isValidRVVBitcast(SrcType, DestType)) {
2413 if ((!destIsVector && !DestType->isIntegralType(Self.Context)) ||
2414 (!srcIsVector && !SrcType->isIntegralType(Self.Context)))
2419 if (Self.areLaxCompatibleVectorTypes(SrcType, DestType)) {
2424 if (Self.LangOpts.OpenCL && !CStyle) {
2427 if (Self.areVectorTypesSameSize(SrcType, DestType)) {
2475 if (DestType->isIntegralType(Self.Context)) {
2480 if ((Self.Context.getTypeSize(SrcType) >
2481 Self.Context.getTypeSize(DestType))) {
2483 Self.getLangOpts().MicrosoftExt && !DestType->isBooleanType();
2488 Self.Diag(OpRange.getBegin(), Diag) << SrcType << DestType << OpRange;
2500 checkIntToPointerCast(CStyle, OpRange, SrcExpr.get(), DestType, Self);
2524 CastsAwayConstness(Self, SrcType, DestType, /*CheckCVR=*/!CStyle,
2533 SrcType->getPointeeType().getQualifiers(), Self.getASTContext())) {
2539 Kind = Self.ObjC().PrepareCastToObjCObjectPointer(SrcExpr);
2556 DiagnoseCastOfObjCSEL(Self, SrcExpr, DestType);
2558 DiagnoseCallingConvCast(Self, SrcExpr, DestType, OpRange);
2576 Self.Diag(OpRange.getBegin(),
2577 Self.getLangOpts().CPlusPlus11 ?
2585 Self.Diag(OpRange.getBegin(),
2586 Self.getLangOpts().CPlusPlus11 ?
2601 Self.Diag(OpRange.getBegin(),
2618 static TryCastResult TryAddressSpaceCast(Sema &Self, ExprResult &SrcExpr,
2621 if (!Self.getLangOpts().OpenCL && !Self.getLangOpts().SYCLIsDevice)
2641 Self.getASTContext())) {
2646 Self.Context.removeAddrSpaceQualType(SrcPointeeType.getCanonicalType());
2648 Self.Context.removeAddrSpaceQualType(DestPointeeType.getCanonicalType());
2649 if (Self.Context.hasSameType(SrcPointeeTypeWithoutAS,
2672 if (Self.getLangOpts().OpenCL) {
2676 DestPtr = Self.getASTContext().getCanonicalType(DestType.getTypePtr()),
2677 SrcPtr = Self.getASTContext().getCanonicalType(SrcType.getTypePtr());
2687 Self.getASTContext())) {
2688 Self.Diag(OpRange.getBegin(), DiagID)
2732 assert(Self.getLangOpts().CPlusPlus);
2738 SrcExpr = Self.checkUnknownAnyCast(DestRange, DestType,
2756 Self.ResolveAndFixSingleFunctionTemplateSpecialization(
2764 SrcExpr = Self.IgnoredValueConversions(SrcExpr.get());
2777 SrcExpr = Self.DefaultFunctionArrayLvalueConversion(SrcExpr.get());
2784 if (Self.CheckAltivecInitFromScalar(OpRange, DestType,
2789 if (Self.ShouldSplatAltivecScalarInCast(vecTy) &&
2793 SrcExpr = Self.prepareVectorSplat(DestType, SrcExpr.get());
2801 Self.Diag(OpRange.getBegin(), diag::err_wasm_cast_table)
2820 TryCastResult tcr = TryConstCast(Self, SrcExpr, DestType,
2831 tcr = TryAddressSpaceCast(Self, SrcExpr, DestType, /*CStyle*/ true, msg,
2839 tcr = TryStaticCast(Self, SrcExpr, DestType, CCK, OpRange, msg, Kind,
2846 tcr = TryReinterpretCast(Self, SrcExpr, DestType, /*CStyle*/ true,
2854 if (Self.getLangOpts().allowsNonTrivialObjCLifetimeQualifiers() &&
2859 if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {
2861 FunctionDecl *Fn = Self.ResolveAddressOfOverloadedFunction(SrcExpr.get(),
2870 Self.Diag(OpRange.getBegin(), diag::err_bad_cstyle_cast_overload)
2873 Self.NoteAllOverloadCandidates(SrcExpr.get());
2876 diagnoseBadCast(Self, msg, (FunctionalStyle ? CT_Functional : CT_CStyle),
2885 if (unsigned DiagID = checkCastFunctionType(Self, SrcExpr, DestType))
2886 Self.Diag(OpRange.getBegin(), DiagID)
2897 static void DiagnoseBadFunctionCast(Sema &Self, const ExprResult &SrcExpr,
2899 if (Self.Diags.isIgnored(diag::warn_bad_function_cast,
2927 Self.Diag(SrcExpr.get()->getExprLoc(),
2934 assert(!Self.getLangOpts().CPlusPlus);
2938 SrcExpr = Self.checkUnknownAnyCast(DestRange, DestType,
2948 SrcExpr = Self.IgnoredValueConversions(SrcExpr.get());
2958 if (Self.getASTContext().isDependenceAllowed() &&
2969 if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {
2971 if (FunctionDecl *FD = Self.ResolveAddressOfOverloadedFunction(
2973 SrcExpr = Self.FixOverloadedFunctionReference(SrcExpr.get(), DAP, FD);
2978 SrcExpr = Self.DefaultFunctionArrayLvalueConversion(SrcExpr.get());
2984 Self.Diag(OpRange.getBegin(), diag::err_wasm_cast_table)
2996 if (Self.RequireCompleteType(OpRange.getBegin(), DestType,
3004 Self.Context.hasSameUnqualifiedType(DestType, SrcType)) {
3011 Self.isValidSveBitcast(SrcType, DestType)) {
3018 Self.RISCV().isValidRVVBitcast(SrcType, DestType)) {
3027 if (DestRecordTy && Self.Context.hasSameUnqualifiedType(DestType, SrcType)){
3029 Self.Diag(OpRange.getBegin(), diag::ext_typecheck_cast_nonscalar)
3039 Self.Diag(OpRange.getBegin(), diag::ext_typecheck_cast_to_union)
3044 Self.Diag(OpRange.getBegin(), diag::err_typecheck_cast_to_union_no_type)
3052 if (Self.getLangOpts().OpenCL && DestType->isEventT()) {
3054 if (SrcExpr.get()->EvaluateAsInt(Result, Self.Context)) {
3060 Self.Diag(OpRange.getBegin(),
3069 Self.Diag(OpRange.getBegin(), diag::err_typecheck_cond_expect_scalar)
3080 Self.Diag(SrcExpr.get()->getExprLoc(),
3097 Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_nullptr_cast)
3106 SrcExpr = ImplicitCastExpr::Create(Self.Context, DestType, CK,
3108 Self.CurFPFeatureOverrides());
3112 Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_nullptr_cast)
3119 SrcExpr = Self.CheckExtVectorCast(OpRange, DestType, SrcExpr.get(), Kind);
3124 if (Self.CheckMatrixCast(OpRange, DestType, SrcType, Kind))
3130 if (Self.CheckAltivecInitFromScalar(OpRange, DestType, SrcType)) {
3134 if (Self.ShouldSplatAltivecScalarInCast(DestVecTy) &&
3137 SrcExpr = Self.prepareVectorSplat(DestType, SrcExpr.get());
3138 } else if (Self.CheckVectorCast(OpRange, DestType, SrcType, Kind)) {
3145 if (Self.CheckVectorCast(OpRange, SrcType, DestType, Kind))
3156 Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_cast_selector_expr);
3164 if (!SrcType->isIntegralType(Self.Context) && SrcType->isArithmeticType()) {
3165 Self.Diag(SrcExpr.get()->getExprLoc(),
3172 Self);
3174 if (!DestType->isIntegralType(Self.Context) &&
3176 Self.Diag(SrcExpr.get()->getBeginLoc(),
3183 if ((Self.Context.getTypeSize(SrcType) >
3184 Self.Context.getTypeSize(DestType)) &&
3199 Self.Diag(OpRange.getBegin(), Diag) << SrcType << DestType << OpRange;
3203 if (Self.getLangOpts().OpenCL && !Self.getOpenCLOptions().isAvailableOption(
3204 "cl_khr_fp16", Self.getLangOpts())) {
3206 Self.Diag(SrcExpr.get()->getBeginLoc(), diag::err_opencl_cast_to_half)
3214 if (Self.getLangOpts().allowsNonTrivialObjCLifetimeQualifiers()) {
3220 if (Self.getLangOpts().ObjCAutoRefCount && CastPtr) {
3227 Self.Diag(SrcExpr.get()->getBeginLoc(),
3234 } else if (!Self.ObjC().CheckObjCARCUnavailableWeakConversion(DestType,
3236 Self.Diag(SrcExpr.get()->getBeginLoc(),
3244 if (unsigned DiagID = checkCastFunctionType(Self, SrcExpr, DestType))
3245 Self.Diag(OpRange.getBegin(), DiagID) << SrcType << DestType << OpRange;
3257 Self.Diag(OpRange.getBegin(), diag::err_cast_from_randomized_struct)
3264 DiagnoseCastOfObjCSEL(Self, SrcExpr, DestType);
3265 DiagnoseCallingConvCast(Self, SrcExpr, DestType, OpRange);
3266 DiagnoseBadFunctionCast(Self, SrcExpr, DestType);
3267 Kind = Self.PrepareScalarCast(SrcExpr, DestType);
3278 if (Self.RequireCompleteType(OpRange.getBegin(), DestType,
3280 Self.RequireCompleteType(OpRange.getBegin(), SrcType,
3287 SrcExpr = Self.CreateMaterializeTemporaryExpr(SrcType, SrcExpr.get(),
3290 CharUnits DestSize = Self.Context.getTypeSizeInChars(DestType);
3291 CharUnits SourceSize = Self.Context.getTypeSizeInChars(SrcType);
3293 Self.Diag(OpRange.getBegin(), diag::err_bit_cast_type_size_mismatch)
3300 if (!DestType.isTriviallyCopyableType(Self.Context)) {
3301 Self.Diag(OpRange.getBegin(), diag::err_bit_cast_non_trivially_copyable)
3307 if (!SrcType.isTriviallyCopyableType(Self.Context)) {
3308 Self.Diag(OpRange.getBegin(), diag::err_bit_cast_non_trivially_copyable)
3319 static void DiagnoseCastQual(Sema &Self, const ExprResult &SrcExpr,
3331 if (CastsAwayConstness(Self, SrcType, DestType, true, false,
3348 Self.Diag(SrcExpr.get()->getBeginLoc(), diag::warn_cast_qual2)
3351 Self.Diag(SrcExpr.get()->getBeginLoc(), diag::warn_cast_qual)
3374 DiagnoseCastQual(Op.Self, Op.SrcExpr, Op.DestType);
3402 DiagnoseCastQual(Op.Self, Op.SrcExpr, Op.DestType);