Skip to content

Commit 04ce7bf

Browse files
Merge pull request #27557 from varungandhi-apple/vg-fix-selector-names
Use the accessor names as written in Objective-C.
2 parents 14985a8 + 0d727d0 commit 04ce7bf

File tree

3 files changed

+34
-2
lines changed

3 files changed

+34
-2
lines changed

lib/AST/Decl.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4962,7 +4962,7 @@ getNameFromObjcAttribute(const ObjCAttr *attr, DeclName preferredName) {
49624962
ObjCSelector
49634963
AbstractStorageDecl::getObjCGetterSelector(Identifier preferredName) const {
49644964
// If the getter has an @objc attribute with a name, use that.
4965-
if (auto getter = getParsedAccessor(AccessorKind::Get)) {
4965+
if (auto getter = getOpaqueAccessor(AccessorKind::Get)) {
49664966
if (auto name = getNameFromObjcAttribute(getter->getAttrs().
49674967
getAttribute<ObjCAttr>(), preferredName))
49684968
return *name;
@@ -4992,7 +4992,7 @@ AbstractStorageDecl::getObjCGetterSelector(Identifier preferredName) const {
49924992
ObjCSelector
49934993
AbstractStorageDecl::getObjCSetterSelector(Identifier preferredName) const {
49944994
// If the setter has an @objc attribute with a name, use that.
4995-
auto setter = getParsedAccessor(AccessorKind::Set);
4995+
auto setter = getOpaqueAccessor(AccessorKind::Set);
49964996
auto objcAttr = setter ? setter->getAttrs().getAttribute<ObjCAttr>()
49974997
: nullptr;
49984998
if (auto name = getNameFromObjcAttribute(objcAttr, DeclName(preferredName))) {
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#import <Foundation/Foundation.h>
2+
3+
@protocol PowerProtocol <NSObject>
4+
@property (nonatomic, getter=getPower, setter=setPower:) int64_t level;
5+
@end

test/PrintAsObjC/getter_setter.swift

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-swift-frontend %s -emit-ir -o %t/getter_setter.ir -emit-objc-header-path %t/getter_setter.h -import-objc-header %S/Inputs/propertyWithOddGetterSetterNames.h -disable-objc-attr-requires-foundation-module
3+
// RUN: %FileCheck --check-prefix="HEADER" %s < %t/getter_setter.h
4+
// RUN: %FileCheck --check-prefix="IRCHECK1" %s < %t/getter_setter.ir
5+
// RUN: %FileCheck --check-prefix="IRCHECK2" %s < %t/getter_setter.ir
6+
//
7+
// REQUIRES: objc_interop
8+
9+
import Foundation
10+
11+
// rdar://problem/55519276: Make sure we're using the right selector names as
12+
// written in Objective-C.
13+
public final class Saiyan: NSObject, PowerProtocol {
14+
public var level: Int64
15+
// HEADER: @property (nonatomic, getter=getPower, setter=setPower:) int64_t level;
16+
// IRCHECK1: METACLASS_DATA__TtC13getter_setter6Saiyan
17+
// IRCHECK1: selector_data(getPower)
18+
// IRCHECK1: selector_data(setPower:)
19+
// IRCHECK1: INSTANCE_METHODS__TtC13getter_setter6Saiyan
20+
// IRCHECK2: METACLASS_DATA__TtC13getter_setter6Saiyan
21+
// IRCHECK2-NOT: selector_data(level)
22+
// IRCHECK2-NOT: selector_data(setLevel:)
23+
// IRCHECK2: INSTANCE_METHODS__TtC13getter_setter6Saiyan
24+
public override init() {
25+
level = 9001
26+
}
27+
}

0 commit comments

Comments
 (0)