On Fri, Jul 17, 2015 at 1:17 PM, Reid Kleckner <r...@google.com> wrote: > On Fri, Jul 17, 2015 at 4:45 AM, Aaron Ballman <aa...@aaronballman.com> > wrote: >> >> On Thu, Jul 16, 2015 at 8:42 PM, Bob Wilson <bob.wil...@apple.com> wrote: >> > Clang used to silently ignore __declspec(novtable) for all platforms, >> > but it is now implemented for Windows. However, we don’t check if the >> > target >> > is Windows. This does not work when using the Itanium ABI, where the class >> > layout for complex class hierarchies is stored in the vtable. Leaving the >> > vtable uninitialized on non-Windows platforms does not work in that case. >> > It >> > might be possible to honor the novtable attribute in some simple cases and >> > either report an error or ignore it in more complex situations, but it’s >> > not >> > clear if that would be worthwhile. There is also value in having a simple >> > and predictable behavior, so I am proposed the attached patch which simply >> > ignores novtable on non-Windows platforms. > > > I think it might actually be worth making it work. I have vague > recollections of Chromium developers wondering how to do the equivalent size > saving optimization on non-Windows targets. We'd have to pin down what makes > a "complex" class hierarchy. I'm assuming the fix would be to emit the vptr > store if the class has virtual bases. > >> >> MSVC supports an Itanium build target. What does __declspec(novtable) >> do there with the complex class layouts? >> >> I don't have Visual Studio installed with support for Itanium, >> otherwise I would test this myself. > > > I think Bob is talking about the Itanium C++ ABI, which I don't think MSVC > ever implemented. If they did, I wouldn't be surprised if they simply > ignored this declspec.
Ah, in that case, I don't have a problem with this general approach. :-) ~Aaron _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits