[Package CMO] Diagnose missing library-evolution flag.

This PR ensures library-evolution is enabled for Package CMO; without it,
it previously fell back to regular CMO, which caused mismatching serialization
attributes if importing another module that had Package CMO enbaled, causing
an assert fail for loadable types.

Resolves rdar://135308288
This commit is contained in:
elsh
2024-09-05 03:26:53 -07:00
parent 9ac56f2f05
commit 66b504a253
4 changed files with 54 additions and 2 deletions

View File

@@ -947,9 +947,15 @@ void CrossModuleOptimization::makeSubstUsableFromInline(
class CrossModuleOptimizationPass: public SILModuleTransform {
void run() override {
auto &M = *getModule();
if (M.getSwiftModule()->isResilient() &&
!M.getSwiftModule()->serializePackageEnabled())
if (M.getSwiftModule()->serializePackageEnabled()) {
assert(M.getSwiftModule()->isResilient() &&
"Package CMO requires library-evolution");
} else if (M.getSwiftModule()->isResilient()) {
// If no Package CMO flags are passed and library
// evolution is enabled, just return.
return;
}
if (!M.isWholeModule())
return;
@@ -974,6 +980,9 @@ class CrossModuleOptimizationPass: public SILModuleTransform {
return;
}
if (isPackageCMOEnabled(M.getSwiftModule()))
assert(conservative && "Package CMO requires conservative CMO mode");
CrossModuleOptimization CMO(M, conservative, everything);
CMO.serializeFunctionsInModule(PM);