mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Support package SIL linkage.
Decls with a package access level are currently set to public SIL linkages. This limits the ability to have more fine-grained control and optimize around resilience and serialization. This PR introduces a separate SIL linkage and FormalLinkage for package decls, pipes them down to IRGen, and updates linkage checks at call sites to include package linkage. Resolves rdar://121409846
This commit is contained in:
@@ -75,12 +75,19 @@ class SILModule::SerializationCallback final
|
||||
// translation units in the same Swift module.
|
||||
decl->setLinkage(SILLinkage::Shared);
|
||||
return;
|
||||
case SILLinkage::Package:
|
||||
decl->setLinkage(SILLinkage::PackageExternal);
|
||||
return;
|
||||
case SILLinkage::PackageNonABI: // Same as PublicNonABI
|
||||
decl->setLinkage(SILLinkage::Shared);
|
||||
return;
|
||||
case SILLinkage::Hidden:
|
||||
decl->setLinkage(SILLinkage::HiddenExternal);
|
||||
return;
|
||||
case SILLinkage::Private:
|
||||
llvm_unreachable("cannot make a private external symbol");
|
||||
case SILLinkage::PublicExternal:
|
||||
case SILLinkage::PackageExternal:
|
||||
case SILLinkage::HiddenExternal:
|
||||
case SILLinkage::Shared:
|
||||
return;
|
||||
@@ -979,6 +986,8 @@ SILLinkage swift::getDeclSILLinkage(const ValueDecl *decl) {
|
||||
linkage = SILLinkage::Hidden;
|
||||
break;
|
||||
case AccessLevel::Package:
|
||||
linkage = SILLinkage::Package;
|
||||
break;
|
||||
case AccessLevel::Public:
|
||||
case AccessLevel::Open:
|
||||
linkage = SILLinkage::Public;
|
||||
|
||||
Reference in New Issue
Block a user