Forgot to put the word "distinction" in the previous comment.

  Please take another look at the patch!


================
Comment at: lib/AST/VTableBuilder.cpp:2415-2416
@@ +2414,4 @@
+              BaseOffset = Layout.getBaseClassOffset(CurBase);
+    if (DerivedVBPtrOffset < BaseOffset)
+      continue;
+    const ASTRecordLayout &BaseLayout = Context.getASTRecordLayout(CurBase);
----------------
Reid Kleckner wrote:
> Can this happen?  I thought we always just used the first nvbase with vbases. 
>  If so, I'd make that the loop exit criteria, since it's simpler than this 
> vbptr offset comparison.
OK, I've removed this microoptimization and after some thought replaced 
"continue" below with "break".

================
Comment at: lib/CodeGen/MicrosoftVBTables.cpp:213
@@ -213,2 +212,3 @@
     Offset -= VBPtrSubobject.getBaseOffset() + VBPtrOffset;
-    Offsets.push_back(llvm::ConstantInt::get(CGM.IntTy, Offset.getQuantity()));
+    llvm::Constant *&VBOffset = Offsets[GetVBTableIndex(ReusingBase, VBase)];
+    assert(VBOffset == 0 && "The same vbindex seen twice?");
----------------
Reid Kleckner wrote:
> This is silly, we're walking the inheritance graph in a loop.  Make something 
> that returns the full BaseSetVectorTy, and we can use that to fill in this 
> table.
OK, I left the loop in place, but the getVBTableIndex results are now cached 
inside MicrosoftVTableContext. I don't think adding an extra interface function 
and an extra RD-to-Vector map is worth it for just one function using them.


http://llvm-reviews.chandlerc.com/D2089
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to