> On Oct 28, 2016, at 17:00, Erik Eckstein <eeckst...@apple.com> wrote:
> 
>> 
>> On Oct 27, 2016, at 1:44 PM, Jordan Rose via swift-dev <swift-dev@swift.org 
>> <mailto:swift-dev@swift.org>> wrote:
>> 
>> 
>>> On Oct 23, 2016, at 16:13, Michael Gottesman <mgottes...@apple.com 
>>> <mailto:mgottes...@apple.com>> wrote:
>>> 
>>> 
>>>> On Oct 23, 2016, at 3:30 PM, Alexis Beingessner via swift-dev 
>>>> <swift-dev@swift.org <mailto:swift-dev@swift.org>> wrote:
>>>> 
>>>> Dave pointed out to me this week that the build crashes if the stdlib 
>>>> tries to use private/fileprivate. I tried it myself and lo and behold the 
>>>> linker can't find the private symbols. He couldn't recall what about the 
>>>> build caused that, though.
>>>> 
>>>> Can anyone recall why this is? How hard is it to fix?
>>> 
>>> I am not 100% sure, but if it happens only with the stdlib and has to do 
>>> with access control, I wouldn't be surprised if it has to do with 
>>> -sil-serialize-all and friends. But I may be correct. I think Jordan is the 
>>> right person to answer this question.
>> 
>> I don't have it all paged in, but there are three main pieces I remember:
>> 
>> - Private and fileprivate decls can of course conflict across file 
>> boundaries, which means it's possible we wouldn't be able to rebuild the 
>> standard library from textual SIL. I think this is just a hypothetical 
>> concern, since we don't actually have a reason to reuse names.
>> 
>> - Textual SIL again: the mangling for a private decl depends on its file. We 
>> could fix this with an attribute that hardcodes manglings, or hardcodes a 
>> private discriminator, or something. (We also have a bug today where 
>> multiple 'private' decls in the same file will conflict in their mangling.)
>> 
>> - The standard library currently builds with -sil-serialize-all ("magic 
>> performance mode") to make everything inlinable. This option currently mucks 
>> with linkages at the SIL level in a fairly unprincipled way.
> 
> This was the case (long time ago). But now the SIL linkage is not affected by 
> -sil-serialize-all, just the llvm linkage.
> But maybe you are referring to another issue.

Then I guess it’s the same issue the other way around: we don’t muck with the 
real linkage enough to make the symbols actually public. Again, being 
principled about what an inlinable function can and can’t refer to would help 
here.

> 
>> This is probably the underlying cause of whatever linking issues you're 
>> seeing, but even if it's not it would probably get in the way of trying to 
>> fix things.
>> 
>> docs/AccessControlInStdlib.rst points to another, similar issue: 
>> <rdar://problem/17631278 <rdar://problem/17631278>> Figure out how inlined 
>> XREFs to private entities work. Our planned answer for this is that 
>> inlinable things can't reference private entities, only internal ones (and 
>> even then only those marked as "versioned"). That's a bit annoying, but does 
>> correspond with the notion that a versioned entity is an ABI promise, and 
>> the file you declare something in should never be part of the library's ABI. 
>> (There are other answers that could work here, of course.)
>> 
>> Fortunately those last issues are something we need to fix anyway as part of 
>> deciding which parts of the standard library should be resilient and which 
>> parts are fragile, so maybe we'll be in a good enough place to start 
>> allowing private decls again later this release.
>> 
>> Jordan
>> 
>> 
>> 
>> _______________________________________________
>> swift-dev mailing list
>> swift-dev@swift.org <mailto:swift-dev@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-dev

_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

Reply via email to