]> granicus.if.org Git - clang/commitdiff
improve the string literal comparison warning to not call @encode's "string literals".
authorChris Lattner <sabre@nondot.org>
Fri, 3 Apr 2009 21:11:28 +0000 (21:11 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 3 Apr 2009 21:11:28 +0000 (21:11 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68407 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaExpr.cpp
test/SemaObjC/exprs.m

index 0a53a65e138f00bb9b6ea996103438bbe6b0733e..815b8b5ae639b93129864b6b52b2cf43fc430d58 100644 (file)
@@ -1417,8 +1417,8 @@ def warn_ret_stack_ref : Warning<
 def warn_selfcomparison : Warning<
   "self-comparison always results in a constant value">;
 def warn_stringcompare : Warning<
-  "result of comparison against a string literal is unspecified "
-  "(use strcmp?)">;
+  "result of comparison against %select{a string literal|@encode}0 is "
+  "unspecified (use strcmp instead)">;
 
 
 
index b3c8be49c981bc54dd6bbe721ce567dc3b421712..55eaaa4bc868fd987810549712d38b01e9604aa1 100644 (file)
@@ -3411,7 +3411,8 @@ QualType Sema::CheckCompareOperands(Expr *&lex, Expr *&rex, SourceLocation Loc,
     // operand is null), the user probably wants strcmp.
     if ((isa<StringLiteral>(LHSStripped) || isa<ObjCEncodeExpr>(LHSStripped)) &&
         !RHSStripped->isNullPointerConstant(Context))
-      Diag(Loc, diag::warn_stringcompare) 
+      Diag(Loc, diag::warn_stringcompare)
+        << isa<ObjCEncodeExpr>(LHSStripped)
         << lex->getSourceRange()
         << CodeModificationHint::CreateReplacement(SourceRange(Loc), ", ")
         << CodeModificationHint::CreateInsertion(lex->getLocStart(),
@@ -3423,6 +3424,7 @@ QualType Sema::CheckCompareOperands(Expr *&lex, Expr *&rex, SourceLocation Loc,
               isa<ObjCEncodeExpr>(RHSStripped)) &&
              !LHSStripped->isNullPointerConstant(Context))
       Diag(Loc, diag::warn_stringcompare) 
+        << isa<ObjCEncodeExpr>(RHSStripped)
         << rex->getSourceRange()
         << CodeModificationHint::CreateReplacement(SourceRange(Loc), ", ")
         << CodeModificationHint::CreateInsertion(lex->getLocStart(),
index 342449d99752dfcb2b9324cec6313b23c22a69cc..d51d135fa27a5be9c05c89c0b6b7e4f667af8728 100644 (file)
@@ -15,5 +15,7 @@ void test2() {
             "bar"
            @"baz"
            " b\0larg";  // expected-warning {{literal contains NUL character}}
+
   
+  if (@encode(int) == "foo") { }  // expected-warning {{result of comparison against @encode is unspecified}}
 }