Skip to content

Commit e23e158

Browse files
committed
IRGen: Skip lowering unavailable types nested in extensions.
Part of rdar://107425181
1 parent 07dfa49 commit e23e158

File tree

3 files changed

+38
-15
lines changed

3 files changed

+38
-15
lines changed

lib/IRGen/GenDecl.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5489,6 +5489,9 @@ Address IRGenModule::getAddrOfEnumCase(EnumElementDecl *Case,
54895489

54905490
void IRGenModule::emitNestedTypeDecls(DeclRange members) {
54915491
for (Decl *member : members) {
5492+
if (Lowering::shouldSkipLowering(member))
5493+
continue;
5494+
54925495
member->visitAuxiliaryDecls([&](Decl *decl) {
54935496
emitNestedTypeDecls({decl, nullptr});
54945497
});

test/IRGen/unavailable_decl_optimization.swift

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -158,16 +158,6 @@ extension S: P {
158158
public func requirement() {}
159159
}
160160

161-
// CHECK-NO-STRIP: s4Test29unavailableFuncWithNestedTypeyyF
162-
// CHECK-STRIP-NOT: s4Test29unavailableFuncWithNestedTypeyyF
163-
@available(*, unavailable)
164-
public func unavailableFuncWithNestedType() {
165-
struct Nested {
166-
// s4Test29unavailableFuncWithNestedTypeyyF0E0L_V6methodyyF
167-
public func method() {}
168-
}
169-
}
170-
171161
// MARK: -
172162

173163
// MARK: UnavailableEnum
@@ -187,8 +177,3 @@ public func unavailableFuncWithNestedType() {
187177

188178
// CHECK: s4Test1EOwug
189179
// CHECK: s4Test1EOMa
190-
191-
// MARK: unavailableFuncWithNestedType().Nested
192-
193-
// CHECK-NO-STRIP: s4Test29unavailableFuncWithNestedTypeyyF0E0L_VMa
194-
// CHECK-STRIP-NOT: s4Test29unavailableFuncWithNestedTypeyyF0E0L_VMa
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// RUN: %target-swift-frontend -parse-as-library -module-name Test -validate-tbd-against-ir=missing %s -emit-ir | %FileCheck %s --check-prefixes=CHECK,CHECK-NO-STRIP
2+
3+
// RUN: %target-swift-frontend -parse-as-library -module-name Test -validate-tbd-against-ir=missing -unavailable-decl-optimization=complete %s -emit-ir | %FileCheck %s --check-prefixes=CHECK,CHECK-STRIP
4+
5+
// CHECK-NO-STRIP: s4Test29unavailableFuncWithNestedTypeyyF
6+
// CHECK-STRIP-NOT: s4Test29unavailableFuncWithNestedTypeyyF
7+
@available(*, unavailable)
8+
public func unavailableFuncWithNestedType() {
9+
struct NestedInFunction {
10+
// s4Test29unavailableFuncWithNestedTypeyyF0E10InFunctionL_VADycfC
11+
init() {}
12+
}
13+
14+
_ = NestedInFunction()
15+
}
16+
17+
// CHECK-NO-STRIP: s4Test29unavailableFuncWithNestedTypeyyF0E10InFunctionL_VADycfC
18+
// CHECK-STRIP-NOT: s4Test29unavailableFuncWithNestedTypeyyF0E10InFunctionL_VADycfC
19+
20+
public struct S {}
21+
22+
extension S {
23+
@available(*, unavailable)
24+
public struct NestedInExtension {
25+
// CHECK-NO-STRIP: s4Test1SV17NestedInExtensionV6methodyyF
26+
// CHECK-STRIP-NOT: s4Test1SV17NestedInExtensionV6methodyyF
27+
public func method() {}
28+
}
29+
}
30+
31+
// CHECK-NO-STRIP: s4Test1SV17NestedInExtensionVMa
32+
// CHECK-STRIP-NOT: s4Test1SV17NestedInExtensionVMa
33+
34+
// CHECK-NO-STRIP: s4Test29unavailableFuncWithNestedTypeyyF0E10InFunctionL_VMa
35+
// CHECK-STRIP-NOT: s4Test29unavailableFuncWithNestedTypeyyF0E10InFunctionL_VMa

0 commit comments

Comments
 (0)