diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2011-07-08 17:41:42 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2011-07-08 17:41:42 +0000 |
commit | 82007c3a3f60ce2299c74333a881e4fdfc2135ce (patch) | |
tree | eeddcb8a34f4d8b3c57f0cecd274ba6ab8678fda /lib | |
parent | 032c86921177031ecbb46c398b3e710758ba915e (diff) |
objc++-arc: more diagnosis of converting a weak-unavailable
object to a __weak object type. // rdar://9732636
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134706 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Sema/SemaCXXCast.cpp | 9 | ||||
-rw-r--r-- | lib/Sema/SemaExpr.cpp | 2 | ||||
-rw-r--r-- | lib/Sema/SemaExprCXX.cpp | 16 |
3 files changed, 16 insertions, 11 deletions
diff --git a/lib/Sema/SemaCXXCast.cpp b/lib/Sema/SemaCXXCast.cpp index 0721814c18..50e39e0d04 100644 --- a/lib/Sema/SemaCXXCast.cpp +++ b/lib/Sema/SemaCXXCast.cpp @@ -1774,15 +1774,8 @@ Sema::CXXCheckCStyleCast(SourceRange R, QualType CastTy, ExprValueKind &VK, } } - if (getLangOptions().ObjCAutoRefCount && tcr == TC_Success) { + if (getLangOptions().ObjCAutoRefCount && tcr == TC_Success) CheckObjCARCConversion(R, CastTy, CastExpr, CCK); - if (!CheckObjCARCUnavailableWeakConversion(CastTy, - origCastExprType)) - Diag(CastExpr->getLocStart(), - diag::err_arc_cast_of_weak_unavailable) - << origCastExprType << CastTy - << CastExpr->getSourceRange(); - } if (tcr != TC_Success && msg != 0) { if (CastExpr->getType() == Context.OverloadTy) { diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index fea31aa046..09c68aef69 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -4068,7 +4068,7 @@ ExprResult Sema::CheckCastTypes(SourceLocation CastStartLoc, SourceRange TyR, } else if (!CheckObjCARCUnavailableWeakConversion(castType, castExprType)) { Diag(castExpr->getLocStart(), - diag::err_arc_cast_of_weak_unavailable) + diag::err_arc_convesion_of_weak_unavailable) << 1 << castExprType << castType << castExpr->getSourceRange(); return ExprError(); diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index 4c096fe0ec..7ee9c1bec2 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -2340,8 +2340,20 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType, if (From->getType()->isObjCObjectPointerType() && ToType->isObjCObjectPointerType()) EmitRelatedResultTypeNote(From); - } - + } + else if (getLangOptions().ObjCAutoRefCount && + !CheckObjCARCUnavailableWeakConversion(ToType, + From->getType())) { + if (Action == AA_Initializing) + Diag(From->getSourceRange().getBegin(), + diag::err_arc_weak_unavailable_assign); + else + Diag(From->getSourceRange().getBegin(), + diag::err_arc_convesion_of_weak_unavailable) + << (Action == AA_Casting) << From->getType() << ToType + << From->getSourceRange(); + } + CastKind Kind = CK_Invalid; CXXCastPath BasePath; if (CheckPointerConversion(From, ToType, Kind, BasePath, CStyle)) |