> On Oct 27, 2016, at 1:44 PM, Jordan Rose via swift-dev <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. > 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 > https://lists.swift.org/mailman/listinfo/swift-dev
_______________________________________________ swift-dev mailing list swift-dev@swift.org https://lists.swift.org/mailman/listinfo/swift-dev