Index: lib/CodeGen/CGCXXABI.h
===================================================================
--- lib/CodeGen/CGCXXABI.h	(revision 117218)
+++ lib/CodeGen/CGCXXABI.h	(working copy)
@@ -15,10 +15,13 @@
 #ifndef CLANG_CODEGEN_CXXABI_H
 #define CLANG_CODEGEN_CXXABI_H
 
+#include "clang/AST/ExprCXX.h"
+#include "CGCall.h"
 #include "CodeGenFunction.h"
 
 namespace llvm {
   class Constant;
+  class MDNode;
   class Type;
   class Value;
 
@@ -37,6 +40,7 @@
   class CodeGenFunction;
   class CodeGenModule;
   class MangleContext;
+  class CGRecordLayoutBuilder;
 
 /// Implements C++ ABI-specific code generation functions.
 class CGCXXABI {
@@ -45,7 +49,6 @@
 
   CGCXXABI(CodeGenModule &CGM) : CGM(CGM) {}
 
-protected:
   ImplicitParamDecl *&getThisDecl(CodeGenFunction &CGF) {
     return CGF.CXXThisDecl;
   }
@@ -78,6 +81,43 @@
   /// Gets the mangle context.
   virtual MangleContext &getMangleContext() = 0;
 
+  /// Gets the record layout builder.
+  virtual CGRecordLayoutBuilder &getRecordLayoutBuilder();
+
+  /// Lays out a class's virtual tables.
+  virtual llvm::Value *LayOutVTables(CXXRecordDecl *RD);
+
+  /// Emits RTTI information for a class.
+  virtual llvm::Value *EmitRTTIDescriptors(CXXRecordDecl *RD);
+
+  /// Emit a call to a virtual method.
+  virtual RValue EmitVirtualCall(CodeGenFunction &CGF,
+                                 CXXMethodDecl *MD,
+                                 ReturnValueSlot ReturnValue,
+                                 const CallArgList &Args,
+                                 const Decl *TargetDecl = 0,
+                                 llvm::Instruction **callOrInvoke = 0);
+  virtual RValue EmitVirtualCall(CodeGenFunction &CGF,
+                                 CXXMethodDecl *MD,
+                                 ReturnValueSlot ReturnValue,
+                                 CallExpr::const_arg_iterator ArgBeg,
+                                 CallExpr::const_arg_iterator ArgEnd,
+                                 const Decl *TargetDecl = 0);
+
+  /// Emit a load of a field in a C++ struct/class.
+  virtual llvm::Value *EmitLoadOfField(CodeGenFunction &CGF,
+                                       FieldDecl *FD,
+                                       CXXRecordDecl *RD,
+                                       llvm::Value *This,
+                                       llvm::MDNode *TBAAInfo = 0);
+  /// Emit a store of a field in a C++ struct/class.
+  virtual llvm::Value *EmitStoreOfField(CodeGenFunction &CGF,
+                                        FieldDecl *FD,
+                                        CXXRecordDecl *RD,
+                                        llvm::Value *Value,
+                                        llvm::Value *This,
+                                        llvm::MDNode *TBAAInfo = 0);
+
   /// Find the LLVM type used to represent the given member pointer
   /// type.
   virtual const llvm::Type *
