File tree Expand file tree Collapse file tree 7 files changed +49
-6
lines changed Expand file tree Collapse file tree 7 files changed +49
-6
lines changed Original file line number Diff line number Diff line change @@ -1802,7 +1802,7 @@ void SILGenModule::visitVarDecl(VarDecl *vd) {
1802
1802
if (vd->hasStorage ())
1803
1803
addGlobalVariable (vd);
1804
1804
1805
- vd-> visitEmittedAccessors ([&](AccessorDecl *accessor) {
1805
+ visitEmittedAccessors (vd, [&](AccessorDecl *accessor) {
1806
1806
emitFunction (accessor);
1807
1807
});
1808
1808
@@ -1825,6 +1825,16 @@ void SILGenModule::visitMacroExpansionDecl(MacroExpansionDecl *d) {
1825
1825
// Expansion already visited as auxiliary decls.
1826
1826
}
1827
1827
1828
+ void SILGenModule::visitEmittedAccessors (
1829
+ AbstractStorageDecl *D, llvm::function_ref<void (AccessorDecl *)> callback) {
1830
+ D->visitEmittedAccessors ([&](AccessorDecl *accessor) {
1831
+ if (shouldSkipDecl (accessor))
1832
+ return ;
1833
+
1834
+ callback (accessor);
1835
+ });
1836
+ }
1837
+
1828
1838
bool
1829
1839
SILGenModule::canStorageUseStoredKeyPathComponent (AbstractStorageDecl *decl,
1830
1840
ResilienceExpansion expansion) {
Original file line number Diff line number Diff line change @@ -301,6 +301,11 @@ class LLVM_LIBRARY_VISIBILITY SILGenModule : public ASTVisitor<SILGenModule> {
301
301
void visitMacroDecl (MacroDecl *d);
302
302
void visitMacroExpansionDecl (MacroExpansionDecl *d);
303
303
304
+ // Same as AbstractStorageDecl::visitEmittedAccessors, but skips over skipped
305
+ // (unavailable) decls.
306
+ void visitEmittedAccessors (AbstractStorageDecl *D,
307
+ llvm::function_ref<void (AccessorDecl *)>);
308
+
304
309
void emitEntryPoint (SourceFile *SF);
305
310
void emitEntryPoint (SourceFile *SF, SILFunction *TopLevel);
306
311
Original file line number Diff line number Diff line change @@ -1628,7 +1628,7 @@ void SILGenFunction::visitVarDecl(VarDecl *D) {
1628
1628
});
1629
1629
1630
1630
// Emit the variable's accessors.
1631
- D-> visitEmittedAccessors ([&](AccessorDecl *accessor) {
1631
+ SGM. visitEmittedAccessors (D, [&](AccessorDecl *accessor) {
1632
1632
SGM.emitFunction (accessor);
1633
1633
});
1634
1634
}
Original file line number Diff line number Diff line change @@ -257,7 +257,7 @@ void SILGenTopLevel::visitAbstractFunctionDecl(AbstractFunctionDecl *AFD) {
257
257
}
258
258
259
259
void SILGenTopLevel::visitAbstractStorageDecl (AbstractStorageDecl *ASD) {
260
- ASD-> visitEmittedAccessors (
260
+ SGF. SGM . visitEmittedAccessors (ASD,
261
261
[this ](AccessorDecl *Accessor) { visitAbstractFunctionDecl (Accessor); });
262
262
}
263
263
@@ -338,7 +338,7 @@ void SILGenTopLevel::TypeVisitor::visitAbstractFunctionDecl(
338
338
339
339
void SILGenTopLevel::TypeVisitor::visitAbstractStorageDecl (
340
340
AbstractStorageDecl *ASD) {
341
- ASD-> visitEmittedAccessors (
341
+ SGF. SGM . visitEmittedAccessors (ASD,
342
342
[this ](AccessorDecl *Accessor) { visitAbstractFunctionDecl (Accessor); });
343
343
}
344
344
Original file line number Diff line number Diff line change @@ -1242,7 +1242,7 @@ class SILGenType : public TypeMemberVisitor<SILGenType> {
1242
1242
}
1243
1243
1244
1244
void visitAccessors (AbstractStorageDecl *asd) {
1245
- asd-> visitEmittedAccessors ([&](AccessorDecl *accessor) {
1245
+ SGM. visitEmittedAccessors (asd, [&](AccessorDecl *accessor) {
1246
1246
visitFuncDecl (accessor);
1247
1247
});
1248
1248
}
@@ -1422,7 +1422,7 @@ class SILGenExtension : public TypeMemberVisitor<SILGenExtension> {
1422
1422
}
1423
1423
1424
1424
void visitAccessors (AbstractStorageDecl *asd) {
1425
- asd-> visitEmittedAccessors ([&](AccessorDecl *accessor) {
1425
+ SGM. visitEmittedAccessors (asd, [&](AccessorDecl *accessor) {
1426
1426
visitFuncDecl (accessor);
1427
1427
});
1428
1428
}
Original file line number Diff line number Diff line change @@ -21,6 +21,15 @@ public struct AvailableStruct<T> {
21
21
_modify { fatalError ( ) }
22
22
}
23
23
24
+ // CHECK-NO-STRIP: s4Test15AvailableStructV45availablePropertyWithSomeUnavailableAccessorsxvg
25
+ // CHECK-NO-STRIP: s4Test15AvailableStructV45availablePropertyWithSomeUnavailableAccessorsxvs
26
+ // CHECK-STRIP-NOT: s4Test15AvailableStructV45availablePropertyWithSomeUnavailableAccessorsxvs
27
+ public var availablePropertyWithSomeUnavailableAccessors : T {
28
+ get { fatalError ( ) }
29
+ @available ( * , unavailable)
30
+ set { fatalError ( ) }
31
+ }
32
+
24
33
// CHECK-NO-STRIP: s4Test15AvailableStructVyACyxGxcfC
25
34
// CHECK-STRIP-NOT: s4Test15AvailableStructVyACyxGxcfC
26
35
@available ( * , unavailable)
Original file line number Diff line number Diff line change
1
+ // RUN: %target-swift-frontend -emit-ir %s -enable-experimental-feature Embedded | %FileCheck %s
2
+
3
+ // REQUIRES: swift_in_compiler
4
+ // REQUIRES: VENDOR=apple
5
+ // REQUIRES: OS=macosx
6
+
7
+ struct Foo {
8
+ public subscript( x: Int ) -> Int {
9
+ get {
10
+ return 0
11
+ }
12
+
13
+ @available ( * , unavailable)
14
+ set { }
15
+ }
16
+ }
17
+
18
+ // CHECK: $s4main3FooVyS2icig
19
+ // CHECK-NOT: $s4main3FooVyS2icis
You can’t perform that action at this time.
0 commit comments