summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaExpr.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2013-12-17 19:33:43 +0000
committerFariborz Jahanian <fjahanian@apple.com>2013-12-17 19:33:43 +0000
commitbd714e9bb1204c415d192bf64d861b29c09edfce (patch)
tree5f19a4d0b4ddf7d09e7d8547d6bbc87ae1077025 /clang/lib/Sema/SemaExpr.cpp
parente4083f9e8512a0ab997e5fe09e9ce18bfc453c85 (diff)
downloadbcm5719-llvm-bd714e9bb1204c415d192bf64d861b29c09edfce.tar.gz
bcm5719-llvm-bd714e9bb1204c415d192bf64d861b29c09edfce.zip
Objective-C. Make diagnostics and fix-its consistent
when diagnosing casting of a cstring literal to NSString in default and -fobjc-arc mode. // rdar://14106083 llvm-svn: 197515
Diffstat (limited to 'clang/lib/Sema/SemaExpr.cpp')
-rw-r--r--clang/lib/Sema/SemaExpr.cpp23
1 files changed, 12 insertions, 11 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index e4a6102b067..0597a998c47 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -10587,22 +10587,23 @@ ExprResult Sema::ActOnGNUNullExpr(SourceLocation TokenLoc) {
return Owned(new (Context) GNUNullExpr(Ty, TokenLoc));
}
-static void MakeObjCStringLiteralFixItHint(Sema& SemaRef, QualType DstType,
- Expr *SrcExpr, FixItHint &Hint,
- bool &IsNSString) {
- if (!SemaRef.getLangOpts().ObjC1)
- return;
+StringLiteral *
+Sema::ConversionToObjCStringLiteralCheck(QualType DstType,
+ Expr *SrcExpr, FixItHint &Hint,
+ bool &IsNSString) {
+ if (!getLangOpts().ObjC1)
+ return 0;
const ObjCObjectPointerType *PT = DstType->getAs<ObjCObjectPointerType>();
if (!PT)
- return;
+ return 0;
// Check if the destination is of type 'id'.
if (!PT->isObjCIdType()) {
// Check if the destination is the 'NSString' interface.
const ObjCInterfaceDecl *ID = PT->getInterfaceDecl();
if (!ID || !ID->getIdentifier()->isStr("NSString"))
- return;
+ return 0;
IsNSString = true;
}
@@ -10616,9 +10617,9 @@ static void MakeObjCStringLiteralFixItHint(Sema& SemaRef, QualType DstType,
StringLiteral *SL = dyn_cast<StringLiteral>(SrcExpr);
if (!SL || !SL->isAscii())
- return;
-
+ return 0;
Hint = FixItHint::CreateInsertion(SL->getLocStart(), "@");
+ return SL;
}
bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy,
@@ -10655,7 +10656,7 @@ bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy,
MayHaveConvFixit = true;
break;
case IncompatiblePointer:
- MakeObjCStringLiteralFixItHint(*this, DstType, SrcExpr, Hint, IsNSString);
+ ConversionToObjCStringLiteralCheck(DstType, SrcExpr, Hint, IsNSString);
DiagKind =
(Action == AA_Passing_CFAudited ?
diag::err_arc_typecheck_convert_incompatible_pointer :
@@ -10670,7 +10671,7 @@ bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy,
DstType = DstType.getUnqualifiedType();
}
else if (IsNSString && !Hint.isNull())
- DiagKind = diag::warn_missing_atsign_prefix;
+ DiagKind = diag::err_missing_atsign_prefix;
MayHaveConvFixit = true;
break;
case IncompatiblePointerSign:
OpenPOWER on IntegriCloud