]> granicus.if.org Git - clang/commitdiff
Convert NonVirtual parameter of ApplyNonVirtualAndVirtualOffset() to
authorKen Dyck <kd@kendyck.com>
Wed, 23 Mar 2011 00:45:26 +0000 (00:45 +0000)
committerKen Dyck <kd@kendyck.com>
Wed, 23 Mar 2011 00:45:26 +0000 (00:45 +0000)
CharUnits. No change in functionality intended.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@128126 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGClass.cpp

index 69fcf9010bcbfef8f984bbbe4fea1646b667d7a3..921c8133d702e79f3d623029a3542fa3c50f0316 100644 (file)
@@ -106,13 +106,14 @@ CodeGenFunction::GetAddressOfDirectBaseInCompleteClass(llvm::Value *This,
 
 static llvm::Value *
 ApplyNonVirtualAndVirtualOffset(CodeGenFunction &CGF, llvm::Value *ThisPtr,
-                                uint64_t NonVirtual, llvm::Value *Virtual) {
+                                CharUnits NonVirtual, llvm::Value *Virtual) {
   const llvm::Type *PtrDiffTy = 
     CGF.ConvertType(CGF.getContext().getPointerDiffType());
   
   llvm::Value *NonVirtualOffset = 0;
-  if (NonVirtual)
-    NonVirtualOffset = llvm::ConstantInt::get(PtrDiffTy, NonVirtual);
+  if (!NonVirtual.isZero())
+    NonVirtualOffset = llvm::ConstantInt::get(PtrDiffTy, 
+                                              NonVirtual.getQuantity());
   
   llvm::Value *BaseOffset;
   if (Virtual) {
@@ -194,7 +195,7 @@ CodeGenFunction::GetAddressOfBaseClass(llvm::Value *Value,
 
   // Apply the offsets.
   Value = ApplyNonVirtualAndVirtualOffset(*this, Value, 
-                                          NonVirtualOffset.getQuantity(),
+                                          NonVirtualOffset,
                                           VirtualOffset);
   
   // Cast back.
@@ -1367,23 +1368,25 @@ CodeGenFunction::InitializeVTablePointer(BaseSubobject Base,
 
   // Compute where to store the address point.
   llvm::Value *VirtualOffset = 0;
-  uint64_t NonVirtualOffset = 0;
+  CharUnits NonVirtualOffset = CharUnits::Zero();
   
   if (CodeGenVTables::needsVTTParameter(CurGD) && NearestVBase) {
     // We need to use the virtual base offset offset because the virtual base
     // might have a different offset in the most derived class.
     VirtualOffset = GetVirtualBaseClassOffset(LoadCXXThis(), VTableClass, 
                                               NearestVBase);
-    NonVirtualOffset = OffsetFromNearestVBase / 8;
+    NonVirtualOffset = 
+      CGM.getContext().toCharUnitsFromBits(OffsetFromNearestVBase);
   } else {
     // We can just use the base offset in the complete class.
-    NonVirtualOffset = Base.getBaseOffset() / 8;
+    NonVirtualOffset = 
+      CGM.getContext().toCharUnitsFromBits(Base.getBaseOffset());
   }
   
   // Apply the offsets.
   llvm::Value *VTableField = LoadCXXThis();
   
-  if (NonVirtualOffset || VirtualOffset)
+  if (!NonVirtualOffset.isZero() || VirtualOffset)
     VTableField = ApplyNonVirtualAndVirtualOffset(*this, VTableField, 
                                                   NonVirtualOffset,
                                                   VirtualOffset);