Skip to content

Commit 6b47894

Browse files
committed
AST: Rework UnavailableDeclOptimizationMode language option.
Instead of providing a default value for `UnavailableDeclOptimizationMode`, track it with an optional that defaults to `None`. This way the default behavior can vary contextually while still honoring an explicit option passed in on the command line. Partially resolves rdar://121344690
1 parent 0c4efe4 commit 6b47894

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

include/swift/Basic/LangOptions.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,8 +184,7 @@ namespace swift {
184184
bool DisableAvailabilityChecking = false;
185185

186186
/// Optimization mode for unavailable declarations.
187-
UnavailableDeclOptimization UnavailableDeclOptimizationMode =
188-
UnavailableDeclOptimization::Stub;
187+
llvm::Optional<UnavailableDeclOptimization> UnavailableDeclOptimizationMode;
189188

190189
/// Causes the compiler to use weak linkage for symbols belonging to
191190
/// declarations introduced at the deployment target.

lib/AST/Availability.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -323,10 +323,18 @@ static bool isUnconditionallyUnavailable(const Decl *D) {
323323
return false;
324324
}
325325

326+
static UnavailableDeclOptimization
327+
getEffectiveUnavailableDeclOptimization(ASTContext &ctx) {
328+
if (ctx.LangOpts.UnavailableDeclOptimizationMode.has_value())
329+
return *ctx.LangOpts.UnavailableDeclOptimizationMode;
330+
331+
return UnavailableDeclOptimization::Stub;
332+
}
333+
326334
bool Decl::isAvailableDuringLowering() const {
327335
// Unconditionally unavailable declarations should be skipped during lowering
328336
// when -unavailable-decl-optimization=complete is specified.
329-
if (getASTContext().LangOpts.UnavailableDeclOptimizationMode !=
337+
if (getEffectiveUnavailableDeclOptimization(getASTContext()) !=
330338
UnavailableDeclOptimization::Complete)
331339
return true;
332340

@@ -339,7 +347,7 @@ bool Decl::isAvailableDuringLowering() const {
339347
bool Decl::requiresUnavailableDeclABICompatibilityStubs() const {
340348
// Code associated with unavailable declarations should trap at runtime if
341349
// -unavailable-decl-optimization=stub is specified.
342-
if (getASTContext().LangOpts.UnavailableDeclOptimizationMode !=
350+
if (getEffectiveUnavailableDeclOptimization(getASTContext()) !=
343351
UnavailableDeclOptimization::Stub)
344352
return false;
345353

0 commit comments

Comments
 (0)