@@ -4558,13 +4558,17 @@ class DeclDeserializer {
45584558 return deserializeAnyFunc (scratch, blobData, /* isAccessor*/ true );
45594559 }
45604560
4561- void deserializeConditionalSubstitutionConditions (
4562- SmallVectorImpl<OpaqueTypeDecl::AvailabilityCondition > &conditions ) {
4561+ void deserializeConditionalSubstitutionAvailabilityQueries (
4562+ SmallVectorImpl<AvailabilityQuery > &queries ) {
45634563 using namespace decls_block ;
45644564
45654565 SmallVector<uint64_t , 4 > scratch;
45664566 StringRef blobData;
45674567
4568+ // FIXME: [availability] Support arbitrary domains (rdar://156513787).
4569+ auto domain = ctx.getTargetAvailabilityDomain ();
4570+ ASSERT (domain.isPlatform ());
4571+
45684572 while (true ) {
45694573 llvm::BitstreamEntry entry =
45704574 MF.fatalIfUnexpected (MF.DeclTypeCursor .advance (AF_DontPopBlockAtEnd));
@@ -4579,16 +4583,16 @@ class DeclDeserializer {
45794583 break ;
45804584
45814585 bool isUnavailability;
4582- DEF_VER_TUPLE_PIECES (condition );
4586+ DEF_VER_TUPLE_PIECES (version );
45834587
45844588 ConditionalSubstitutionConditionLayout::readRecord (
4585- scratch, isUnavailability, LIST_VER_TUPLE_PIECES (condition ));
4589+ scratch, isUnavailability, LIST_VER_TUPLE_PIECES (version ));
45864590
4587- llvm::VersionTuple condition ;
4588- DECODE_VER_TUPLE (condition );
4591+ llvm::VersionTuple version ;
4592+ DECODE_VER_TUPLE (version );
45894593
4590- conditions .push_back (std::make_pair ( VersionRange::allGTE (condition),
4591- isUnavailability ));
4594+ queries .push_back (AvailabilityQuery::dynamic (
4595+ domain, isUnavailability, AvailabilityRange (version), std:: nullopt ));
45924596 }
45934597 }
45944598
@@ -4615,10 +4619,10 @@ class DeclDeserializer {
46154619 decls_block::ConditionalSubstitutionLayout::readRecord (
46164620 scratch, substitutionMapRef);
46174621
4618- SmallVector<OpaqueTypeDecl::AvailabilityCondition , 2 > conditions ;
4619- deserializeConditionalSubstitutionConditions (conditions );
4622+ SmallVector<AvailabilityQuery , 2 > queries ;
4623+ deserializeConditionalSubstitutionAvailabilityQueries (queries );
46204624
4621- if (conditions .empty ())
4625+ if (queries .empty ())
46224626 return MF.diagnoseAndConsumeFatal ();
46234627
46244628 auto subMapOrError = MF.getSubstitutionMapChecked (substitutionMapRef);
@@ -4627,7 +4631,7 @@ class DeclDeserializer {
46274631
46284632 limitedAvailability.push_back (
46294633 OpaqueTypeDecl::ConditionallyAvailableSubstitutions::get (
4630- ctx, conditions , subMapOrError.get ()));
4634+ ctx, queries , subMapOrError.get ()));
46314635 }
46324636 }
46334637
@@ -4725,7 +4729,9 @@ class DeclDeserializer {
47254729 } else {
47264730 limitedAvailability.push_back (
47274731 OpaqueTypeDecl::ConditionallyAvailableSubstitutions::get (
4728- ctx, {{VersionRange::all (), /* unavailability=*/ false }},
4732+ ctx,
4733+ {AvailabilityQuery::universallyConstant (
4734+ /* isUnavailable=*/ false , /* value=*/ true )},
47294735 subMapOrError.get ()));
47304736
47314737 opaqueDecl->setConditionallyAvailableSubstitutions (limitedAvailability);
0 commit comments