http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51712

--- Comment #2 from Jonathan Nieder <jrnieder at gmail dot com> 2012-03-26 
20:12:17 UTC ---
Clang does not consider "arg >= FOO" to be a comparison against 0.

| commit e3b159c0
| Author: Ted Kremenek <kreme...@apple.com>
| Date:   Thu Sep 23 21:43:44 2010 +0000
|
|     When warning about comparing an unsigned int to being >= 0, don't issue a
warning if the zero value was an
|     enum or was expanded from a macro.
|
|     Fixes: <rdar://problem/8414119>
|
|     git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@114695
91177308-0d34-0410-b5e6-96231b3b80d8
|
| diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp
| index 790e7671..c4e86875 100644
| --- a/lib/Sema/SemaChecking.cpp
| +++ b/lib/Sema/SemaChecking.cpp
| @@ -2449,7 +2449,17 @@ bool IsSameFloatAfterCast(const APValue &value,
|  
|  void AnalyzeImplicitConversions(Sema &S, Expr *E);
|  
| -bool IsZero(Sema &S, Expr *E) {
| +static bool IsZero(Sema &S, Expr *E) {
| +  // Suppress cases where we are comparing against an enum constant.
| +  if (const DeclRefExpr *DR =
| +      dyn_cast<DeclRefExpr>(E->IgnoreParenImpCasts()))
| +    if (isa<EnumConstantDecl>(DR->getDecl()))
| +      return false;
| +
| +  // Suppress cases where the '0' value is expanded from a macro.
| +  if (E->getLocStart().isMacroID())
| +    return false;
| +
|    llvm::APSInt Value;
|    return E->isIntegerConstantExpr(Value, S.Context) && Value == 0;
|  }
[...]

Reply via email to