Stabilize and simplify SIL linkage and serialization

The main point of this change is to make sure that a shared function always has a body: both, in the optimizer pipeline and in the swiftmodule file.
This is important because the compiler always needs to emit code for a shared function. Shared functions cannot be referenced from outside the module.
In several corner cases we missed to maintain this invariant which resulted in unresolved-symbol linker errors.

As side-effect of this change we can drop the shared_external SIL linkage and the IsSerializable flag, which simplifies the serialization and linkage concept.
This commit is contained in:
Erik Eckstein
2022-03-07 09:36:53 +01:00
parent 05a3f1fa84
commit 6a020f8f15
159 changed files with 790 additions and 947 deletions

View File

@@ -249,7 +249,7 @@ SILFunction *SILFunctionBuilder::getOrCreateFunction(
(forDefinition == ForDefinition_t::NotForDefinition &&
(fnLinkage == linkageForDef ||
(linkageForDef == SILLinkage::PublicNonABI &&
fnLinkage == SILLinkage::SharedExternal))));
fnLinkage == SILLinkage::Shared))));
if (forDefinition) {
// In all the cases where getConstantLinkage returns something
// different for ForDefinition, it returns an available-externally