Skip to content

Commit cff9d10

Browse files
authored
Merge pull request #66355 from tshortli/avoid-stripping-obsolete-decls-5.9
[5.9] SIL: Don't skip lowering obsolete decls
2 parents 507bd39 + 8dfa27a commit cff9d10

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

lib/SIL/IR/SILModule.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -956,14 +956,21 @@ bool Lowering::usesObjCAllocator(ClassDecl *theClass) {
956956
return theClass->getObjectModel() == ReferenceCounting::ObjC;
957957
}
958958

959+
static bool isUnconditionallyUnavailable(const Decl *D) {
960+
if (auto unavailableAttrAndDecl = D->getSemanticUnavailableAttr())
961+
return unavailableAttrAndDecl->first->isUnconditionallyUnavailable();
962+
963+
return false;
964+
}
965+
959966
bool Lowering::shouldSkipLowering(const Decl *D) {
960967
if (D->getASTContext().LangOpts.UnavailableDeclOptimizationMode !=
961968
UnavailableDeclOptimization::Complete)
962969
return false;
963970

964971
// Unavailable declarations should be skipped if
965972
// -unavailable-decl-optimization=complete is specified.
966-
return D->getSemanticUnavailableAttr() != None;
973+
return isUnconditionallyUnavailable(D);
967974
}
968975

969976
bool Lowering::shouldLowerToUnavailableCodeStub(const Decl *D) {
@@ -973,5 +980,5 @@ bool Lowering::shouldLowerToUnavailableCodeStub(const Decl *D) {
973980

974981
// Unavailable declarations should trap at runtime if
975982
// -unavailable-decl-optimization=stub is specified.
976-
return D->getSemanticUnavailableAttr() != None;
983+
return isUnconditionallyUnavailable(D);
977984
}

test/SILGen/unavailable_decl_optimization_complete.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// RUN: %target-swift-emit-silgen -module-name Test -parse-as-library %s -verify | %FileCheck %s --check-prefixes=CHECK,CHECK-NO-STRIP
2-
// RUN: %target-swift-emit-silgen -module-name Test -parse-as-library %s -verify -unavailable-decl-optimization=none | %FileCheck %s --check-prefixes=CHECK,CHECK-NO-STRIP
1+
// RUN: %target-swift-emit-silgen -swift-version 5 -module-name Test -parse-as-library %s -verify | %FileCheck %s --check-prefixes=CHECK,CHECK-NO-STRIP
2+
// RUN: %target-swift-emit-silgen -swift-version 5 -module-name Test -parse-as-library %s -verify -unavailable-decl-optimization=none | %FileCheck %s --check-prefixes=CHECK,CHECK-NO-STRIP
33
// RUN: %target-swift-emit-silgen -module-name Test -parse-as-library %s -verify -unavailable-decl-optimization=complete | %FileCheck %s --check-prefixes=CHECK,CHECK-STRIP
44

55
// CHECK-NO-STRIP: s4Test14globalConstant_Wz
@@ -18,6 +18,10 @@ public let globalConstant = true
1818
@available(*, unavailable)
1919
public func unavailableFunc() {}
2020

21+
// CHECK: s4Test21funcObsoletedInSwift5yyF
22+
@available(swift, introduced: 4.2, obsoleted: 5)
23+
public func funcObsoletedInSwift5() {}
24+
2125
@available(*, unavailable)
2226
public struct UnavailableStruct<T> {
2327
// CHECK-NO-STRIP: s4Test17UnavailableStructV8propertyxvg

0 commit comments

Comments
 (0)