On 03/07/2007, at 7:37 PM, Mark Mitchell wrote:

Geoffrey Keating wrote:

Yes.  __attribute__((visibility)) has consistent GNU semantics, and
other features (eg. -fvisibility-ms-compat, __dllspec) match other
compilers.

The only semantics that make sense on SymbianOS are the ones that allow
default visibility within a hidden class.

I think we're talking past each other. What semantics exactly are these? Who created them? Where are they implemented? Are they documented? Who documented them? Why can't they be changed?

I don't know what you mean by 'make sense'. Clearly these semantics do make sense; no-one's brain has exploded yet. You probably mean 'compatible with the system headers' or possibly 'that I like' or perhaps 'that my users like' or 'that my users understand'.

  So, whether or not there's a
command-line option, it's going to be on by default, and therefore is
going to be inconsistent with a system on which GCC disallows (or
ignores) that.

Maybe, and maybe not. In particular, an option that changes defaults is one thing, but if the user overrides the default with GCC-specific syntax and the compiler does something different, that's another thing altogether.

I hope you don't mean that there are other system's compilers using the '__attribute__((visibility))' syntax in a way that's incompatible with GCC. If there are, I think the appropriate response is a combination of
fixincludes and a polite e-mail asking them to stop.

I don't know if there are, but I certainly wouldn't be surprised.  The
GNU attribute syntax is implemented in the EDG front end and there are
lots of EDG-based compilers.

This doesn't quite count, because EDG implements it to be compatible with GCC, and I'm sure if you find it isn't then they'll fix it (or at least acknowledge it as a bug).

RealView 3.0.x doesn't support the visibility attribute, but it does
support other GNU attributes.

So it can't conflict.

  __declspec(dllexport) and
__attribute__((visibility("default"))) are synonyms on SymbianOS.

As far as I can tell they're synonyms everywhere, although my understanding is subject to change through bug reports. The question is about "__attribute__((visibility("hidden")))".


If you have -fvisibility-ms-compat switched on, then

struct S {
  void f() __dllspec(dllimport);
};

is entirely valid and does what you want to do. So if you're just trying to be compatible with Visual Studio, or trying to be compatible with people trying to be compatible with Visual Studio, that's already implemented.

And likewise, for new code, the answer is to not make 'S' hidden in the first place, which by coincidence is also:

struct S {
  void f() __dllspec(dllimport);
};

or so.

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to