mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Serialization: restrict swiftmodules to distribution channels
There are scenarios where different compilers are distributed with compatible serialization format versions and the same tag. Distinguish swiftmodules in such a case by assigning them to different distribution channels. A compiler expecting a specific channel will only read swiftmodules from the same channel. The channels should be defined by downstream code as it is by definition vendor specific. For development, a no-channel compiler loads or defining the env var SWIFT_IGNORE_SWIFTMODULE_REVISION skips this new check. rdar://123731777
This commit is contained in:
@@ -1081,6 +1081,12 @@ void swift::serialization::diagnoseSerializedASTLoadFailure(
|
||||
Ctx.Diags.diagnose(diagLoc, diag::serialization_module_incompatible_revision,
|
||||
loadInfo.problematicRevision, ModuleName, moduleBufferID);
|
||||
break;
|
||||
case serialization::Status::ChannelIncompatible:
|
||||
Ctx.Diags.diagnose(diagLoc, diag::serialization_module_incompatible_channel,
|
||||
loadInfo.problematicChannel,
|
||||
version::getCurrentCompilerChannel(),
|
||||
ModuleName, moduleBufferID);
|
||||
break;
|
||||
case serialization::Status::Malformed:
|
||||
Ctx.Diags.diagnose(diagLoc, diag::serialization_malformed_module,
|
||||
moduleBufferID);
|
||||
@@ -1168,6 +1174,7 @@ void swift::serialization::diagnoseSerializedASTLoadFailureTransitive(
|
||||
case serialization::Status::NotInOSSA:
|
||||
case serialization::Status::NoncopyableGenericsMismatch:
|
||||
case serialization::Status::RevisionIncompatible:
|
||||
case serialization::Status::ChannelIncompatible:
|
||||
case serialization::Status::Malformed:
|
||||
case serialization::Status::MalformedDocumentation:
|
||||
case serialization::Status::FailedToLoadBridgingHeader:
|
||||
|
||||
Reference in New Issue
Block a user