On Jun 15, 2007, at 12:48 AM, Mark Mitchell wrote:

Consider:

 struct __attribute__((vsibility ("hidden"))) S {
   void __declspec(dllimport) f();
 };

At present, we give "f" hidden visibility.  That seems odd since the
user has explicitly told us that the symbol is coming from another
shared library.

I'm planning to make any dllimport or dllexport attribute imply default
visibility.  Is that a bad idea?

Perhaps I'm mistaken, but the above seems to indicate to me that the structure (and, therefore, all of its fields) are hidden, one of its functions is from an external and visible source. Because nothing outside of the translation unit that has S can access f directly (only through a function pointer), I don't see a problem with marking it as a hidden part of S. That is, as long as it doesn't affect the original f()'s visibility.

I'll ask the opposite question: what would be gained by giving this default visibility?

-bw

Reply via email to