From 95f49fb26637e0f271bca580e8e20ce3c08ac2e9 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 3 Apr 2009 21:11:28 +0000 Subject: [PATCH] improve the string literal comparison warning to not call @encode's "string literals". git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68407 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/DiagnosticSemaKinds.td | 4 ++-- lib/Sema/SemaExpr.cpp | 4 +++- test/SemaObjC/exprs.m | 2 ++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index 0a53a65e13..815b8b5ae6 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -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)">; diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index b3c8be49c9..55eaaa4bc8 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -3411,7 +3411,8 @@ QualType Sema::CheckCompareOperands(Expr *&lex, Expr *&rex, SourceLocation Loc, // operand is null), the user probably wants strcmp. if ((isa(LHSStripped) || isa(LHSStripped)) && !RHSStripped->isNullPointerConstant(Context)) - Diag(Loc, diag::warn_stringcompare) + Diag(Loc, diag::warn_stringcompare) + << isa(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(RHSStripped)) && !LHSStripped->isNullPointerConstant(Context)) Diag(Loc, diag::warn_stringcompare) + << isa(RHSStripped) << rex->getSourceRange() << CodeModificationHint::CreateReplacement(SourceRange(Loc), ", ") << CodeModificationHint::CreateInsertion(lex->getLocStart(), diff --git a/test/SemaObjC/exprs.m b/test/SemaObjC/exprs.m index 342449d997..d51d135fa2 100644 --- a/test/SemaObjC/exprs.m +++ b/test/SemaObjC/exprs.m @@ -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}} } -- 2.40.0