r228107 - Generalize r228066 to give all implicit global allocation functions default visibility.

Larisse Voufo lvoufo at google.com
Wed Feb 25 17:16:05 PST 2015


On Tue, Feb 24, 2015 at 2:50 PM, John McCall <rjmccall at apple.com> wrote:

> > On Feb 3, 2015, at 6:34 PM, Larisse Voufo <lvoufo at google.com> wrote:
> > Author: lvoufo
> > Date: Tue Feb  3 20:34:32 2015
> > New Revision: 228107
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=228107&view=rev
> > Log:
> > Generalize r228066 to give all implicit global allocation functions
> default visibility.
>
> This seems generally correct, but I’m suspicious about applying it to the
> implicit C++14 compatibility definitions.  Linkers are not generally going
> to give this sensible behavior: the static linker will prefer the first
> definition on the link line, and the dynamic linker will prefer a
> definition in the executable over one in the standard library.  So even if
> there’s a usefully optimized implementation of sized deallocation in the
> program, it’ll probably get clobbered by one of these useless ones.
>
> I don’t think there’s really a fix for that except to actually trust
> declarations from the standard library if they exist.  (Assuming we don’t
> have lying library headers out there, which we might.)  And if they don’t
> exist, it’s fine to emit these compatibility definitions, but




> we shouldn’t pretend that giving them default visibility is useful;


This has fixed a lot of issues with
"warning: Cannot export local symbol 'operator delete(void*, unsigned long)'
"
where the sized delete symbol was exported from a file that made use of the
symbol and
depended on another file that was compiled with hidden visibility.



> all it does it create unnecessary and probably unwanted work at load-time
> to dynamically merge symbols.
>
> John.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150225/a09b2fbc/attachment.html>


More information about the cfe-commits mailing list