Skip to content

Commit ea73831

Browse files
authored
Merge pull request #31800 from slavapestov/unavailable-allocating-ctor-fix
SILGen: Remove obsolete hack preventing emission of allocating init for unavailable initializer
2 parents bcc57b4 + d258c35 commit ea73831

File tree

3 files changed

+25
-7
lines changed

3 files changed

+25
-7
lines changed

lib/SILGen/SILGen.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -957,13 +957,6 @@ void SILGenModule::emitConstructor(ConstructorDecl *decl) {
957957
if (isa<ProtocolDecl>(decl->getDeclContext()))
958958
return;
959959

960-
// Always-unavailable imported constructors are factory methods
961-
// that have been imported as constructors and then hidden by an
962-
// imported init method.
963-
if (decl->hasClangNode() &&
964-
decl->getAttrs().isUnavailable(decl->getASTContext()))
965-
return;
966-
967960
SILDeclRef constant(decl);
968961
DeclContext *declCtx = decl->getDeclContext();
969962

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
@import Foundation;
2+
3+
@interface ClassWithUnavailableInit : NSObject
4+
5+
- (instancetype)initWithBundleID:(NSString *)bundleID __attribute__((availability(macos, unavailable)));
6+
@end
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// RUN: %target-swift-emit-silgen(mock-sdk: %clang-importer-sdk) -enable-objc-interop -import-objc-header %S/Inputs/objc_init_unavailable.h %s | %FileCheck %s
2+
// REQUIRES: objc_interop
3+
4+
@available(macOS, unavailable)
5+
public func callUnavailableInit(name: String) -> ClassWithUnavailableInit {
6+
return ClassWithUnavailableInit(bundleID: name)
7+
}
8+
9+
// CHECK-LABEL: sil [ossa] @$s21objc_init_unavailable19callUnavailableInit4nameSo09ClassWitheF0CSS_tF : $@convention(thin) (@guaranteed String) -> @owned ClassWithUnavailableInit {
10+
// CHECK: function_ref @$sSo24ClassWithUnavailableInitC8bundleIDABSgSSSg_tcfC : $@convention(method) (@owned Optional<String>, @thick ClassWithUnavailableInit.Type) -> @owned Optional<ClassWithUnavailableInit>
11+
// CHECK: return
12+
13+
// CHECK-LABEL: sil shared [serializable] [ossa] @$sSo24ClassWithUnavailableInitC8bundleIDABSgSSSg_tcfC : $@convention(method) (@owned Optional<String>, @thick ClassWithUnavailableInit.Type) -> @owned Optional<ClassWithUnavailableInit> {
14+
// CHECK: function_ref @$sSo24ClassWithUnavailableInitC8bundleIDABSgSSSg_tcfcTO : $@convention(method) (@owned Optional<String>, @owned ClassWithUnavailableInit) -> @owned Optional<ClassWithUnavailableInit>
15+
// CHECK: return
16+
17+
// CHECK-LABEL: sil shared [serializable] [thunk] [ossa] @$sSo24ClassWithUnavailableInitC8bundleIDABSgSSSg_tcfcTO : $@convention(method) (@owned Optional<String>, @owned ClassWithUnavailableInit) -> @owned Optional<ClassWithUnavailableInit> {
18+
// CHECK: objc_method %1 : $ClassWithUnavailableInit, #ClassWithUnavailableInit.init!initializer.foreign : (ClassWithUnavailableInit.Type) -> (String?) -> ClassWithUnavailableInit?, $@convention(objc_method) (Optional<NSString>, @owned ClassWithUnavailableInit) -> @owned Optional<ClassWithUnavailableInit>
19+
// CHECK: return

0 commit comments

Comments
 (0)