зеркало из https://github.com/microsoft/clang-1.git
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:
Родитель
6a26155102
Коммит
e780f0db9b
|
@ -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;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче