]> granicus.if.org Git - clang/commitdiff
RenameGetAddressOfBaseOfCompleteClass to GetAddressOfDirectBaseInCompleteClass to...
authorAnders Carlsson <andersca@mac.com>
Sat, 24 Apr 2010 23:01:49 +0000 (23:01 +0000)
committerAnders Carlsson <andersca@mac.com>
Sat, 24 Apr 2010 23:01:49 +0000 (23:01 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102284 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGClass.cpp
lib/CodeGen/CodeGenFunction.h

index bc0662db9cc4a93b38cc9bc716ee0a29c97e3e18..3fa8680b76cce6ea5e9b5791facc5b1e7de89fe5 100644 (file)
@@ -90,16 +90,16 @@ CodeGenModule::GetNonVirtualBaseClassOffset(const CXXRecordDecl *ClassDecl,
   return llvm::ConstantInt::get(PtrDiffTy, Offset);
 }
 
-/// Gets the address of a virtual base class within a complete object.
+/// Gets the address of a direct base class within a complete object.
 /// This should only be used for (1) non-virtual bases or (2) virtual bases
 /// when the type is known to be complete (e.g. in complete destructors).
 ///
 /// The object pointed to by 'This' is assumed to be non-null.
 llvm::Value *
-CodeGenFunction::GetAddressOfBaseOfCompleteClass(llvm::Value *This,
-                                                 bool isBaseVirtual,
-                                                 const CXXRecordDecl *Derived,
-                                                 const CXXRecordDecl *Base) {
+CodeGenFunction::GetAddressOfDirectBaseInCompleteClass(llvm::Value *This,
+                                                   const CXXRecordDecl *Derived,
+                                                   const CXXRecordDecl *Base,
+                                                   bool BaseIsVirtual) {
   // 'this' must be a pointer (in some address space) to Derived.
   assert(This->getType()->isPointerTy() &&
          cast<llvm::PointerType>(This->getType())->getElementType()
@@ -108,7 +108,7 @@ CodeGenFunction::GetAddressOfBaseOfCompleteClass(llvm::Value *This,
   // Compute the offset of the virtual base.
   uint64_t Offset;
   const ASTRecordLayout &Layout = getContext().getASTRecordLayout(Derived);
-  if (isBaseVirtual)
+  if (BaseIsVirtual)
     Offset = Layout.getVBaseClassOffset(Base);
   else
     Offset = Layout.getBaseClassOffset(Base);
@@ -155,7 +155,7 @@ ApplyNonVirtualAndVirtualOffset(CodeGenFunction &CGF, llvm::Value *ThisPtr,
 
 llvm::Value *
 CodeGenFunction::GetAddressOfBaseClass(llvm::Value *Value, 
-                                       const CXXRecordDecl *ClassDecl,
+                                       const CXXRecordDecl *Derived,
                                        const CXXBaseSpecifierArray &BasePath, 
                                        bool NullCheckValue) {
   assert(!BasePath.empty() && "Base path should not be empty!");
@@ -171,7 +171,7 @@ CodeGenFunction::GetAddressOfBaseClass(llvm::Value *Value,
   }
   
   uint64_t NonVirtualOffset = 
-    ComputeNonVirtualBaseClassOffset(getContext(), VBase ? VBase : ClassDecl,
+    ComputeNonVirtualBaseClassOffset(getContext(), VBase ? VBase : Derived,
                                      Start, BasePath.end());
 
   // Get the base pointer type.
@@ -202,7 +202,7 @@ CodeGenFunction::GetAddressOfBaseClass(llvm::Value *Value,
   llvm::Value *VirtualOffset = 0;
 
   if (VBase)
-    VirtualOffset = GetVirtualBaseClassOffset(Value, ClassDecl, VBase);
+    VirtualOffset = GetVirtualBaseClassOffset(Value, Derived, VBase);
 
   // Apply the offsets.
   Value = ApplyNonVirtualAndVirtualOffset(*this, Value, NonVirtualOffset, 
@@ -296,18 +296,17 @@ CodeGenFunction::OldGetAddressOfBaseClass(llvm::Value *Value,
 
 llvm::Value *
 CodeGenFunction::GetAddressOfDerivedClass(llvm::Value *Value,
-                                          const CXXRecordDecl *DerivedClass,
+                                          const CXXRecordDecl *Derived,
                                           const CXXBaseSpecifierArray &BasePath,
                                           bool NullCheckValue) {
   assert(!BasePath.empty() && "Base path should not be empty!");
 
   QualType DerivedTy =
-    getContext().getCanonicalType(
-    getContext().getTypeDeclType(const_cast<CXXRecordDecl*>(DerivedClass)));
+    getContext().getCanonicalType(getContext().getTagDeclType(Derived));
   const llvm::Type *DerivedPtrTy = ConvertType(DerivedTy)->getPointerTo();
   
   llvm::Value *NonVirtualOffset =
-    CGM.GetNonVirtualBaseClassOffset(DerivedClass, BasePath);
+    CGM.GetNonVirtualBaseClassOffset(Derived, BasePath);
   
   if (!NonVirtualOffset) {
     // No offset, we can just cast back.
@@ -837,9 +836,10 @@ static void EmitBaseInitializer(CodeGenFunction &CGF,
 
   // We can pretend to be a complete class because it only matters for
   // virtual bases, and we only do virtual bases for complete ctors.
-  llvm::Value *V = ThisPtr;
-  V = CGF.GetAddressOfBaseOfCompleteClass(V, isBaseVirtual,
-                                          ClassDecl, BaseClassDecl);
+  llvm::Value *V = 
+    CGF.GetAddressOfDirectBaseInCompleteClass(ThisPtr, ClassDecl,
+                                              BaseClassDecl, 
+                                              BaseInit->isBaseVirtual());
 
   CGF.EmitAggExpr(BaseInit->getInit(), V, false, false, true);
   
@@ -1154,10 +1154,10 @@ void CodeGenFunction::EmitDtorEpilogue(const CXXDestructorDecl *DD,
       if (BaseClassDecl->hasTrivialDestructor())
         continue;
       const CXXDestructorDecl *D = BaseClassDecl->getDestructor(getContext());
-      llvm::Value *V = GetAddressOfBaseOfCompleteClass(LoadCXXThis(),
-                                                       true,
-                                                       ClassDecl,
-                                                       BaseClassDecl);
+      llvm::Value *V = 
+        GetAddressOfDirectBaseInCompleteClass(LoadCXXThis(),
+                                              ClassDecl, BaseClassDecl,
+                                              /*BaseIsVirtual=*/true);
       EmitCXXDestructorCall(D, Dtor_Base, V);
     }
     return;
index 3e27e94cd5967ac12ec4798e699c6eee046cda18..b862ef50880080c245205248df63e3e1a2776e42 100644 (file)
@@ -775,11 +775,12 @@ public:
   }
 
   /// GetAddressOfBaseOfCompleteClass - Convert the given pointer to a
-  /// complete class down to one of its virtual bases.
-  llvm::Value *GetAddressOfBaseOfCompleteClass(llvm::Value *Value,
-                                               bool IsVirtual,
-                                               const CXXRecordDecl *Derived,
-                                               const CXXRecordDecl *Base);
+  /// complete class to the given direct base.
+  llvm::Value *
+  GetAddressOfDirectBaseInCompleteClass(llvm::Value *Value,
+                                        const CXXRecordDecl *Derived,
+                                        const CXXRecordDecl *Base,
+                                        bool BaseIsVirtual);
 
   llvm::Value *OldGetAddressOfBaseClass(llvm::Value *Value,
                                         const CXXRecordDecl *ClassDecl,
@@ -788,12 +789,12 @@ public:
   /// GetAddressOfBaseClass - This function will add the necessary delta to the
   /// load of 'this' and returns address of the base class.
   llvm::Value *GetAddressOfBaseClass(llvm::Value *Value, 
-                                     const CXXRecordDecl *ClassDecl,
+                                     const CXXRecordDecl *Derived,
                                      const CXXBaseSpecifierArray &BasePath, 
                                      bool NullCheckValue);
 
   llvm::Value *GetAddressOfDerivedClass(llvm::Value *Value,
-                                        const CXXRecordDecl *DerivedClassDecl,
+                                        const CXXRecordDecl *Derived,
                                         const CXXBaseSpecifierArray &BasePath,
                                         bool NullCheckValue);