@@ -101,18 +101,27 @@ AvailabilityDomain::forCustom(ValueDecl *decl) {
101101 AvailabilityDomainForDeclRequest{decl}, {});
102102}
103103
104+ static AvailabilityDomain getSwiftRuntimeDomain (ASTContext &ctx) {
105+ // If -enable-experimental-feature StandaloneSwiftAvailability is specified
106+ // then forcibly separate platform and Swift runtime availability.
107+ if (ctx.LangOpts .hasFeature (Feature::StandaloneSwiftAvailability))
108+ return AvailabilityDomain::forStandaloneSwiftRuntime ();
109+
110+ // FIXME: [runtime availability] Return the platform Swift runtime domain.
111+
112+ return AvailabilityDomain::forStandaloneSwiftRuntime ();
113+ }
114+
104115std::optional<AvailabilityDomain>
105116AvailabilityDomain::builtinDomainForString (StringRef string,
106117 const DeclContext *declContext) {
107- // This parameter is used in downstream forks, do not remove.
108- (void )declContext;
109-
118+ auto &ctx = declContext->getASTContext ();
110119 auto domain =
111120 llvm::StringSwitch<std::optional<AvailabilityDomain>>(string)
112121 .Case (" *" , AvailabilityDomain::forUniversal ())
113122 .Case (" swift" , AvailabilityDomain::forSwiftLanguageMode ())
114123 .Case (" SwiftLanguageMode" , AvailabilityDomain::forSwiftLanguageMode ())
115- .Case (" Swift" , AvailabilityDomain::forSwiftRuntime ( ))
124+ .Case (" Swift" , getSwiftRuntimeDomain (ctx ))
116125 .Case (" _PackageDescription" ,
117126 AvailabilityDomain::forPackageDescription ())
118127 .Default (std::nullopt );
@@ -132,7 +141,7 @@ bool AvailabilityDomain::isVersioned() const {
132141 case Kind::Embedded:
133142 return false ;
134143 case Kind::SwiftLanguageMode:
135- case Kind::SwiftRuntime :
144+ case Kind::StandaloneSwiftRuntime :
136145 case Kind::PackageDescription:
137146 case Kind::Platform:
138147 return true ;
@@ -153,7 +162,7 @@ bool AvailabilityDomain::isVersionValid(
153162 case Kind::SwiftLanguageMode:
154163 case Kind::PackageDescription:
155164 return true ;
156- case Kind::SwiftRuntime :
165+ case Kind::StandaloneSwiftRuntime :
157166 // Swift 5.0 is the first ABI stable Swift runtime version.
158167 if (version.getMajor () < 5 )
159168 return false ;
@@ -175,7 +184,7 @@ bool AvailabilityDomain::supportsContextRefinement() const {
175184 case Kind::SwiftLanguageMode:
176185 case Kind::PackageDescription:
177186 return false ;
178- case Kind::SwiftRuntime :
187+ case Kind::StandaloneSwiftRuntime :
179188 case Kind::Platform:
180189 case Kind::Custom:
181190 return true ;
@@ -189,7 +198,7 @@ bool AvailabilityDomain::supportsQueries() const {
189198 case Kind::SwiftLanguageMode:
190199 case Kind::PackageDescription:
191200 return false ;
192- case Kind::SwiftRuntime :
201+ case Kind::StandaloneSwiftRuntime :
193202 case Kind::Platform:
194203 case Kind::Custom:
195204 return true ;
@@ -204,7 +213,10 @@ bool AvailabilityDomain::isActive(const ASTContext &ctx,
204213 case Kind::PackageDescription:
205214 case Kind::Embedded:
206215 return true ;
207- case Kind::SwiftRuntime:
216+ case Kind::StandaloneSwiftRuntime:
217+ // FIXME: [runtime availability] Active either when
218+ // StandaloneSwiftAvailability is enabled or the target supports a
219+ // standalone Swift runtime.
208220 return ctx.LangOpts .hasFeature (Feature::SwiftRuntimeAvailability);
209221 case Kind::Platform:
210222 return isPlatformActive (getPlatformKind (), ctx.LangOpts , forTargetVariant);
@@ -231,7 +243,7 @@ bool AvailabilityDomain::mustBeSpecifiedAlone() const {
231243 case Kind::Embedded:
232244 case Kind::Custom:
233245 return true ;
234- case Kind::SwiftRuntime :
246+ case Kind::StandaloneSwiftRuntime :
235247 case Kind::Platform:
236248 // Platform and Swift runtime availability specifications can appear
237249 // together, e.g. `@available(Swift 6, macOS 15, iOS 18, *)`.
@@ -252,7 +264,7 @@ getDeploymentVersion(const AvailabilityDomain &domain, const ASTContext &ctx) {
252264 return ctx.LangOpts .EffectiveLanguageVersion ;
253265 case AvailabilityDomain::Kind::PackageDescription:
254266 return ctx.LangOpts .PackageDescriptionVersion ;
255- case AvailabilityDomain::Kind::SwiftRuntime :
267+ case AvailabilityDomain::Kind::StandaloneSwiftRuntime :
256268 if (!ctx.LangOpts .hasFeature (Feature::SwiftRuntimeAvailability))
257269 return std::nullopt ;
258270 return ctx.LangOpts .MinSwiftRuntimeVersion ;
@@ -292,7 +304,7 @@ llvm::StringRef AvailabilityDomain::getNameForDiagnostics() const {
292304 case Kind::SwiftLanguageMode:
293305 // FIXME: [runtime availability] Render language mode diags differently.
294306 return " Swift" ;
295- case Kind::SwiftRuntime :
307+ case Kind::StandaloneSwiftRuntime :
296308 return " Swift" ;
297309 case Kind::PackageDescription:
298310 return " PackageDescription" ;
@@ -311,7 +323,7 @@ llvm::StringRef AvailabilityDomain::getNameForAttributePrinting() const {
311323 return " *" ;
312324 case Kind::SwiftLanguageMode:
313325 return " swift" ;
314- case Kind::SwiftRuntime :
326+ case Kind::StandaloneSwiftRuntime :
315327 return " Swift" ;
316328 case Kind::PackageDescription:
317329 return " _PackageDescription" ;
@@ -343,12 +355,11 @@ bool AvailabilityDomain::contains(const AvailabilityDomain &other) const {
343355 case Kind::Universal:
344356 return true ;
345357 case Kind::SwiftLanguageMode:
358+ case Kind::StandaloneSwiftRuntime:
346359 case Kind::PackageDescription:
347360 case Kind::Embedded:
348361 case Kind::Custom:
349362 return other == *this ;
350- case Kind::SwiftRuntime:
351- return other.isPlatform () || other == *this ;
352363 case Kind::Platform:
353364 if (getPlatformKind () == other.getPlatformKind ())
354365 return true ;
@@ -362,7 +373,7 @@ bool AvailabilityDomain::isRoot() const {
362373 case AvailabilityDomain::Kind::Universal:
363374 case AvailabilityDomain::Kind::Embedded:
364375 case AvailabilityDomain::Kind::SwiftLanguageMode:
365- case AvailabilityDomain::Kind::SwiftRuntime :
376+ case AvailabilityDomain::Kind::StandaloneSwiftRuntime :
366377 case AvailabilityDomain::Kind::PackageDescription:
367378 return true ;
368379 case AvailabilityDomain::Kind::Platform:
@@ -448,7 +459,7 @@ AvailabilityDomain AvailabilityDomain::copy(ASTContext &ctx) const {
448459 switch (getKind ()) {
449460 case Kind::Universal:
450461 case Kind::SwiftLanguageMode:
451- case Kind::SwiftRuntime :
462+ case Kind::StandaloneSwiftRuntime :
452463 case Kind::PackageDescription:
453464 case Kind::Embedded:
454465 case Kind::Platform:
@@ -471,7 +482,7 @@ bool StableAvailabilityDomainComparator::operator()(
471482 switch (lhsKind) {
472483 case AvailabilityDomain::Kind::Universal:
473484 case AvailabilityDomain::Kind::SwiftLanguageMode:
474- case AvailabilityDomain::Kind::SwiftRuntime :
485+ case AvailabilityDomain::Kind::StandaloneSwiftRuntime :
475486 case AvailabilityDomain::Kind::PackageDescription:
476487 case AvailabilityDomain::Kind::Embedded:
477488 return false ;
@@ -560,7 +571,7 @@ AvailabilityDomainOrIdentifier::lookUpInDeclContext(
560571 }
561572
562573 // Use of the 'Swift' domain requires the 'SwiftRuntimeAvailability' feature.
563- if (!hasSwiftRuntimeAvailability && domain->isSwiftRuntime ()) {
574+ if (!hasSwiftRuntimeAvailability && domain->isStandaloneSwiftRuntime ()) {
564575 diags.diagnose (loc, diag::availability_domain_requires_feature, *domain,
565576 " SwiftRuntimeAvailability" );
566577 return std::nullopt ;
0 commit comments