<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div>Yay! But why is this under -Wobjc-literal-compare?</div><div><br></div><br><div><div>On Jun 10, 2013, at 16:51 , Fariborz Jahanian <<a href="mailto:fjahanian@apple.com">fjahanian@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">Author: fjahanian<br>Date: Mon Jun 10 18:51:51 2013<br>New Revision: 183713<br><br>URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project?rev=183713&view=rev">http://llvm.org/viewvc/llvm-project?rev=183713&view=rev</a><br>Log:<br>Objective-C [qoi]: Issue better warning when nsstring literal is missing<br>the '@'. PR16287 and //<span class="Apple-converted-space"> </span><a href="rdar://14106083">rdar://14106083</a><br><br>Modified:<br>   cfe/trunk/include/clang/Basic/DiagnosticGroups.td<br>   cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td<br>   cfe/trunk/lib/Sema/SemaExpr.cpp<br>   cfe/trunk/test/FixIt/fixit-objc.m<br><br>Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td<br>URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=183713&r1=183712&r2=183713&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=183713&r1=183712&r2=183713&view=diff</a><br>==============================================================================<br>--- cfe/trunk/include/clang/Basic/DiagnosticGroups.td (original)<br>+++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td Mon Jun 10 18:51:51 2013<br>@@ -539,8 +539,10 @@ def ObjCCocoaAPI : DiagGroup<"objc-cocoa<br>  ]>;<br><br>def ObjCStringComparison : DiagGroup<"objc-string-compare">;<br>+def ObjCLiteralMissingAtSign : DiagGroup<"objc-literal-missing-atsign">;<br>def ObjCLiteralComparison : DiagGroup<"objc-literal-compare", [<br>-    ObjCStringComparison<br>+    ObjCStringComparison,<br>+    ObjCLiteralMissingAtSign<br>  ]>;<br><br>// Inline ASM warnings.<br><br>Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td<br>URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=183713&r1=183712&r2=183713&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=183713&r1=183712&r2=183713&view=diff</a><br>==============================================================================<br>--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)<br>+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Mon Jun 10 18:51:51 2013<br>@@ -1879,6 +1879,8 @@ def warn_objc_literal_comparison : Warni<br>  "direct comparison of %select{an array literal|a dictionary literal|"<br>  "a numeric literal|a boxed expression|}0 has undefined behavior">,<br>  InGroup<ObjCLiteralComparison>;<br>+def warn_missing_atsign_prefix : Warning<<br>+  "string literal must be prefixed by '@' ">, InGroup<ObjCLiteralMissingAtSign>;<br>def warn_objc_string_literal_comparison : Warning<<br>  "direct comparison of a string literal has undefined behavior">,<span class="Apple-converted-space"> </span><br>  InGroup<ObjCStringComparison>;<br><br>Modified: cfe/trunk/lib/Sema/SemaExpr.cpp<br>URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=183713&r1=183712&r2=183713&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=183713&r1=183712&r2=183713&view=diff</a><br>==============================================================================<br>--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)<br>+++ cfe/trunk/lib/Sema/SemaExpr.cpp Mon Jun 10 18:51:51 2013<br>@@ -10195,7 +10195,8 @@ ExprResult Sema::ActOnGNUNullExpr(Source<br>}<br><br>static void MakeObjCStringLiteralFixItHint(Sema& SemaRef, QualType DstType,<br>-                                           Expr *SrcExpr, FixItHint &Hint) {<br>+                                           Expr *SrcExpr, FixItHint &Hint,<br>+                                           bool &IsNSString) {<br>  if (!SemaRef.getLangOpts().ObjC1)<br>    return;<br><br>@@ -10209,6 +10210,7 @@ static void MakeObjCStringLiteralFixItHi<br>    const ObjCInterfaceDecl *ID = PT->getInterfaceDecl();<br>    if (!ID || !ID->getIdentifier()->isStr("NSString"))<br>      return;<br>+    IsNSString = true;<br>  }<br><br>  // Ignore any parens, implicit casts (should only be<br>@@ -10242,6 +10244,7 @@ bool Sema::DiagnoseAssignmentResult(Assi<br>  ConversionFixItGenerator ConvHints;<br>  bool MayHaveConvFixit = false;<br>  bool MayHaveFunctionDiff = false;<br>+  bool IsNSString = false;<br><br>  switch (ConvTy) {<br>  case Compatible:<br>@@ -10259,7 +10262,7 @@ bool Sema::DiagnoseAssignmentResult(Assi<br>    MayHaveConvFixit = true;<br>    break;<br>  case IncompatiblePointer:<br>-    MakeObjCStringLiteralFixItHint(*this, DstType, SrcExpr, Hint);<br>+    MakeObjCStringLiteralFixItHint(*this, DstType, SrcExpr, Hint, IsNSString);<br>    DiagKind = diag::ext_typecheck_convert_incompatible_pointer;<br>    CheckInferredResultType = DstType->isObjCObjectPointerType() &&<br>      SrcType->isObjCObjectPointerType();<br>@@ -10270,6 +10273,8 @@ bool Sema::DiagnoseAssignmentResult(Assi<br>      SrcType = SrcType.getUnqualifiedType();<br>      DstType = DstType.getUnqualifiedType();<br>    }<br>+    else if (IsNSString && !Hint.isNull())<br>+      DiagKind = diag::warn_missing_atsign_prefix;<br>    MayHaveConvFixit = true;<br>    break;<br>  case IncompatiblePointerSign:<br><br>Modified: cfe/trunk/test/FixIt/fixit-objc.m<br>URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/FixIt/fixit-objc.m?rev=183713&r1=183712&r2=183713&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/FixIt/fixit-objc.m?rev=183713&r1=183712&r2=183713&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/FixIt/fixit-objc.m (original)<br>+++ cfe/trunk/test/FixIt/fixit-objc.m Mon Jun 10 18:51:51 2013<br>@@ -27,13 +27,13 @@ void g(NSString *a); // expected-note{{p<br>void h(id a); // expected-note 2{{passing argument to parameter 'a' here}}<br><br>void f(Test *t) {<br>-  NSString *a = "Foo"; // expected-warning {{incompatible pointer types initializing 'NSString *' with an expression of type 'char [4]'}}<br>+  NSString *a = "Foo"; // expected-warning {{string literal must be prefixed by '@'}}<br>  id b = "Foo"; // expected-warning {{incompatible pointer types initializing 'id' with an expression of type 'char [4]'}}<br>-  g("Foo"); // expected-warning{{incompatible pointer types passing 'char [4]' to parameter of type 'NSString *'}}<br>+  g("Foo"); // expected-warning {{string literal must be prefixed by '@'}}<br>  h("Foo"); // expected-warning{{incompatible pointer types passing 'char [4]' to parameter of type 'id'}}<br>  h(("Foo")); // expected-warning{{incompatible pointer types passing 'char [4]' to parameter of type 'id'}}<br>-  [t test:"Foo"]; // expected-warning{{incompatible pointer types sending 'char [4]' to parameter of type 'NSString *'}}<br>-  t.property = "Foo"; // expected-warning{{incompatible pointer types assigning to 'NSString *' from 'char [4]'}}<br>+  [t test:"Foo"]; // expected-warning {{string literal must be prefixed by '@'}}<br>+  t.property = "Foo"; // expected-warning {{string literal must be prefixed by '@'}}<br><br>  // <<a href="rdar://problem/6896493">rdar://problem/6896493</a>><br>  [t test:@"Foo"]]; // expected-error{{extraneous ']' before ';'}}<br><br><br>_______________________________________________<br>cfe-commits mailing list<br><a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br><a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a></div></blockquote></div><br></body></html>