diff --git a/include/clang/AST/Expr.h b/include/clang/AST/Expr.h
index 1fc35ba..9d967de 100644
--- a/include/clang/AST/Expr.h
+++ b/include/clang/AST/Expr.h
@@ -964,7 +964,10 @@
   const Expr *getCallee() const { return cast<Expr>(SubExprs[FN]); }
   Expr *getCallee() { return cast<Expr>(SubExprs[FN]); }
   void setCallee(Expr *F) { SubExprs[FN] = F; }
-  
+
+  /// \brief If the callee is a FunctionDecl, return it. Otherwise return 0.
+  FunctionDecl *getDirectCallee();
+
   /// getNumArgs - Return the number of actual arguments to this call.
   ///
   unsigned getNumArgs() const { return NumArgs; }
diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp
index 63a6d31..320a4f1 100644
--- a/lib/AST/Expr.cpp
+++ b/lib/AST/Expr.cpp
@@ -224,6 +224,16 @@
   C.Deallocate(this);
 }
 
+FunctionDecl *CallExpr::getDirectCallee() {
+  Expr *CEE = getCallee()->IgnoreParenCasts();
+  if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CEE)) {
+    // FIXME: We can follow objective-c methods and C++ member functions...
+    return dyn_cast<FunctionDecl>(DRE->getDecl());
+  }
+
+  return 0;
+}
+
 /// setNumArgs - This changes the number of arguments present in this call.
 /// Any orphaned expressions are deleted by this, and any new operands are set
 /// to null.
diff --git a/lib/Analysis/CFG.cpp b/lib/Analysis/CFG.cpp
index 884bc17..02fe22c 100644
--- a/lib/Analysis/CFG.cpp
+++ b/lib/Analysis/CFG.cpp
@@ -475,14 +475,9 @@
   case Stmt::CallExprClass: {
     bool NoReturn = false;
     CallExpr *C = cast<CallExpr>(Terminator);
-    Expr *CEE = C->getCallee()->IgnoreParenCasts();
-    if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CEE)) {
-      // FIXME: We can follow objective-c methods and C++ member functions...
-      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(DRE->getDecl())) {
-        if (FD->hasAttr<NoReturnAttr>())
-          NoReturn = true;
-      }
-    }
+    if (FunctionDecl *FD = C->getDirectCallee())
+      if (FD->hasAttr<NoReturnAttr>())
+        NoReturn = true;
 
     if (!NoReturn)
       break;
diff --git a/lib/Analysis/CallGraph.cpp b/lib/Analysis/CallGraph.cpp
index 16f14d7..d49e8ec 100644
--- a/lib/Analysis/CallGraph.cpp
+++ b/lib/Analysis/CallGraph.cpp
@@ -66,21 +66,10 @@
 }
 
 void CGBuilder::VisitCallExpr(CallExpr *CE) {
-  Expr *Callee = CE->getCallee();
-
-  if (CastExpr *CE = dyn_cast<CastExpr>(Callee))
-    Callee = CE->getSubExpr();
-
-  if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Callee)) {
-    Decl *D = DRE->getDecl();
-    if (FunctionDecl *CalleeDecl = dyn_cast<FunctionDecl>(D)) {
-
-      Entity *Ent = Entity::get(CalleeDecl, G.getProgram());
-
-      CallGraphNode *CalleeNode = G.getOrInsertFunction(Ent);
-
-      CallerNode->addCallee(ASTLocation(FD, CE), CalleeNode);
-    }
+  if (FunctionDecl *CalleeDecl = CE->getDirectCallee()) {
+    Entity *Ent = Entity::get(CalleeDecl, G.getProgram());
+    CallGraphNode *CalleeNode = G.getOrInsertFunction(Ent);
+    CallerNode->addCallee(ASTLocation(FD, CE), CalleeNode);
   }
 }
 
