Split out overriding.  WIP.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80732 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGCXX.cpp b/lib/CodeGen/CGCXX.cpp
index 8f91473..97837b3 100644
--- a/lib/CodeGen/CGCXX.cpp
+++ b/lib/CodeGen/CGCXX.cpp
@@ -892,13 +892,10 @@
     SeenVBase.clear();
   }
 
-  void AddMethod(const CXXMethodDecl *MD, Index_t AddressPoint,
-                 bool MorallyVirtual, Index_t Offset) {
+  bool OverrideMethod(const CXXMethodDecl *MD, llvm::Constant *m,
+                      bool MorallyVirtual, Index_t Offset) {
     typedef CXXMethodDecl::method_iterator meth_iter;
 
-    llvm::Constant *m;
-    m = wrap(CGM.GetAddrOfFunction(GlobalDecl(MD), Ptr8Ty));
-
     // FIXME: Don't like the nested loops.  For very large inheritance
     // heirarchies we could have a table on the side with the final overridder
     // and just replace each instance of an overridden method once.  Would be
@@ -925,11 +922,21 @@
             VCalls[VCall[OMD]] = Offset/8 - VCallOffset[OMD];
           }
           // submethods[VCall[OMD]] = wrap(Offset/8 - VCallOffset[OMD]);
-          return;
+          return true;
         }
       }
     }
 
+    return false;
+  }
+
+  void AddMethod(const CXXMethodDecl *MD, Index_t AddressPoint,
+                 bool MorallyVirtual, Index_t Offset) {
+    llvm::Constant *m;
+    m = wrap(CGM.GetAddrOfFunction(GlobalDecl(MD), Ptr8Ty));
+    if (OverrideMethod(MD, m, MorallyVirtual, Offset))
+      return;
+    
     // else allocate a new slot.
     Index[MD] = submethods.size();
     // VCall[MD] = Offset;