diff --git a/include/clang/AST/Decl.h b/include/clang/AST/Decl.h
index a35638f..e95f9bb 100644
--- a/include/clang/AST/Decl.h
+++ b/include/clang/AST/Decl.h
@@ -422,21 +422,6 @@
 
   void setPreviousDeclaration(VarDecl *PrevDecl);
 
-  /// \brief For multiple redeclarations returns the first one, otherwise
-  /// returns itself.
-  VarDecl *getFirstDeclaration();
-  const VarDecl *getFirstDeclaration() const {
-    return const_cast<VarDecl *>(this)->getFirstDeclaration();
-  }
-
-  /// \brief For multiple redeclarations returns the latest, otherwise
-  /// returns itself.
-  const VarDecl *getLatestDeclaration() const {
-    const VarDecl *First = getFirstDeclaration();
-    assert(First->PreviousDeclaration.getInt() == 1 && "Expected first");
-    return First->PreviousDeclaration.getPointer();
-  }
-
   virtual VarDecl *getCanonicalDecl();
 
   /// \brief Iterates through all the redeclarations of the same var decl.
@@ -891,21 +876,6 @@
     return const_cast<FunctionDecl *>(this)->getPreviousDeclaration();
   }
 
-  /// \brief For multiple redeclarations returns the first one, otherwise
-  /// returns itself.
-  FunctionDecl *getFirstDeclaration();
-  const FunctionDecl *getFirstDeclaration() const {
-    return const_cast<FunctionDecl *>(this)->getFirstDeclaration();
-  }
-
-  /// \brief For multiple redeclarations returns the latest, otherwise
-  /// returns itself.
-  const FunctionDecl *getLatestDeclaration() const {
-    const FunctionDecl *First = getFirstDeclaration();
-    assert(First->PreviousDeclaration.getInt() == 1 && "Expected first");
-    return First->PreviousDeclaration.getPointer();
-  }
-
   void setPreviousDeclaration(FunctionDecl * PrevDecl);
 
   virtual FunctionDecl *getCanonicalDecl();
diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp
index 0a6f28d..23782d6 100644
--- a/lib/AST/Decl.cpp
+++ b/lib/AST/Decl.cpp
@@ -369,7 +369,8 @@
     PreviousDeclaration.setInt(0);
     
     // First one will point to this one as latest.
-    VarDecl *First = PrevDecl->getFirstDeclaration();
+    // getCanonicalDecl returns the first one.
+    VarDecl *First = PrevDecl->getCanonicalDecl();
     assert(First->PreviousDeclaration.getInt() == 1 && "Expected first");
     First->PreviousDeclaration.setPointer(this);
   } else {
@@ -379,14 +380,6 @@
   }
 }
 
-VarDecl *VarDecl::getFirstDeclaration() {
-  VarDecl *First = this;
-  while (First->getPreviousDeclaration())
-    First = First->getPreviousDeclaration();
-
-  return First;
-}
-
 VarDecl *VarDecl::getCanonicalDecl() {
   VarDecl *Var = this;
   while (Var->getPreviousDeclaration())
@@ -599,7 +592,8 @@
     PreviousDeclaration.setInt(0);
     
     // First one will point to this one as latest.
-    FunctionDecl *First = PrevDecl->getFirstDeclaration();
+    // getCanonicalDecl returns the first one.
+    FunctionDecl *First = PrevDecl->getCanonicalDecl();
     assert(First->PreviousDeclaration.getInt() == 1 && "Expected first");
     First->PreviousDeclaration.setPointer(this);
   } else {
@@ -616,14 +610,6 @@
   }
 }
 
-FunctionDecl *FunctionDecl::getFirstDeclaration() {
-  FunctionDecl *First = this;
-  while (First->getPreviousDeclaration())
-    First = First->getPreviousDeclaration();
-
-  return First;
-}
-
 FunctionDecl *FunctionDecl::getCanonicalDecl() {
   FunctionDecl *FD = this;
   while (FD->getPreviousDeclaration())
