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

Reply via email to