]> granicus.if.org Git - clang/commitdiff
For floating point equality check, we now ignore parentheses. e.g.:
authorTed Kremenek <kremenek@apple.com>
Mon, 29 Oct 2007 16:45:23 +0000 (16:45 +0000)
committerTed Kremenek <kremenek@apple.com>
Mon, 29 Oct 2007 16:45:23 +0000 (16:45 +0000)
(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

Sema/SemaExpr.cpp

index 59cff7cc7d4bd100300d91151de45489d28a6f2f..1156bd7d4d1788c824cfbf2831418809dccae8a8 100644 (file)
@@ -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;