On Fri, Jul 19, 2013 at 01:11:18PM -0700, John McCall wrote:
> On Jul 19, 2013, at 12:28 PM, Reid Kleckner <[email protected]> wrote:
> > +  // XXX: In the Microsoft ABI, we want to emit a delegating complete dtor
> > +  // without a definition, which means we won't be able to tell if the
> > +  // definition is a try body.  In this case, MSVC simply delegates, so we 
> > do
> > +  // the same.
> > 
> > What is this XXX about?  Is this a FIXME?  It looks like we're actually 
> > doing it.
> > 
> > I should remove that.  I'm still confused about why destructors defined as 
> > try bodies need to be a special case, but the current behavior should be 
> > compatible with cl.exe.
> 
> You can’t delegate the base construction when there’s a try body and virtual
> bases because then the try body would appear twice on the stack.

Well, cl.exe seems to delegate it anyway.  This seems to be a
deficiency in the ABI.  I remember running an experiment in which a
destructor throws an exception caught in the try body of a virtually
derived class.  This caused the program (compiled with cl.exe)
to segfault.

We might want to issue a warning if we see a destructor of a class with
virtual bases defined using a try body when compiling for this ABI.

Thanks,
-- 
Peter
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to