> On Jul 17, 2015, at 10:17 AM, Reid Kleckner <[email protected]> wrote:
>
> On Fri, Jul 17, 2015 at 4:45 AM, Aaron Ballman <[email protected]
> <mailto:[email protected]>> wrote:
> On Thu, Jul 16, 2015 at 8:42 PM, Bob Wilson <[email protected]
> <mailto:[email protected]>> 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.
Yes — I meant the Itanium C++ ABI.
If someone else wants to sign up to implement this properly, I have no
objections. In the meantime, my patch would fix the miscompiles that result
from the current behavior. I’d still like to go ahead with it.
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits