RFC: Make dllimport/dllexport imply default visibility
Chris Lattner
clattner@apple.com
Wed Jun 20 18:19:00 GMT 2007
On Jun 19, 2007, at 7:49 AM, Richard Earnshaw wrote:
> On Mon, 2007-06-18 at 10:04 -0700, Mark Mitchell wrote:
>>> I suspect that the realview compiler accepts
>>> this as an oversight or a bug, not as an intentional feature.
>>
>> Let's ask.
>>
>> Richard E., is the fact that RealView 3.0SP1 accepts:
>>
>> class __declspec(notshared) S {
>> __declspec(dllimport) void f();
>> };
>>
>> a bug or a feature? If this is considered a bug, is it something
>> that
>> RealView is likely to change in a future release, or will it be
>> preserved for the forseeable future for backwards compatibility?
>
> This is well beyond my sphere of expertise, so I've asked one of the
> original developers of the spec. He asserts that the above is
> supported
> and intentional. Hopefully I've correctly represented his position
> below.
>
> His key point is that 'notshared' on a class is not the same as making
> the whole class hidden: only the class impedimenta (vtables, rtti) is
> hidden, but the rest of the class can be exported as normal. And that
> since it can be exported, there's no reason why definitions of member
> functions can't be imported.
This description also makes sense, but is different than what was
described before. To me, this description/implementation is
extremely problematic, because the extension cannot be described
without describing the implementation (specifically presence of
vtables etc), which is unlike any standard C++ feature.
Some more specific questions:
1. If a class is hidden, does that default all the members (not just
the metadata) to be notshared?
2. If a class with vtable is hidden, what visibility constraints
exist on virtual methods?
3. What does 'notshared' on a class without a vtable mean, what
effect does it have?
4. If classes with vtables have different behavior than those
without, is this something we want?
5. How does this impact the ODR?
-Chris
More information about the Gcc
mailing list