[PATCH] Get rid of VTableContext::ComputeMethodVTableIndices() and VTableContext::getNumVirtualFunctionPointers()

Timur Iskhodzhanov timurrrr at google.com
Mon May 13 12:10:35 PDT 2013



================
Comment at: lib/AST/VTableBuilder.cpp:2319
@@ -2318,3 @@
-    //   If a class has an implicitly-defined virtual destructor, 
-    //   its entries come after the declared virtual function pointers.
-
----------------
Reid Kleckner wrote:
> Timur Iskhodzhanov wrote:
> > Reid Kleckner wrote:
> > > I don't think Test16::D triggers this case because ~D is overriding ~C, so it goes into the vtable first.
> > > 
> > > When can you have an implicitly defined virtual dtor without overriding the method of a base class?  Is that possible? Good question for Richard or John.
> > Err, no.
> > There's no ~D in Test16:D.
> > 
> >   struct C : ... { virtual ~C(); };
> >   struct D : virtual C {
> >     virtual void f(); 
> >   };
> > 
> > So C has virtual ~C, thus D should have a virtual dtor.
> > AFAIU, as there's no explicit ~D, there should be an implicit one.
> > 
> > Does that sound right?
> Yes, it's implicit, but it wasn't triggering this code, because it should always hit the codepath for overrides and continue the loop before setting ImplicitVirtualDtor.  I'm looking for a counterexample to show that this code isn't dead.
Errr, it **was** trigerring this code.

I found it by locally replacing the below

  if (isMicrosoftABI()) {

with

  if (1) {

and it did report an error on Test16::D


http://llvm-reviews.chandlerc.com/D785



More information about the cfe-commits mailing list