Lines Matching defs:Self
62 : Self(S), SrcExpr(src), DestType(destType),
88 Sema &Self;
126 Self.Context, Self.Context.ARCUnbridgedCastTy, CK_Dependent,
128 Self.CurFPFeatureOverrides());
157 Self.CheckCastAlign(SrcExpr.get(), DestType, OpRange);
161 assert(Self.getLangOpts().allowsNonTrivialObjCLifetimeQualifiers());
164 if (Self.ObjC().CheckObjCConversion(OpRange, DestType, src, CCK) ==
175 SrcExpr = Self.CheckPlaceholderExpr(SrcExpr.get());
199 CheckNoDeref(Op.Self, Op.SrcExpr.get()->getType(), Op.ResultType,
207 static void DiagnoseCastQual(Sema &Self, const ExprResult &SrcExpr,
221 static TryCastResult TryLValueToRValueCast(Sema &Self, Expr *SrcExpr,
226 static TryCastResult TryStaticReferenceDowncast(Sema &Self, Expr *SrcExpr,
232 static TryCastResult TryStaticPointerDowncast(Sema &Self, QualType SrcType,
238 static TryCastResult TryStaticDowncast(Sema &Self, CanQualType SrcType,
245 static TryCastResult TryStaticMemberPointerUpcast(Sema &Self, ExprResult &SrcExpr,
254 TryStaticImplicitCast(Sema &Self, ExprResult &SrcExpr, QualType DestType,
257 static TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr,
262 static TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr,
265 static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr,
269 static TryCastResult TryAddressSpaceCast(Sema &Self, ExprResult &SrcExpr,
670 CastsAwayConstness(Sema &Self, QualType SrcType, QualType DestType,
677 if (!CheckCVR && CheckObjCLifetime && !Self.Context.getLangOpts().ObjC)
689 QualType UnwrappedSrcType = Self.Context.getCanonicalType(SrcType),
690 UnwrappedDestType = Self.Context.getCanonicalType(DestType);
700 Self.Context, UnwrappedSrcType, UnwrappedDestType)) {
708 Self.Context.getUnqualifiedArrayType(UnwrappedSrcType, SrcQuals);
709 Self.Context.getUnqualifiedArrayType(UnwrappedDestType, DestQuals);
792 SrcExpr = Self.DefaultFunctionArrayLvalueConversion(SrcExpr.get());
794 SrcExpr = Self.CheckPlaceholderExpr(SrcExpr.get());
799 QualType DestType = Self.Context.getCanonicalType(this->DestType);
812 Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_ref_or_ptr)
822 if (Self.RequireCompleteType(OpRange.getBegin(), DestPointee,
829 Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_class)
839 QualType SrcType = Self.Context.getCanonicalType(OrigSrcType);
845 Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_ptr)
852 Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_rvalue)
860 SrcExpr = Self.CreateMaterializeTemporaryExpr(
867 if (Self.RequireCompleteType(OpRange.getBegin(), SrcPointee,
874 Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_class)
888 Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_qualifiers_away)
904 Self.IsDerivedFrom(OpRange.getBegin(), SrcPointee, DestPointee)) {
905 if (Self.CheckDerivedToBaseConversion(SrcPointee, DestPointee,
920 Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_polymorphic)
928 if (!Self.getLangOpts().RTTI && !DestPointee->isVoidType()) {
929 Self.Diag(OpRange.getBegin(), diag::err_no_dynamic_cast_with_fno_rtti);
935 if (!Self.getLangOpts().RTTIData) {
937 Self.getASTContext().getTargetInfo().getCXXABI().isMicrosoft();
938 bool isClangCL = Self.getDiagnostics().getDiagnosticOptions().getFormat() ==
941 Self.Diag(OpRange.getBegin(),
951 Self.MarkVTableUsed(OpRange.getBegin(), DestDecl);
967 SrcExpr = Self.DefaultFunctionArrayLvalueConversion(SrcExpr.get());
969 SrcExpr = Self.CheckPlaceholderExpr(SrcExpr.get());
974 auto TCR = TryConstCast(Self, SrcExpr, DestType, /*CStyle*/ false, msg);
976 Self.Diag(OpRange.getBegin(), msg) << CT_Const
986 TryAddressSpaceCast(Self, SrcExpr, DestType, /*CStyle*/ false, msg, Kind);
988 Self.Diag(OpRange.getBegin(), msg)
997 static void DiagnoseReinterpretUpDownCast(Sema &Self, const Expr *SrcExpr,
1056 Self.Context.getASTRecordLayout(Class);
1080 Self.Diag(BeginLoc, diag::warn_reinterpret_different_from_static)
1083 Self.Diag(BeginLoc, diag::note_reinterpret_updowncast_use_static)
1103 static unsigned int checkCastFunctionType(Sema &Self, const ExprResult &SrcExpr,
1109 if (!Self.Diags.isIgnored(ID, SrcExpr.get()->getExprLoc())) {
1134 if (Self.Context.hasSameType(SrcFTy, DstFTy))
1155 Self.Context))
1182 DstFPTy->getParamType(i), Self.Context))
1195 SrcExpr = Self.DefaultFunctionArrayLvalueConversion(SrcExpr.get());
1203 TryReinterpretCast(Self, SrcExpr, DestType,
1208 if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {
1210 Self.Diag(OpRange.getBegin(), diag::err_bad_reinterpret_cast_overload)
1213 Self.NoteAllOverloadCandidates(SrcExpr.get());
1216 diagnoseBadCast(Self, msg, CT_Reinterpret, OpRange, SrcExpr.get(),
1222 if (Self.getLangOpts().allowsNonTrivialObjCLifetimeQualifiers())
1224 DiagnoseReinterpretUpDownCast(Self, SrcExpr.get(), DestType, OpRange);
1226 if (unsigned DiagID = checkCastFunctionType(Self, SrcExpr, DestType))
1227 Self.Diag(OpRange.getBegin(), DiagID)
1254 Self.ResolveAndFixSingleFunctionTemplateSpecialization(SrcExpr,
1262 SrcExpr = Self.IgnoredValueConversions(SrcExpr.get());
1268 SrcExpr = Self.DefaultFunctionArrayLvalueConversion(SrcExpr.get());
1275 TryStaticCast(Self, SrcExpr, DestType, CheckedConversionKind::OtherCast,
1280 if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {
1282 Self.Diag(OpRange.getBegin(), diag::err_bad_static_cast_overload)
1285 Self.NoteAllOverloadCandidates(SrcExpr.get());
1287 diagnoseBadCast(Self, msg, CT_Static, OpRange, SrcExpr.get(), DestType,
1295 if (Self.getLangOpts().allowsNonTrivialObjCLifetimeQualifiers())
1316 static TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr,
1345 tcr = TryStaticReferenceDowncast(Self, SrcExpr.get(), DestType, CStyle,
1353 tcr = TryLValueToRValueCast(Self, SrcExpr.get(), DestType, CStyle, Kind,
1360 tcr = TryStaticImplicitCast(Self, SrcExpr, DestType, CCK, OpRange, msg,
1377 QualType SrcType = Self.Context.getCanonicalType(SrcExpr.get()->getType());
1387 } else if (DestType->isIntegralType(Self.Context)) {
1406 if (Self.RequireCompleteType(OpRange.getBegin(), DestType,
1428 tcr = TryStaticPointerDowncast(Self, SrcType, DestType, CStyle, OpRange, msg,
1436 tcr = TryStaticMemberPointerUpcast(Self, SrcExpr, SrcType, DestType, CStyle,
1474 if (!CStyle && Self.getLangOpts().MSVCCompat &&
1476 Self.Diag(OpRange.getBegin(), diag::ext_ms_cast_fn_obj) << OpRange;
1503 Self.ObjC().CheckTollFreeBridgeStaticCast(DestType, SrcExpr.get(), Kind))
1515 if (Self.CheckMatrixCast(OpRange, DestType, SrcType, Kind)) {
1527 TryCastResult TryLValueToRValueCast(Sema &Self, Expr *SrcExpr,
1552 Sema::ReferenceCompareResult RefResult = Self.CompareReferenceRelationship(
1569 if (!Self.IsDerivedFrom(SrcExpr->getBeginLoc(), SrcExpr->getType(),
1573 Self.BuildBasePathArray(Paths, BasePath);
1582 TryStaticReferenceDowncast(Sema &Self, Expr *SrcExpr, QualType DestType,
1611 return TryStaticDowncast(Self,
1612 Self.Context.getCanonicalType(SrcExpr->getType()),
1613 Self.Context.getCanonicalType(DestPointee), CStyle,
1620 TryStaticPointerDowncast(Sema &Self, QualType SrcType, QualType DestType,
1643 return TryStaticDowncast(Self,
1644 Self.Context.getCanonicalType(SrcPointer->getPointeeType()),
1645 Self.Context.getCanonicalType(DestPointer->getPointeeType()),
1654 TryStaticDowncast(Sema &Self, CanQualType SrcType, CanQualType DestType,
1659 if (!Self.isCompleteType(OpRange.getBegin(), SrcType) ||
1660 !Self.isCompleteType(OpRange.getBegin(), DestType))
1670 if (!Self.IsDerivedFrom(OpRange.getBegin(), DestType, SrcType, Paths)) {
1706 Self.IsDerivedFrom(OpRange.getBegin(), DestType, SrcType, Paths);
1721 Self.Diag(OpRange.getBegin(), diag::err_ambiguous_base_to_derived_cast)
1731 Self.Diag(OpRange.getBegin(), diag::err_static_downcast_via_virtual)
1738 switch (Self.CheckBaseClassAccess(OpRange.getBegin(),
1753 Self.BuildBasePathArray(Paths, BasePath);
1766 TryStaticMemberPointerUpcast(Sema &Self, ExprResult &SrcExpr, QualType SrcType,
1777 if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {
1779 = Self.ResolveAddressOfOverloadedFunction(SrcExpr.get(), DestType, false,
1782 SrcType = Self.Context.getMemberPointerType(Fn->getType(),
1783 Self.Context.getTypeDeclType(M->getParent()).getTypePtr());
1796 if (Self.Context.getTargetInfo().getCXXABI().isMicrosoft()) {
1797 (void)Self.isCompleteType(OpRange.getBegin(), SrcType);
1798 (void)Self.isCompleteType(OpRange.getBegin(), DestType);
1802 if (!Self.Context.hasSameUnqualifiedType(SrcMemPtr->getPointeeType(),
1811 if (!Self.IsDerivedFrom(OpRange.getBegin(), SrcClass, DestClass, Paths))
1815 if (Paths.isAmbiguous(Self.Context.getCanonicalType(DestClass))) {
1819 Self.IsDerivedFrom(OpRange.getBegin(), SrcClass, DestClass, Paths);
1822 std::string PathDisplayStr = Self.getAmbiguousPathsDisplayString(Paths);
1823 Self.Diag(OpRange.getBegin(), diag::err_ambiguous_memptr_conv)
1830 Self.Diag(OpRange.getBegin(), diag::err_memptr_conv_via_virtual)
1837 switch (Self.CheckBaseClassAccess(OpRange.getBegin(),
1857 FunctionDecl *Fn = Self.ResolveAddressOfOverloadedFunction(SrcExpr.get(),
1866 SrcExpr = Self.FixOverloadedFunctionReference(SrcExpr, FoundOverload, Fn);
1873 Self.BuildBasePathArray(Paths, BasePath);
1883 TryCastResult TryStaticImplicitCast(Sema &Self, ExprResult &SrcExpr,
1889 if (Self.RequireCompleteType(OpRange.getBegin(), DestType,
1891 Self.RequireNonAbstractType(OpRange.getBegin(), DestType,
1911 InitializationSequence InitSeq(Self, Entity, InitKind, SrcExprRaw);
1923 ExprResult Result = InitSeq.Perform(Self, Entity, InitKind, SrcExprRaw);
1940 static TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr,
1943 DestType = Self.Context.getCanonicalType(DestType);
1990 DestType = Self.Context.getPointerType(DestTypeTmp->getPointeeType());
1991 SrcType = Self.Context.getPointerType(SrcType);
2025 if (!Self.Context.hasCvrSimilarType(SrcType, DestType))
2031 SrcExpr = Self.CreateMaterializeTemporaryExpr(SrcExpr.get()->getType(),
2093 static void DiagnoseCastOfObjCSEL(Sema &Self, const ExprResult &SrcExpr,
2096 if (Self.Context.hasSameType(SrcType, DestType))
2104 Self.Diag(SrcExpr.get()->getExprLoc(),
2112 static void DiagnoseCallingConvCast(Sema &Self, const ExprResult &SrcExpr,
2117 if (Self.Context.hasSameType(SrcType, DstType) ||
2146 CallingConv DefaultCC = Self.getASTContext().getDefaultCallingConvention(
2154 Self.Diag(OpRange.getBegin(), diag::warn_cast_calling_conv)
2160 if (Self.Diags.isIgnored(diag::warn_cast_calling_conv, OpRange.getBegin()))
2168 Preprocessor &PP = Self.getPreprocessor();
2172 if (Self.getLangOpts().MicrosoftExt) {
2176 AttrTokens.push_back(II->isKeyword(Self.getLangOpts())
2186 AttrTokens.push_back(II->isKeyword(Self.getLangOpts())
2196 Self.Diag(NameLoc, diag::note_change_calling_conv_fixit)
2202 Sema &Self) {
2208 if (CStyle && SrcType->isIntegralType(Self.Context)
2211 && !SrcExpr->isIntegerConstantExpr(Self.Context)
2212 && Self.Context.getTypeSize(DestType) >
2213 Self.Context.getTypeSize(SrcType)) {
2222 Self.Diag(OpRange.getBegin(), Diag) << SrcType << DestType << OpRange;
2226 static bool fixOverloadedReinterpretCastExpr(Sema &Self, QualType DestType,
2237 if (Self.ResolveAndFixSingleFunctionTemplateSpecialization(
2248 if (!Self.resolveAndFixAddressOfSingleOverloadCandidate(
2254 static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr,
2261 DestType = Self.Context.getCanonicalType(DestType);
2266 if (SrcType == Self.Context.OverloadTy) {
2268 if (!fixOverloadedReinterpretCastExpr(Self, DestType, FixedExpr))
2285 Self.CheckCompatibleReinterpretCast(SrcType, DestType,
2310 Self.Diag(OpRange.getBegin(), diag::err_bad_reinterpret_cast_reference)
2318 DestType = Self.Context.getPointerType(DestTypeTmp->getPointeeType());
2319 SrcType = Self.Context.getPointerType(SrcType);
2325 SrcType = Self.Context.getCanonicalType(SrcType);
2338 if (Self.Context.getTargetInfo().getCXXABI().isMicrosoft()) {
2341 (void)Self.isCompleteType(OpRange.getBegin(), SrcType);
2342 (void)Self.isCompleteType(OpRange.getBegin(), DestType);
2346 if (Self.Context.getTypeSize(DestMemPtr) !=
2347 Self.Context.getTypeSize(SrcMemPtr)) {
2357 CastsAwayConstness(Self, SrcType, DestType, /*CheckCVR=*/!CStyle,
2368 if (SrcType->isNullPtrType() && DestType->isIntegralType(Self.Context)) {
2373 if (Self.Context.getTypeSize(SrcType) >
2374 Self.Context.getTypeSize(DestType)) {
2388 if (Self.isValidSveBitcast(SrcType, DestType)) {
2394 if (Self.RISCV().isValidRVVBitcast(SrcType, DestType)) {
2402 if ((!destIsVector && !DestType->isIntegralType(Self.Context)) ||
2403 (!srcIsVector && !SrcType->isIntegralType(Self.Context)))
2408 if (Self.areLaxCompatibleVectorTypes(SrcType, DestType)) {
2413 if (Self.LangOpts.OpenCL && !CStyle) {
2416 if (Self.areVectorTypesSameSize(SrcType, DestType)) {
2464 if (DestType->isIntegralType(Self.Context)) {
2469 if ((Self.Context.getTypeSize(SrcType) >
2470 Self.Context.getTypeSize(DestType))) {
2472 Self.getLangOpts().MicrosoftExt && !DestType->isBooleanType();
2477 Self.Diag(OpRange.getBegin(), Diag) << SrcType << DestType << OpRange;
2489 checkIntToPointerCast(CStyle, OpRange, SrcExpr.get(), DestType, Self);
2513 CastsAwayConstness(Self, SrcType, DestType, /*CheckCVR=*/!CStyle,
2528 Kind = Self.ObjC().PrepareCastToObjCObjectPointer(SrcExpr);
2545 DiagnoseCastOfObjCSEL(Self, SrcExpr, DestType);
2547 DiagnoseCallingConvCast(Self, SrcExpr, DestType, OpRange);
2565 Self.Diag(OpRange.getBegin(),
2566 Self.getLangOpts().CPlusPlus11 ?
2574 Self.Diag(OpRange.getBegin(),
2575 Self.getLangOpts().CPlusPlus11 ?
2590 Self.Diag(OpRange.getBegin(),
2607 static TryCastResult TryAddressSpaceCast(Sema &Self, ExprResult &SrcExpr,
2610 if (!Self.getLangOpts().OpenCL && !Self.getLangOpts().SYCLIsDevice)
2634 Self.Context.removeAddrSpaceQualType(SrcPointeeType.getCanonicalType());
2636 Self.Context.removeAddrSpaceQualType(DestPointeeType.getCanonicalType());
2637 if (Self.Context.hasSameType(SrcPointeeTypeWithoutAS,
2660 if (Self.getLangOpts().OpenCL) {
2664 DestPtr = Self.getASTContext().getCanonicalType(DestType.getTypePtr()),
2665 SrcPtr = Self.getASTContext().getCanonicalType(SrcType.getTypePtr());
2675 Self.Diag(OpRange.getBegin(), DiagID)
2719 assert(Self.getLangOpts().CPlusPlus);
2725 SrcExpr = Self.checkUnknownAnyCast(DestRange, DestType,
2743 Self.ResolveAndFixSingleFunctionTemplateSpecialization(
2751 SrcExpr = Self.IgnoredValueConversions(SrcExpr.get());
2764 SrcExpr = Self.DefaultFunctionArrayLvalueConversion(SrcExpr.get());
2771 if (Self.CheckAltivecInitFromScalar(OpRange, DestType,
2776 if (Self.ShouldSplatAltivecScalarInCast(vecTy) &&
2780 SrcExpr = Self.prepareVectorSplat(DestType, SrcExpr.get());
2788 Self.Diag(OpRange.getBegin(), diag::err_wasm_cast_table)
2807 TryCastResult tcr = TryConstCast(Self, SrcExpr, DestType,
2818 tcr = TryAddressSpaceCast(Self, SrcExpr, DestType, /*CStyle*/ true, msg,
2826 tcr = TryStaticCast(Self, SrcExpr, DestType, CCK, OpRange, msg, Kind,
2833 tcr = TryReinterpretCast(Self, SrcExpr, DestType, /*CStyle*/ true,
2841 if (Self.getLangOpts().allowsNonTrivialObjCLifetimeQualifiers() &&
2846 if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {
2848 FunctionDecl *Fn = Self.ResolveAddressOfOverloadedFunction(SrcExpr.get(),
2857 Self.Diag(OpRange.getBegin(), diag::err_bad_cstyle_cast_overload)
2860 Self.NoteAllOverloadCandidates(SrcExpr.get());
2863 diagnoseBadCast(Self, msg, (FunctionalStyle ? CT_Functional : CT_CStyle),
2872 if (unsigned DiagID = checkCastFunctionType(Self, SrcExpr, DestType))
2873 Self.Diag(OpRange.getBegin(), DiagID)
2884 static void DiagnoseBadFunctionCast(Sema &Self, const ExprResult &SrcExpr,
2886 if (Self.Diags.isIgnored(diag::warn_bad_function_cast,
2914 Self.Diag(SrcExpr.get()->getExprLoc(),
2921 assert(!Self.getLangOpts().CPlusPlus);
2925 SrcExpr = Self.checkUnknownAnyCast(DestRange, DestType,
2935 SrcExpr = Self.IgnoredValueConversions(SrcExpr.get());
2945 if (Self.getASTContext().isDependenceAllowed() &&
2956 if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {
2958 if (FunctionDecl *FD = Self.ResolveAddressOfOverloadedFunction(
2960 SrcExpr = Self.FixOverloadedFunctionReference(SrcExpr.get(), DAP, FD);
2965 SrcExpr = Self.DefaultFunctionArrayLvalueConversion(SrcExpr.get());
2971 Self.Diag(OpRange.getBegin(), diag::err_wasm_cast_table)
2983 if (Self.RequireCompleteType(OpRange.getBegin(), DestType,
2991 Self.Context.hasSameUnqualifiedType(DestType, SrcType)) {
2998 Self.isValidSveBitcast(SrcType, DestType)) {
3005 Self.RISCV().isValidRVVBitcast(SrcType, DestType)) {
3014 if (DestRecordTy && Self.Context.hasSameUnqualifiedType(DestType, SrcType)){
3016 Self.Diag(OpRange.getBegin(), diag::ext_typecheck_cast_nonscalar)
3026 Self.Diag(OpRange.getBegin(), diag::ext_typecheck_cast_to_union)
3031 Self.Diag(OpRange.getBegin(), diag::err_typecheck_cast_to_union_no_type)
3039 if (Self.getLangOpts().OpenCL && DestType->isEventT()) {
3041 if (SrcExpr.get()->EvaluateAsInt(Result, Self.Context)) {
3047 Self.Diag(OpRange.getBegin(),
3056 Self.Diag(OpRange.getBegin(), diag::err_typecheck_cond_expect_scalar)
3067 Self.Diag(SrcExpr.get()->getExprLoc(),
3084 Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_nullptr_cast)
3093 SrcExpr = ImplicitCastExpr::Create(Self.Context, DestType, CK,
3095 Self.CurFPFeatureOverrides());
3099 Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_nullptr_cast)
3106 SrcExpr = Self.CheckExtVectorCast(OpRange, DestType, SrcExpr.get(), Kind);
3111 if (Self.CheckMatrixCast(OpRange, DestType, SrcType, Kind))
3117 if (Self.CheckAltivecInitFromScalar(OpRange, DestType, SrcType)) {
3121 if (Self.ShouldSplatAltivecScalarInCast(DestVecTy) &&
3124 SrcExpr = Self.prepareVectorSplat(DestType, SrcExpr.get());
3125 } else if (Self.CheckVectorCast(OpRange, DestType, SrcType, Kind)) {
3132 if (Self.CheckVectorCast(OpRange, SrcType, DestType, Kind))
3143 Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_cast_selector_expr);
3151 if (!SrcType->isIntegralType(Self.Context) && SrcType->isArithmeticType()) {
3152 Self.Diag(SrcExpr.get()->getExprLoc(),
3159 Self);
3161 if (!DestType->isIntegralType(Self.Context) &&
3163 Self.Diag(SrcExpr.get()->getBeginLoc(),
3170 if ((Self.Context.getTypeSize(SrcType) >
3171 Self.Context.getTypeSize(DestType)) &&
3186 Self.Diag(OpRange.getBegin(), Diag) << SrcType << DestType << OpRange;
3190 if (Self.getLangOpts().OpenCL && !Self.getOpenCLOptions().isAvailableOption(
3191 "cl_khr_fp16", Self.getLangOpts())) {
3193 Self.Diag(SrcExpr.get()->getBeginLoc(), diag::err_opencl_cast_to_half)
3201 if (Self.getLangOpts().allowsNonTrivialObjCLifetimeQualifiers()) {
3207 if (Self.getLangOpts().ObjCAutoRefCount && CastPtr) {
3214 Self.Diag(SrcExpr.get()->getBeginLoc(),
3221 } else if (!Self.ObjC().CheckObjCARCUnavailableWeakConversion(DestType,
3223 Self.Diag(SrcExpr.get()->getBeginLoc(),
3231 if (unsigned DiagID = checkCastFunctionType(Self, SrcExpr, DestType))
3232 Self.Diag(OpRange.getBegin(), DiagID) << SrcType << DestType << OpRange;
3244 Self.Diag(OpRange.getBegin(), diag::err_cast_from_randomized_struct)
3251 DiagnoseCastOfObjCSEL(Self, SrcExpr, DestType);
3252 DiagnoseCallingConvCast(Self, SrcExpr, DestType, OpRange);
3253 DiagnoseBadFunctionCast(Self, SrcExpr, DestType);
3254 Kind = Self.PrepareScalarCast(SrcExpr, DestType);
3265 if (Self.RequireCompleteType(OpRange.getBegin(), DestType,
3267 Self.RequireCompleteType(OpRange.getBegin(), SrcType,
3274 SrcExpr = Self.CreateMaterializeTemporaryExpr(SrcType, SrcExpr.get(),
3277 CharUnits DestSize = Self.Context.getTypeSizeInChars(DestType);
3278 CharUnits SourceSize = Self.Context.getTypeSizeInChars(SrcType);
3280 Self.Diag(OpRange.getBegin(), diag::err_bit_cast_type_size_mismatch)
3286 if (!DestType.isTriviallyCopyableType(Self.Context)) {
3287 Self.Diag(OpRange.getBegin(), diag::err_bit_cast_non_trivially_copyable)
3293 if (!SrcType.isTriviallyCopyableType(Self.Context)) {
3294 Self.Diag(OpRange.getBegin(), diag::err_bit_cast_non_trivially_copyable)
3305 static void DiagnoseCastQual(Sema &Self, const ExprResult &SrcExpr,
3317 if (CastsAwayConstness(Self, SrcType, DestType, true, false,
3334 Self.Diag(SrcExpr.get()->getBeginLoc(), diag::warn_cast_qual2)
3337 Self.Diag(SrcExpr.get()->getBeginLoc(), diag::warn_cast_qual)
3360 DiagnoseCastQual(Op.Self, Op.SrcExpr, Op.DestType);
3388 DiagnoseCastQual(Op.Self, Op.SrcExpr, Op.DestType);