]> granicus.if.org Git - clang/commitdiff
We always want to create a virtual function pointer entry if the path from the derive...
authorAnders Carlsson <andersca@mac.com>
Sat, 28 Nov 2009 03:03:52 +0000 (03:03 +0000)
committerAnders Carlsson <andersca@mac.com>
Sat, 28 Nov 2009 03:03:52 +0000 (03:03 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90024 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGVtable.cpp

index 57a82876cf6c7da844488df5bcb39814f439bd20..a26a697250e8321089d5f6c07d88f77a8ac5f0af 100644 (file)
@@ -800,35 +800,13 @@ TypeConversionRequiresAdjustment(ASTContext &Ctx,
     return false;
   }
   
+  // If we found a virtual base we always want to require adjustment.
+  if (Paths.getDetectedVirtual())
+    return true;
+
   const CXXBasePath &Path = Paths.front();
   
-  size_t Start = 0, End = Path.size();
-  
-  // Check if we have a virtual base.
-  if (const RecordType *RT = Paths.getDetectedVirtual()) {
-    const CXXRecordDecl *VirtualBase = cast<CXXRecordDecl>(RT->getDecl());
-    assert(VirtualBase->isCanonicalDecl() && "Must have canonical decl!");
-    
-    // Check the virtual base class offset.
-    const ASTRecordLayout &Layout = Ctx.getASTRecordLayout(DerivedDecl);
-
-    if (Layout.getVBaseClassOffset(VirtualBase) != 0) {
-      // This requires an adjustment.
-      return true;
-    }
-    
-    // Now ignore all the path elements up to the virtual base.
-    // FIXME: It would be nice if CXXBasePaths could return an index to the
-    // CXXElementSpecifier that corresponded to the virtual base.
-    for (; Start != End; ++Start) {
-      const CXXBasePathElement& Element = Path[Start];
-      
-      if (Element.Class == VirtualBase)
-        break;
-    }
-  }
-
-  for (; Start != End; ++Start) {
+  for (size_t Start = 0, End = Path.size(); Start != End; ++Start) {
     const CXXBasePathElement &Element = Path[Start];
 
     // Check the base class offset.