[PATCH] ignore __declspec(novtable) on non-Windows platforms

Aaron Ballman aaron at aaronballman.com
Fri Jul 17 12:15:16 PDT 2015


On Fri, Jul 17, 2015 at 1:17 PM, Reid Kleckner <rnk at google.com> wrote:
> On Fri, Jul 17, 2015 at 4:45 AM, Aaron Ballman <aaron at aaronballman.com>
> wrote:
>>
>> On Thu, Jul 16, 2015 at 8:42 PM, Bob Wilson <bob.wilson at 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




More information about the cfe-commits mailing list