Rename the ARC cast kinds to start with "ARC".
llvm-svn: 139466
This commit is contained in:
parent
f1e2924b6b
commit
2d637d2e79
|
@ -257,24 +257,24 @@ enum CastKind {
|
|||
/// \brief [ARC] Produces a retainable object pointer so that it may
|
||||
/// be consumed, e.g. by being passed to a consuming parameter.
|
||||
/// Calls objc_retain.
|
||||
CK_ObjCProduceObject,
|
||||
CK_ARCProduceObject,
|
||||
|
||||
/// \brief [ARC] Consumes a retainable object pointer that has just
|
||||
/// been produced, e.g. as the return value of a retaining call.
|
||||
/// Enters a cleanup to call objc_release at some indefinite time.
|
||||
CK_ObjCConsumeObject,
|
||||
CK_ARCConsumeObject,
|
||||
|
||||
/// \brief [ARC] Reclaim a retainable object pointer object that may
|
||||
/// have been produced and autoreleased as part of a function return
|
||||
/// sequence.
|
||||
CK_ObjCReclaimReturnedObject,
|
||||
CK_ARCReclaimReturnedObject,
|
||||
|
||||
/// \brief [ARC] Causes a value of block type to be copied to the
|
||||
/// heap, if it is not already there. A number of other operations
|
||||
/// in ARC cause blocks to be copied; this is for cases where that
|
||||
/// would not otherwise be guaranteed, such as when casting to a
|
||||
/// non-block pointer type.
|
||||
CK_ObjCExtendBlockObject
|
||||
CK_ARCExtendBlockObject
|
||||
};
|
||||
|
||||
#define CK_Invalid ((CastKind) -1)
|
||||
|
|
|
@ -339,7 +339,7 @@ private:
|
|||
while (implCE && implCE->getCastKind() == CK_BitCast)
|
||||
implCE = dyn_cast<ImplicitCastExpr>(implCE->getSubExpr());
|
||||
|
||||
if (implCE && implCE->getCastKind() == CK_ObjCConsumeObject)
|
||||
if (implCE && implCE->getCastKind() == CK_ARCConsumeObject)
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -237,9 +237,9 @@ private:
|
|||
}
|
||||
|
||||
if (ImplicitCastExpr *implCE = dyn_cast<ImplicitCastExpr>(E->getSubExpr())){
|
||||
if (implCE->getCastKind() == CK_ObjCConsumeObject)
|
||||
if (implCE->getCastKind() == CK_ARCConsumeObject)
|
||||
return rewriteToBridgedCast(E, OBC_BridgeRetained);
|
||||
if (implCE->getCastKind() == CK_ObjCReclaimReturnedObject)
|
||||
if (implCE->getCastKind() == CK_ARCReclaimReturnedObject)
|
||||
return rewriteToBridgedCast(E, OBC_Bridge);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1076,10 +1076,10 @@ void CastExpr::CheckCastConsistency() const {
|
|||
case CK_IntegralComplexToReal:
|
||||
case CK_IntegralComplexCast:
|
||||
case CK_IntegralComplexToFloatingComplex:
|
||||
case CK_ObjCProduceObject:
|
||||
case CK_ObjCConsumeObject:
|
||||
case CK_ObjCReclaimReturnedObject:
|
||||
case CK_ObjCExtendBlockObject:
|
||||
case CK_ARCProduceObject:
|
||||
case CK_ARCConsumeObject:
|
||||
case CK_ARCReclaimReturnedObject:
|
||||
case CK_ARCExtendBlockObject:
|
||||
assert(!getType()->isBooleanType() && "unheralded conversion to bool");
|
||||
goto CheckNoBasePath;
|
||||
|
||||
|
@ -1193,14 +1193,14 @@ const char *CastExpr::getCastKindName() const {
|
|||
return "IntegralComplexCast";
|
||||
case CK_IntegralComplexToFloatingComplex:
|
||||
return "IntegralComplexToFloatingComplex";
|
||||
case CK_ObjCConsumeObject:
|
||||
return "ObjCConsumeObject";
|
||||
case CK_ObjCProduceObject:
|
||||
return "ObjCProduceObject";
|
||||
case CK_ObjCReclaimReturnedObject:
|
||||
return "ObjCReclaimReturnedObject";
|
||||
case CK_ObjCExtendBlockObject:
|
||||
return "ObjCExtendBlockObject";
|
||||
case CK_ARCConsumeObject:
|
||||
return "ARCConsumeObject";
|
||||
case CK_ARCProduceObject:
|
||||
return "ARCProduceObject";
|
||||
case CK_ARCReclaimReturnedObject:
|
||||
return "ARCReclaimReturnedObject";
|
||||
case CK_ARCExtendBlockObject:
|
||||
return "ARCCExtendBlockObject";
|
||||
}
|
||||
|
||||
llvm_unreachable("Unhandled cast kind!");
|
||||
|
|
|
@ -1827,10 +1827,10 @@ bool IntExprEvaluator::VisitCastExpr(const CastExpr *E) {
|
|||
case CK_GetObjCProperty:
|
||||
case CK_LValueBitCast:
|
||||
case CK_UserDefinedConversion:
|
||||
case CK_ObjCProduceObject:
|
||||
case CK_ObjCConsumeObject:
|
||||
case CK_ObjCReclaimReturnedObject:
|
||||
case CK_ObjCExtendBlockObject:
|
||||
case CK_ARCProduceObject:
|
||||
case CK_ARCConsumeObject:
|
||||
case CK_ARCReclaimReturnedObject:
|
||||
case CK_ARCExtendBlockObject:
|
||||
return false;
|
||||
|
||||
case CK_LValueToRValue:
|
||||
|
@ -2336,10 +2336,10 @@ bool ComplexExprEvaluator::VisitCastExpr(const CastExpr *E) {
|
|||
case CK_FloatingComplexToBoolean:
|
||||
case CK_IntegralComplexToReal:
|
||||
case CK_IntegralComplexToBoolean:
|
||||
case CK_ObjCProduceObject:
|
||||
case CK_ObjCConsumeObject:
|
||||
case CK_ObjCReclaimReturnedObject:
|
||||
case CK_ObjCExtendBlockObject:
|
||||
case CK_ARCProduceObject:
|
||||
case CK_ARCConsumeObject:
|
||||
case CK_ARCReclaimReturnedObject:
|
||||
case CK_ARCExtendBlockObject:
|
||||
llvm_unreachable("invalid cast kind for complex value");
|
||||
|
||||
case CK_LValueToRValue:
|
||||
|
|
|
@ -2059,10 +2059,10 @@ LValue CodeGenFunction::EmitCastLValue(const CastExpr *E) {
|
|||
case CK_BaseToDerivedMemberPointer:
|
||||
case CK_MemberPointerToBoolean:
|
||||
case CK_AnyPointerToBlockPointerCast:
|
||||
case CK_ObjCProduceObject:
|
||||
case CK_ObjCConsumeObject:
|
||||
case CK_ObjCReclaimReturnedObject:
|
||||
case CK_ObjCExtendBlockObject: {
|
||||
case CK_ARCProduceObject:
|
||||
case CK_ARCConsumeObject:
|
||||
case CK_ARCReclaimReturnedObject:
|
||||
case CK_ARCExtendBlockObject: {
|
||||
// These casts only produce lvalues when we're binding a reference to a
|
||||
// temporary realized from a (converted) pure rvalue. Emit the expression
|
||||
// as a value, copy it into a temporary, and return an lvalue referring to
|
||||
|
|
|
@ -379,10 +379,10 @@ void AggExprEmitter::VisitCastExpr(CastExpr *E) {
|
|||
case CK_IntegralComplexToBoolean:
|
||||
case CK_IntegralComplexCast:
|
||||
case CK_IntegralComplexToFloatingComplex:
|
||||
case CK_ObjCProduceObject:
|
||||
case CK_ObjCConsumeObject:
|
||||
case CK_ObjCReclaimReturnedObject:
|
||||
case CK_ObjCExtendBlockObject:
|
||||
case CK_ARCProduceObject:
|
||||
case CK_ARCConsumeObject:
|
||||
case CK_ARCReclaimReturnedObject:
|
||||
case CK_ARCExtendBlockObject:
|
||||
llvm_unreachable("cast kind invalid for aggregate types");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -411,10 +411,10 @@ ComplexPairTy ComplexExprEmitter::EmitCast(CastExpr::CastKind CK, Expr *Op,
|
|||
case CK_FloatingComplexToBoolean:
|
||||
case CK_IntegralComplexToReal:
|
||||
case CK_IntegralComplexToBoolean:
|
||||
case CK_ObjCProduceObject:
|
||||
case CK_ObjCConsumeObject:
|
||||
case CK_ObjCReclaimReturnedObject:
|
||||
case CK_ObjCExtendBlockObject:
|
||||
case CK_ARCProduceObject:
|
||||
case CK_ARCConsumeObject:
|
||||
case CK_ARCReclaimReturnedObject:
|
||||
case CK_ARCExtendBlockObject:
|
||||
llvm_unreachable("invalid cast kind for complex value");
|
||||
|
||||
case CK_FloatingRealToComplex:
|
||||
|
|
|
@ -586,10 +586,10 @@ public:
|
|||
case CK_GetObjCProperty:
|
||||
case CK_ToVoid:
|
||||
case CK_Dynamic:
|
||||
case CK_ObjCProduceObject:
|
||||
case CK_ObjCConsumeObject:
|
||||
case CK_ObjCReclaimReturnedObject:
|
||||
case CK_ObjCExtendBlockObject:
|
||||
case CK_ARCProduceObject:
|
||||
case CK_ARCConsumeObject:
|
||||
case CK_ARCReclaimReturnedObject:
|
||||
case CK_ARCExtendBlockObject:
|
||||
return 0;
|
||||
|
||||
// These might need to be supported for constexpr.
|
||||
|
|
|
@ -1115,16 +1115,16 @@ Value *ScalarExprEmitter::VisitCastExpr(CastExpr *CE) {
|
|||
return CGF.CGM.getCXXABI().EmitMemberPointerConversion(CGF, CE, Src);
|
||||
}
|
||||
|
||||
case CK_ObjCProduceObject:
|
||||
case CK_ARCProduceObject:
|
||||
return CGF.EmitARCRetainScalarExpr(E);
|
||||
case CK_ObjCConsumeObject:
|
||||
case CK_ARCConsumeObject:
|
||||
return CGF.EmitObjCConsumeObject(E->getType(), Visit(E));
|
||||
case CK_ObjCReclaimReturnedObject: {
|
||||
case CK_ARCReclaimReturnedObject: {
|
||||
llvm::Value *value = Visit(E);
|
||||
value = CGF.EmitARCRetainAutoreleasedReturnValue(value);
|
||||
return CGF.EmitObjCConsumeObject(E->getType(), value);
|
||||
}
|
||||
case CK_ObjCExtendBlockObject: {
|
||||
case CK_ARCExtendBlockObject: {
|
||||
llvm::Value *value = CGF.EmitARCRetainScalarExpr(E);
|
||||
return CGF.EmitObjCConsumeObject(E->getType(), value);
|
||||
}
|
||||
|
|
|
@ -1270,7 +1270,7 @@ void CodeGenFunction::EmitObjCAtSynchronizedStmt(
|
|||
CGM.getObjCRuntime().EmitSynchronizedStmt(*this, S);
|
||||
}
|
||||
|
||||
/// Produce the code for a CK_ObjCProduceObject. Just does a
|
||||
/// Produce the code for a CK_ARCProduceObject. Just does a
|
||||
/// primitive retain.
|
||||
llvm::Value *CodeGenFunction::EmitObjCProduceObject(QualType type,
|
||||
llvm::Value *value) {
|
||||
|
@ -1288,7 +1288,7 @@ namespace {
|
|||
};
|
||||
}
|
||||
|
||||
/// Produce the code for a CK_ObjCConsumeObject. Does a primitive
|
||||
/// Produce the code for a CK_ARCConsumeObject. Does a primitive
|
||||
/// release at the end of the full-expression.
|
||||
llvm::Value *CodeGenFunction::EmitObjCConsumeObject(QualType type,
|
||||
llvm::Value *object) {
|
||||
|
@ -1975,9 +1975,9 @@ static bool shouldEmitSeparateBlockRetain(const Expr *e) {
|
|||
switch (cast->getCastKind()) {
|
||||
// Emitting these operations in +1 contexts is goodness.
|
||||
case CK_LValueToRValue:
|
||||
case CK_ObjCReclaimReturnedObject:
|
||||
case CK_ObjCConsumeObject:
|
||||
case CK_ObjCProduceObject:
|
||||
case CK_ARCReclaimReturnedObject:
|
||||
case CK_ARCConsumeObject:
|
||||
case CK_ARCProduceObject:
|
||||
return false;
|
||||
|
||||
// These operations preserve a block type.
|
||||
|
@ -2045,7 +2045,7 @@ tryEmitARCRetainScalarExpr(CodeGenFunction &CGF, const Expr *e) {
|
|||
|
||||
// For consumptions, just emit the subexpression and thus elide
|
||||
// the retain/release pair.
|
||||
case CK_ObjCConsumeObject: {
|
||||
case CK_ARCConsumeObject: {
|
||||
llvm::Value *result = CGF.EmitScalarExpr(ce->getSubExpr());
|
||||
if (resultType) result = CGF.Builder.CreateBitCast(result, resultType);
|
||||
return TryEmitResult(result, true);
|
||||
|
@ -2054,7 +2054,7 @@ tryEmitARCRetainScalarExpr(CodeGenFunction &CGF, const Expr *e) {
|
|||
// Block extends are net +0. Naively, we could just recurse on
|
||||
// the subexpression, but actually we need to ensure that the
|
||||
// value is copied as a block, so there's a little filter here.
|
||||
case CK_ObjCExtendBlockObject: {
|
||||
case CK_ARCExtendBlockObject: {
|
||||
llvm::Value *result; // will be a +0 value
|
||||
|
||||
// If we can't safely assume the sub-expression will produce a
|
||||
|
@ -2087,7 +2087,7 @@ tryEmitARCRetainScalarExpr(CodeGenFunction &CGF, const Expr *e) {
|
|||
|
||||
// For reclaims, emit the subexpression as a retained call and
|
||||
// skip the consumption.
|
||||
case CK_ObjCReclaimReturnedObject: {
|
||||
case CK_ARCReclaimReturnedObject: {
|
||||
llvm::Value *result = emitARCRetainCall(CGF, ce->getSubExpr());
|
||||
if (resultType) result = CGF.Builder.CreateBitCast(result, resultType);
|
||||
return TryEmitResult(result, true);
|
||||
|
|
|
@ -3853,7 +3853,7 @@ static bool findRetainCycleOwner(Expr *e, RetainCycleOwner &owner) {
|
|||
case CK_BitCast:
|
||||
case CK_LValueBitCast:
|
||||
case CK_LValueToRValue:
|
||||
case CK_ObjCReclaimReturnedObject:
|
||||
case CK_ARCReclaimReturnedObject:
|
||||
e = cast->getSubExpr();
|
||||
continue;
|
||||
|
||||
|
@ -4038,7 +4038,7 @@ bool Sema::checkUnsafeAssigns(SourceLocation Loc,
|
|||
return false;
|
||||
// strip off any implicit cast added to get to the one arc-specific
|
||||
while (ImplicitCastExpr *cast = dyn_cast<ImplicitCastExpr>(RHS)) {
|
||||
if (cast->getCastKind() == CK_ObjCConsumeObject) {
|
||||
if (cast->getCastKind() == CK_ARCConsumeObject) {
|
||||
Diag(Loc, diag::warn_arc_retained_assign)
|
||||
<< (LT == Qualifiers::OCL_ExplicitNone)
|
||||
<< RHS->getSourceRange();
|
||||
|
@ -4069,7 +4069,7 @@ void Sema::checkUnsafeExprAssigns(SourceLocation Loc,
|
|||
unsigned Attributes = PD->getPropertyAttributes();
|
||||
if (Attributes & ObjCPropertyDecl::OBJC_PR_assign)
|
||||
while (ImplicitCastExpr *cast = dyn_cast<ImplicitCastExpr>(RHS)) {
|
||||
if (cast->getCastKind() == CK_ObjCConsumeObject) {
|
||||
if (cast->getCastKind() == CK_ARCConsumeObject) {
|
||||
Diag(Loc, diag::warn_arc_retained_property_assign)
|
||||
<< RHS->getSourceRange();
|
||||
return;
|
||||
|
|
|
@ -3792,7 +3792,7 @@ static void maybeExtendBlockObject(Sema &S, ExprResult &E) {
|
|||
if (!S.getLangOptions().ObjCAutoRefCount) return;
|
||||
|
||||
E = ImplicitCastExpr::Create(S.Context, E.get()->getType(),
|
||||
CK_ObjCExtendBlockObject, E.get(),
|
||||
CK_ARCExtendBlockObject, E.get(),
|
||||
/*base path*/ 0, VK_RValue);
|
||||
S.ExprNeedsCleanups = true;
|
||||
}
|
||||
|
@ -8283,7 +8283,7 @@ static Expr *maybeRebuildARCConsumingStmt(Stmt *Statement) {
|
|||
if (!cleanups) return 0;
|
||||
|
||||
ImplicitCastExpr *cast = dyn_cast<ImplicitCastExpr>(cleanups->getSubExpr());
|
||||
if (!cast || cast->getCastKind() != CK_ObjCConsumeObject)
|
||||
if (!cast || cast->getCastKind() != CK_ARCConsumeObject)
|
||||
return 0;
|
||||
|
||||
// Splice out the cast. This shouldn't modify any interesting
|
||||
|
|
|
@ -4095,8 +4095,8 @@ ExprResult Sema::MaybeBindToTemporary(Expr *E) {
|
|||
|
||||
ExprNeedsCleanups = true;
|
||||
|
||||
CastKind ck = (ReturnsRetained ? CK_ObjCConsumeObject
|
||||
: CK_ObjCReclaimReturnedObject);
|
||||
CastKind ck = (ReturnsRetained ? CK_ARCConsumeObject
|
||||
: CK_ARCReclaimReturnedObject);
|
||||
return Owned(ImplicitCastExpr::Create(Context, E->getType(), ck, E, 0,
|
||||
VK_RValue));
|
||||
}
|
||||
|
|
|
@ -1821,7 +1821,7 @@ static Expr *maybeUndoReclaimObject(Expr *e) {
|
|||
// value-propagating subexpressions --- we can't reliably rebuild
|
||||
// in-place because of expression sharing.
|
||||
if (ImplicitCastExpr *ice = dyn_cast<ImplicitCastExpr>(e))
|
||||
if (ice->getCastKind() == CK_ObjCReclaimReturnedObject)
|
||||
if (ice->getCastKind() == CK_ARCReclaimReturnedObject)
|
||||
return ice->getSubExpr();
|
||||
|
||||
return e;
|
||||
|
@ -1889,7 +1889,7 @@ ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc,
|
|||
case OBC_BridgeRetained:
|
||||
// Produce the object before casting it.
|
||||
SubExpr = ImplicitCastExpr::Create(Context, FromType,
|
||||
CK_ObjCProduceObject,
|
||||
CK_ARCProduceObject,
|
||||
SubExpr, 0, VK_RValue);
|
||||
break;
|
||||
|
||||
|
@ -1925,7 +1925,7 @@ ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc,
|
|||
|
||||
if (MustConsume) {
|
||||
ExprNeedsCleanups = true;
|
||||
Result = ImplicitCastExpr::Create(Context, T, CK_ObjCConsumeObject, Result,
|
||||
Result = ImplicitCastExpr::Create(Context, T, CK_ARCConsumeObject, Result,
|
||||
0, VK_RValue);
|
||||
}
|
||||
|
||||
|
|
|
@ -4662,7 +4662,7 @@ InitializationSequence::Perform(Sema &S,
|
|||
|
||||
case SK_ProduceObjCObject:
|
||||
CurInit = S.Owned(ImplicitCastExpr::Create(S.Context, Step->Type,
|
||||
CK_ObjCProduceObject,
|
||||
CK_ARCProduceObject,
|
||||
CurInit.take(), 0, VK_RValue));
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -211,10 +211,10 @@ void ExprEngine::VisitCast(const CastExpr *CastE, const Expr *Ex,
|
|||
continue;
|
||||
// The analyzer doesn't do anything special with these casts,
|
||||
// since it understands retain/release semantics already.
|
||||
case CK_ObjCProduceObject:
|
||||
case CK_ObjCConsumeObject:
|
||||
case CK_ObjCReclaimReturnedObject:
|
||||
case CK_ObjCExtendBlockObject: // Fall-through.
|
||||
case CK_ARCProduceObject:
|
||||
case CK_ARCConsumeObject:
|
||||
case CK_ARCReclaimReturnedObject:
|
||||
case CK_ARCExtendBlockObject: // Fall-through.
|
||||
// True no-ops.
|
||||
case CK_NoOp:
|
||||
case CK_FunctionToPointerDecay: {
|
||||
|
|
Loading…
Reference in New Issue