For floating point equality check, we now ignore parentheses. e.g.:

(x) == x  is the treated the same as x == x.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43448 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Ted Kremenek 2007-10-29 16:45:23 +00:00
Родитель 6a26155102
Коммит e780f0db9b
1 изменённых файлов: 16 добавлений и 2 удалений

Просмотреть файл

@ -1191,6 +1191,20 @@ inline QualType Sema::CheckShiftOperands( // C99 6.5.7
return QualType();
}
// Utility method to plow through parentheses to get the first nested
// non-ParenExpr expr.
static inline Expr* IgnoreParen(Expr* E) {
while (true) {
if (ParenExpr* P = dyn_cast<ParenExpr>(E))
E = P->getSubExpr();
else
break;
}
return E;
}
inline QualType Sema::CheckCompareOperands( // C99 6.5.8
Expr *&lex, Expr *&rex, SourceLocation loc, bool isRelational)
{
@ -1212,8 +1226,8 @@ inline QualType Sema::CheckCompareOperands( // C99 6.5.8
// Special case: check for x == x (which is OK).
bool EmitWarning = true;
if (DeclRefExpr* DRL = dyn_cast<DeclRefExpr>(lex))
if (DeclRefExpr* DRR = dyn_cast<DeclRefExpr>(rex))
if (DeclRefExpr* DRL = dyn_cast<DeclRefExpr>(IgnoreParen(lex)))
if (DeclRefExpr* DRR = dyn_cast<DeclRefExpr>(IgnoreParen(rex)))
if (DRL->getDecl() == DRR->getDecl())
EmitWarning = false;