Page MenuHomePhabricator

[MS] Always use base dtors in place of complete/vbase dtors when possible

Authored by rnk on Mar 14 2018, 6:16 PM.



Previously we tried too hard to uphold the fiction that destructor
variants work like they do on Itanium throughout the ABI-neutral parts
of clang. This lead to MS C++ ABI incompatiblities and other bugs. Now,
-mconstructor-aliases will no longer control this ABI detail, and clang
-cc1's LLVM IR output will be this much closer to the clang driver's.

Based on a patch by Zahira Ammarguellat:

I've tried to move the logic that Zahira added into MicrosoftCXXABI.cpp.
There is only one ABI-specific detail sticking out, and that is in
CodeGenModule::getAddrOfCXXStructor, where we collapse complete dtors to
base dtors in the MS ABI.

This fixes PR32990.

Diff Detail

rC Clang

Event Timeline

rnk created this revision.Mar 14 2018, 6:16 PM
rjmccall accepted this revision.Mar 15 2018, 6:34 PM


This revision is now accepted and ready to land.Mar 15 2018, 6:34 PM

LGTM 2. It fixes PR32990.

zahiraam accepted this revision.Mar 16 2018, 12:08 PM
This revision was automatically updated to reflect the committed changes.
rnk added a comment.Mar 16 2018, 12:46 PM

Thanks! I'm sorry I wasn't able to express these ideas better in D39063.

rnk added a comment.Mar 16 2018, 2:32 PM

And, this appears to have broken clang's self-host:

Time to debug.

rnk added a comment.Mar 16 2018, 3:34 PM

Should be fixed in rL327754.