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

Reid Kleckner rnk at google.com
Fri Jul 17 10:17:37 PDT 2015


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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150717/7178bdf8/attachment.html>


More information about the cfe-commits mailing list