LGTM, but John should review it.
================
Comment at: lib/AST/VTableBuilder.cpp:2562
@@ +2561,3 @@
+
+ for (CXXRecordDecl::base_class_const_iterator I = RD->bases_begin(),
+ E = RD->bases_end(); I != E; ++I) {
----------------
Timur Iskhodzhanov wrote:
> Reid Kleckner wrote:
> > Timur Iskhodzhanov wrote:
> > > Reid Kleckner wrote:
> > > > Can you explain why we can't use the base subobjects from
> > > > FinalOverriders to get a list of all BaseSubobjects? Then we should be
> > > > able to find the base with the smallest offset.
> > > This might be possible, but I haven't found a simple way to do that...
> > > It's not "all subobjects" but rather "all the subobjects that have the
> > > same method declared", and even a bit more complex than that (see the O_o
> > > test for the reordered virtual bases).
> > I think I understand what this is doing now. Would this algorithm be
> > simpler (no recursion) and do the same thing?
> >
> > Call ComputeAllOverriddenMethods to get the set of all overridden methods.
> > Compute the set of bases in which those methods are declared. (getParent
> > loop)
> > Call MostDerived->lookupInBases(BaseInSet, &BaseSet, &Paths)
> > For all base paths, walk the path to compute the offsets using the funky
> > logic for virtual bases
> > Pick the minimum offset
> >
> > This could probably be improved to avoid the lookupInBases inside a loop
> > over every virtual method decl, but that's more of a FIXME level thing.
> Wow, it worked!
> Can't say the code is that shorter but yeah, it's definitely a bit easier to
> read.
Nice!
http://llvm-reviews.chandlerc.com/D1076
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits