Author: Pierre Habouzit Date: 2019-12-09T14:30:01-08:00 New Revision: 1646bb86643326db6e220291d5c71c8d616f66fb
URL: https://github.com/llvm/llvm-project/commit/1646bb86643326db6e220291d5c71c8d616f66fb DIFF: https://github.com/llvm/llvm-project/commit/1646bb86643326db6e220291d5c71c8d616f66fb.diff LOG: Also synthesize _cmd and self for properties Patch by: Pierre Habouzit Differential Revision: https://reviews.llvm.org/D71226 Added: Modified: clang/lib/Sema/SemaObjCProperty.cpp clang/test/CodeGenObjC/direct-method.m Removed: ################################################################################ diff --git a/clang/lib/Sema/SemaObjCProperty.cpp b/clang/lib/Sema/SemaObjCProperty.cpp index 2d91ea1f5fd0..f6717f4cbe5e 100644 --- a/clang/lib/Sema/SemaObjCProperty.cpp +++ b/clang/lib/Sema/SemaObjCProperty.cpp @@ -2498,6 +2498,9 @@ void Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) { // A user declared getter will be synthesize when @synthesize of // the property with the same name is seen in the @implementation GetterMethod->setPropertyAccessor(true); + + GetterMethod->createImplicitParams(Context, + GetterMethod->getClassInterface()); property->setGetterMethodDecl(GetterMethod); // Skip setter if property is read-only. @@ -2569,6 +2572,9 @@ void Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) { // A user declared setter will be synthesize when @synthesize of // the property with the same name is seen in the @implementation SetterMethod->setPropertyAccessor(true); + + SetterMethod->createImplicitParams(Context, + SetterMethod->getClassInterface()); property->setSetterMethodDecl(SetterMethod); } // Add any synthesized methods to the global pool. This allows us to diff --git a/clang/test/CodeGenObjC/direct-method.m b/clang/test/CodeGenObjC/direct-method.m index eb5a52eb11a2..373bd22a84cd 100644 --- a/clang/test/CodeGenObjC/direct-method.m +++ b/clang/test/CodeGenObjC/direct-method.m @@ -190,3 +190,14 @@ int useRoot(Root *r) { // CHECK: %{{[^ ]*}} = call i32 bitcast {{.*}} @"\01-[Root intProperty2]" return [r getInt] + [r intProperty] + [r intProperty2]; } + +__attribute__((objc_root_class)) +@interface RootDeclOnly +@property(direct, readonly) int intProperty; +@end + +int useRootDeclOnly(RootDeclOnly *r) { + // CHECK-LABEL: define i32 @useRootDeclOnly + // CHECK: %{{[^ ]*}} = call i32 bitcast {{.*}} @"\01-[RootDeclOnly intProperty]" + return [r intProperty]; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits