diff --git a/lib/Sema/AnalysisBasedWarnings.cpp b/lib/Sema/AnalysisBasedWarnings.cpp
index 59c25d2..5688aac 100644
--- a/lib/Sema/AnalysisBasedWarnings.cpp
+++ b/lib/Sema/AnalysisBasedWarnings.cpp
@@ -180,8 +180,7 @@ static bool hasRecursiveCallInPath(const FunctionDecl *FD, CFGBlock &Block) {
       continue;
 
     const CallExpr *CE = dyn_cast<CallExpr>(B.getAs<CFGStmt>()->getStmt());
-    if (!CE || !CE->getCalleeDecl() ||
-        CE->getCalleeDecl()->getCanonicalDecl() != FD)
+    if (!CE || !CE->getCalleeDecl() || CE->getCalleeDecl() != FD)
       continue;
 
     // Skip function calls which are qualified with a templated class.
@@ -241,8 +240,6 @@ static void checkForFunctionCall(Sema &S, const FunctionDecl *FD,
 static void checkRecursiveFunction(Sema &S, const FunctionDecl *FD,
                                    const Stmt *Body,
                                    AnalysisDeclContext &AC) {
-  FD = FD->getCanonicalDecl();
-
   // Only run on non-templated functions and non-templated members of
   // templated classes.
   if (FD->getTemplatedKind() != FunctionDecl::TK_NonTemplate &&
diff --git a/test/SemaCXX/warn-infinite-recursion.cpp b/test/SemaCXX/warn-infinite-recursion.cpp
index e1b7c54..f45d1bd 100644
--- a/test/SemaCXX/warn-infinite-recursion.cpp
+++ b/test/SemaCXX/warn-infinite-recursion.cpp
@@ -150,3 +150,11 @@ int test_wrapper() {
 }
 
 int wrapper_sum = test_wrapper<2>();  // expected-note{{instantiation}}
+
+int test_overload(int x) {
+  return 0;
+}
+
+int test_overload(int *p) {
+  return test_overload(*p);
+}
