diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index 500d73e..27455db 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -5951,7 +5951,7 @@
 
   case CXXDestructor:
     if (RD->hasUserDeclaredDestructor()) {
-      SourceLocation DtorLoc = RD->getDestructor(Context)->getLocation();
+      SourceLocation DtorLoc = RD->getDestructor()->getLocation();
       Diag(DtorLoc, diag::note_nontrivial_user_defined) << QT << member;
       return;
     }
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp
index 62dd5ff..9273780 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -2230,7 +2230,7 @@
     if (FieldClassDecl->hasTrivialDestructor())
       continue;
 
-    CXXDestructorDecl *Dtor = FieldClassDecl->getDestructor(Context);
+    CXXDestructorDecl *Dtor = FieldClassDecl->getDestructor();
     CheckDestructorAccess(Field->getLocation(), Dtor,
                           PDiag(diag::err_access_dtor_field)
                             << Field->getDeclName()
@@ -2256,7 +2256,7 @@
     if (BaseClassDecl->hasTrivialDestructor())
       continue;
 
-    CXXDestructorDecl *Dtor = BaseClassDecl->getDestructor(Context);
+    CXXDestructorDecl *Dtor = BaseClassDecl->getDestructor();
 
     // FIXME: caret should be on the start of the class name
     CheckDestructorAccess(Base->getSourceRange().getBegin(), Dtor,
@@ -2283,7 +2283,7 @@
     if (BaseClassDecl->hasTrivialDestructor())
       continue;
 
-    CXXDestructorDecl *Dtor = BaseClassDecl->getDestructor(Context);
+    CXXDestructorDecl *Dtor = BaseClassDecl->getDestructor();
     CheckDestructorAccess(ClassDecl->getLocation(), Dtor,
                           PDiag(diag::err_access_dtor_vbase)
                             << VBase->getType());
@@ -2893,7 +2893,7 @@
          B != BEnd; ++B) {
       if (const RecordType *BaseType = B->getType()->getAs<RecordType>())
         ExceptSpec.CalledDecl(
-              cast<CXXRecordDecl>(BaseType->getDecl())->getDestructor(Context));
+                    cast<CXXRecordDecl>(BaseType->getDecl())->getDestructor());
     }
          
     // Virtual base-class destructors.
@@ -2902,7 +2902,7 @@
          B != BEnd; ++B) {
       if (const RecordType *BaseType = B->getType()->getAs<RecordType>())
         ExceptSpec.CalledDecl(
-              cast<CXXRecordDecl>(BaseType->getDecl())->getDestructor(Context));
+                    cast<CXXRecordDecl>(BaseType->getDecl())->getDestructor());
     }
 
     // Field destructors.
@@ -2912,7 +2912,7 @@
       if (const RecordType *RecordTy
                 = Context.getBaseElementType(F->getType())->getAs<RecordType>())
         ExceptSpec.CalledDecl(
-              cast<CXXRecordDecl>(RecordTy->getDecl())->getDestructor(Context));
+                    cast<CXXRecordDecl>(RecordTy->getDecl())->getDestructor());
     }
     
     QualType Ty = Context.getFunctionType(Context.VoidTy,
@@ -5057,7 +5057,7 @@
   CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Record->getDecl());
   if (!ClassDecl->isInvalidDecl() && !VD->isInvalidDecl() &&
       !ClassDecl->hasTrivialDestructor() && !ClassDecl->isDependentContext()) {
-    CXXDestructorDecl *Destructor = ClassDecl->getDestructor(Context);
+    CXXDestructorDecl *Destructor = ClassDecl->getDestructor();
     MarkDeclarationReferenced(VD->getLocation(), Destructor);
     CheckDestructorAccess(VD->getLocation(), Destructor,
                           PDiag(diag::err_access_dtor_var)
@@ -6529,7 +6529,7 @@
                                                         ->getAs<RecordType>()) {
                     CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());
         if (CXXDestructorDecl *Destructor
-              = const_cast<CXXDestructorDecl*>(RD->getDestructor(Context))) {
+                        = const_cast<CXXDestructorDecl*>(RD->getDestructor())) {
           MarkDeclarationReferenced(Field->getLocation(), Destructor);
           CheckDestructorAccess(Field->getLocation(), Destructor,
                             PDiag(diag::err_access_dtor_ivar)
diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp
index 3c64584..7793046 100644
--- a/lib/Sema/SemaExprCXX.cpp
+++ b/lib/Sema/SemaExprCXX.cpp
@@ -473,8 +473,8 @@
   if (RD->hasTrivialDestructor())
     return false;
 
-  CXXDestructorDecl *Destructor =
-    const_cast<CXXDestructorDecl*>(RD->getDestructor(Context));
+  CXXDestructorDecl *Destructor 
+    = const_cast<CXXDestructorDecl*>(RD->getDestructor());
   if (!Destructor)
     return false;
 
@@ -1475,7 +1475,7 @@
         return ExprError();
       
       if (!RD->hasTrivialDestructor())
-        if (const CXXDestructorDecl *Dtor = RD->getDestructor(Context))
+        if (const CXXDestructorDecl *Dtor = RD->getDestructor())
           MarkDeclarationReferenced(StartLoc,
                                     const_cast<CXXDestructorDecl*>(Dtor));
     }
@@ -2639,11 +2639,10 @@
   if (RD->hasTrivialDestructor())
     return Owned(E);
 
-  CXXTemporary *Temp = CXXTemporary::Create(Context,
-                                            RD->getDestructor(Context));
+  CXXTemporary *Temp = CXXTemporary::Create(Context, RD->getDestructor());
   ExprTemporaries.push_back(Temp);
   if (CXXDestructorDecl *Destructor =
-        const_cast<CXXDestructorDecl*>(RD->getDestructor(Context))) {
+        const_cast<CXXDestructorDecl*>(RD->getDestructor())) {
     MarkDeclarationReferenced(E->getExprLoc(), Destructor);
     CheckDestructorAccess(E->getExprLoc(), Destructor,
                           PDiag(diag::err_access_dtor_temp)
diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp
index 3acec56..c156962 100644
--- a/lib/Sema/SemaInit.cpp
+++ b/lib/Sema/SemaInit.cpp
@@ -3709,7 +3709,7 @@
         QualType T = CurInitExpr->getType();
         if (const RecordType *Record = T->getAs<RecordType>()) {
           CXXDestructorDecl *Destructor
-            = cast<CXXRecordDecl>(Record->getDecl())->getDestructor(S.Context);
+            = cast<CXXRecordDecl>(Record->getDecl())->getDestructor();
           S.CheckDestructorAccess(CurInitExpr->getLocStart(), Destructor, 
                                   S.PDiag(diag::err_access_dtor_temp) << T);
           S.MarkDeclarationReferenced(CurInitExpr->getLocStart(), Destructor);
