From 888ec24c037a5a81fbda999f6b3240eaab080d73 Mon Sep 17 00:00:00 2001 From: Allan Shortlidge Date: Tue, 9 Sep 2025 15:28:40 -0700 Subject: [PATCH] AST: Avoid covered switches over `Clang::FeatureAvailKind`. Make it possible to expand the `Clang::FeatureAvailKind` enum without breaking the Swift compiler build. --- lib/AST/AvailabilityDomain.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/AST/AvailabilityDomain.cpp b/lib/AST/AvailabilityDomain.cpp index f4329774b73da..8a3a073eaf873 100644 --- a/lib/AST/AvailabilityDomain.cpp +++ b/lib/AST/AvailabilityDomain.cpp @@ -27,14 +27,14 @@ using namespace swift; CustomAvailabilityDomain::Kind getCustomDomainKind(clang::FeatureAvailKind featureAvailKind) { switch (featureAvailKind) { - case clang::FeatureAvailKind::None: - llvm_unreachable("unexpected kind"); case clang::FeatureAvailKind::Available: return CustomAvailabilityDomain::Kind::Enabled; case clang::FeatureAvailKind::Unavailable: return CustomAvailabilityDomain::Kind::Disabled; case clang::FeatureAvailKind::Dynamic: return CustomAvailabilityDomain::Kind::Dynamic; + default: + llvm::report_fatal_error("unexpected kind"); } } @@ -52,8 +52,15 @@ customDomainForClangDecl(ValueDecl *decl) { if (featureInfo.first.empty()) return nullptr; - if (featureInfo.second.Kind == clang::FeatureAvailKind::None) + // Check that the domain has a supported availability kind. + switch (featureInfo.second.Kind) { + case clang::FeatureAvailKind::Available: + case clang::FeatureAvailKind::Unavailable: + case clang::FeatureAvailKind::Dynamic: + break; + default: return nullptr; + } auto &ctx = decl->getASTContext(); FuncDecl *predicate = nullptr;