]> granicus.if.org Git - clang/commitdiff
Added transfer function support for __builtin_expect.
authorTed Kremenek <kremenek@apple.com>
Wed, 5 Mar 2008 22:59:42 +0000 (22:59 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 5 Mar 2008 22:59:42 +0000 (22:59 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47971 91177308-0d34-0410-b5e6-96231b3b80d8

Analysis/GRExprEngine.cpp

index fa623a49e43c26a5fee5332026316fdec4f1557c..3b4b787d6a69b907d8c6bd62d5cb96ec9515d4f7 100644 (file)
@@ -517,8 +517,21 @@ void GRExprEngine::VisitCall(CallExpr* CE, NodeTy* Pred,
       
       IdentifierInfo* Info = cast<lval::FuncVal>(L).getDecl()->getIdentifier();
       
-      if (Info->getBuiltinID())
-        invalidateArgs = true;
+      if (unsigned id = Info->getBuiltinID()) {
+        switch (id) {
+          case Builtin::BI__builtin_expect: {
+            // For __builtin_expect, just return the value of the subexpression.
+            assert (CE->arg_begin() != CE->arg_end());            
+            RVal X = GetRVal(St, *(CE->arg_begin()));
+            Nodify(Dst, CE, *DI, SetRVal(St, CE, X));
+            continue;            
+          }
+            
+          default:
+            invalidateArgs = true;
+            break;
+        }
+      }
     }
         
     if (invalidateArgs) {