ObjC getters with names like "newItem" should still be linked to the @property.
authorJordan Rose <jordan_rose@apple.com>
Fri, 16 Jan 2015 23:04:26 +0000 (23:04 +0000)
committerJordan Rose <jordan_rose@apple.com>
Fri, 16 Jan 2015 23:04:26 +0000 (23:04 +0000)
commit16ba553f754a6ab6c934deaa6232be1cb74db904
treeb95d7f967d9fac4741d0be74fafe866c1898ae19
parent71fb83ea7aeed1a60a621752471f9f7f28346df3
ObjC getters with names like "newItem" should still be linked to the @property.

Two years ago I added a compile-time "optimization" to
ObjCMethodDecl::findPropertyDecl: exit early if the current method is part
of a special Objective-C method family (like 'new' or 'init'). However, if a
property (declared with @property) has a name that matches a method family,
the getter picks up that family despite being declared by the property. The
early exit then made ObjCMethodDecl::findPropertyDecl decide that there
was no associated property, despite the method itself being marked as an
accessor. This corrects that by removing the early exit.

This does /not/ change the fact that such a getter is considered to return a
value with a +1 retain count. The best way to eliminate this is by adding the
objc_method_family(none) attribute to the getter, but unlike the existing
ns_returns_not_retained that can't be applied directly to the property -- you
have to redeclare the getter instead.

(It'd be nice if @property just implied objc_method_family(none) for its
getter, but that would be a backwards-incompatible change.)

rdar://problem/19038838

llvm-svn: 226338
clang/lib/AST/DeclObjC.cpp
clang/test/ARCMT/objcmt-property-dot-syntax.m
clang/test/ARCMT/objcmt-property-dot-syntax.m.result