mcgrathr added a comment.

In https://reviews.llvm.org/D53787#1282975, @rsmith wrote:

> These symbols really are special. Other symbols are introduced explicitly by 
> a declaration, whereas these are declared implicitly by the compiler.


The implicit declaration is the only difference that actually makes sense to me.

> Other symbols must have exactly one definition (modulo the permission for 
> duplicate identical definitions for some cases), but these ones have a 
> default definition that is designed to be overridable by a different 
> definition appearing anywhere in the program.

I don't understand this claim.  These are symbols like any others at link time. 
 A single definition must be supplied as for any other function.

> Other symbols are generally provided in one library and consumed by users of 
> that library, whereas these symbols are typically provided by the main binary 
> and consumed by the libraries that it uses. And so on.

I don't understand this claim.  These symbols are normally defined in libc++.so 
and nowhere else.

>> It is especially bizarre to me that explicit attributes on the definition 
>> sites are silently ignored for these functions and no others.
> 
> Do you have a testcase? That's not the behavior I'm seeing. What I see is 
> that we get a hard error for an explicit attribute on the definition site, 
> because the prior compiler-generated declaration has default visibility. Eg:

You're right.  It's been quite a while since I was fighting with this 
originally.  It might have been GCC that ignored explicit attributes.


Repository:
  rC Clang

https://reviews.llvm.org/D53787



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to