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) {
18021802 if (vd->hasStorage ())
18031803 addGlobalVariable (vd);
18041804
1805- vd-> visitEmittedAccessors ([&](AccessorDecl *accessor) {
1805+ visitEmittedAccessors (vd, [&](AccessorDecl *accessor) {
18061806 emitFunction (accessor);
18071807 });
18081808
@@ -1825,6 +1825,16 @@ void SILGenModule::visitMacroExpansionDecl(MacroExpansionDecl *d) {
18251825 // Expansion already visited as auxiliary decls.
18261826}
18271827
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+
18281838bool
18291839SILGenModule::canStorageUseStoredKeyPathComponent (AbstractStorageDecl *decl,
18301840 ResilienceExpansion expansion) {
Original file line number Diff line number Diff line change @@ -301,6 +301,11 @@ class LLVM_LIBRARY_VISIBILITY SILGenModule : public ASTVisitor<SILGenModule> {
301301 void visitMacroDecl (MacroDecl *d);
302302 void visitMacroExpansionDecl (MacroExpansionDecl *d);
303303
304+ // Same as AbstractStorageDecl::visitEmittedAccessors, but skips over skipped
305+ // (unavailable) decls.
306+ void visitEmittedAccessors (AbstractStorageDecl *D,
307+ llvm::function_ref<void (AccessorDecl *)>);
308+
304309 void emitEntryPoint (SourceFile *SF);
305310 void emitEntryPoint (SourceFile *SF, SILFunction *TopLevel);
306311
Original file line number Diff line number Diff line change @@ -1628,7 +1628,7 @@ void SILGenFunction::visitVarDecl(VarDecl *D) {
16281628 });
16291629
16301630 // Emit the variable's accessors.
1631- D-> visitEmittedAccessors ([&](AccessorDecl *accessor) {
1631+ SGM. visitEmittedAccessors (D, [&](AccessorDecl *accessor) {
16321632 SGM.emitFunction (accessor);
16331633 });
16341634}
Original file line number Diff line number Diff line change @@ -257,7 +257,7 @@ void SILGenTopLevel::visitAbstractFunctionDecl(AbstractFunctionDecl *AFD) {
257257}
258258
259259void SILGenTopLevel::visitAbstractStorageDecl (AbstractStorageDecl *ASD) {
260- ASD-> visitEmittedAccessors (
260+ SGF. SGM . visitEmittedAccessors (ASD,
261261 [this ](AccessorDecl *Accessor) { visitAbstractFunctionDecl (Accessor); });
262262}
263263
@@ -338,7 +338,7 @@ void SILGenTopLevel::TypeVisitor::visitAbstractFunctionDecl(
338338
339339void SILGenTopLevel::TypeVisitor::visitAbstractStorageDecl (
340340 AbstractStorageDecl *ASD) {
341- ASD-> visitEmittedAccessors (
341+ SGF. SGM . visitEmittedAccessors (ASD,
342342 [this ](AccessorDecl *Accessor) { visitAbstractFunctionDecl (Accessor); });
343343}
344344
Original file line number Diff line number Diff line change @@ -1242,7 +1242,7 @@ class SILGenType : public TypeMemberVisitor<SILGenType> {
12421242 }
12431243
12441244 void visitAccessors (AbstractStorageDecl *asd) {
1245- asd-> visitEmittedAccessors ([&](AccessorDecl *accessor) {
1245+ SGM. visitEmittedAccessors (asd, [&](AccessorDecl *accessor) {
12461246 visitFuncDecl (accessor);
12471247 });
12481248 }
@@ -1422,7 +1422,7 @@ class SILGenExtension : public TypeMemberVisitor<SILGenExtension> {
14221422 }
14231423
14241424 void visitAccessors (AbstractStorageDecl *asd) {
1425- asd-> visitEmittedAccessors ([&](AccessorDecl *accessor) {
1425+ SGM. visitEmittedAccessors (asd, [&](AccessorDecl *accessor) {
14261426 visitFuncDecl (accessor);
14271427 });
14281428 }
Original file line number Diff line number Diff line change @@ -21,6 +21,15 @@ public struct AvailableStruct<T> {
2121 _modify { fatalError ( ) }
2222 }
2323
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+
2433 // CHECK-NO-STRIP: s4Test15AvailableStructVyACyxGxcfC
2534 // CHECK-STRIP-NOT: s4Test15AvailableStructVyACyxGxcfC
2635 @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