@@ -10587,22 +10587,23 @@ ExprResult Sema::ActOnGNUNullExpr(SourceLocation TokenLoc) {
10587
10587
return Owned(new (Context) GNUNullExpr(Ty, TokenLoc));
10588
10588
}
10589
10589
10590
- static void MakeObjCStringLiteralFixItHint(Sema& SemaRef, QualType DstType,
10591
- Expr *SrcExpr, FixItHint &Hint,
10592
- bool &IsNSString) {
10593
- if (!SemaRef.getLangOpts().ObjC1)
10594
- return;
10590
+ StringLiteral *
10591
+ Sema::ConversionToObjCStringLiteralCheck(QualType DstType,
10592
+ Expr *SrcExpr, FixItHint &Hint,
10593
+ bool &IsNSString) {
10594
+ if (!getLangOpts().ObjC1)
10595
+ return 0;
10595
10596
10596
10597
const ObjCObjectPointerType *PT = DstType->getAs<ObjCObjectPointerType>();
10597
10598
if (!PT)
10598
- return;
10599
+ return 0 ;
10599
10600
10600
10601
// Check if the destination is of type 'id'.
10601
10602
if (!PT->isObjCIdType()) {
10602
10603
// Check if the destination is the 'NSString' interface.
10603
10604
const ObjCInterfaceDecl *ID = PT->getInterfaceDecl();
10604
10605
if (!ID || !ID->getIdentifier()->isStr("NSString"))
10605
- return;
10606
+ return 0 ;
10606
10607
IsNSString = true;
10607
10608
}
10608
10609
@@ -10616,9 +10617,9 @@ static void MakeObjCStringLiteralFixItHint(Sema& SemaRef, QualType DstType,
10616
10617
10617
10618
StringLiteral *SL = dyn_cast<StringLiteral>(SrcExpr);
10618
10619
if (!SL || !SL->isAscii())
10619
- return;
10620
-
10620
+ return 0;
10621
10621
Hint = FixItHint::CreateInsertion(SL->getLocStart(), "@");
10622
+ return SL;
10622
10623
}
10623
10624
10624
10625
bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy,
@@ -10655,7 +10656,7 @@ bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy,
10655
10656
MayHaveConvFixit = true;
10656
10657
break;
10657
10658
case IncompatiblePointer:
10658
- MakeObjCStringLiteralFixItHint(*this, DstType, SrcExpr, Hint, IsNSString);
10659
+ ConversionToObjCStringLiteralCheck( DstType, SrcExpr, Hint, IsNSString);
10659
10660
DiagKind =
10660
10661
(Action == AA_Passing_CFAudited ?
10661
10662
diag::err_arc_typecheck_convert_incompatible_pointer :
@@ -10670,7 +10671,7 @@ bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy,
10670
10671
DstType = DstType.getUnqualifiedType();
10671
10672
}
10672
10673
else if (IsNSString && !Hint.isNull())
10673
- DiagKind = diag::warn_missing_atsign_prefix ;
10674
+ DiagKind = diag::err_missing_atsign_prefix ;
10674
10675
MayHaveConvFixit = true;
10675
10676
break;
10676
10677
case IncompatiblePointerSign:
0 commit comments