зеркало из https://github.com/microsoft/clang.git
objc-gc: Adds support for "weak" property attribute under GC.
// rdar://10073896 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139203 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
c79a0d22f8
Коммит
4019f7d384
|
@ -594,6 +594,12 @@ Decl *Sema::ActOnPropertyImplDecl(Scope *S,
|
|||
ObjCPropertyDecl::PropertyAttributeKind kind
|
||||
= property->getPropertyAttributes();
|
||||
QualType PropType = Context.getCanonicalType(property->getType());
|
||||
bool PropertyIsGCWeak = (kind & ObjCPropertyDecl::OBJC_PR_weak &&
|
||||
!getLangOptions().ObjCAutoRefCount &&
|
||||
getLangOptions().getGCMode() !=
|
||||
LangOptions::NonGC);
|
||||
if (PropertyIsGCWeak)
|
||||
PropType = Context.getObjCGCQualType(PropType, Qualifiers::Weak);
|
||||
QualType PropertyIvarType = PropType;
|
||||
if (PropType->isReferenceType())
|
||||
PropertyIvarType = cast<ReferenceType>(PropType)->getPointeeType();
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-gc -fobjc-nonfragile-abi -emit-llvm -o - %s | FileCheck %s
|
||||
// rdar://10073896
|
||||
|
||||
@interface I
|
||||
{
|
||||
__weak id wObject;
|
||||
}
|
||||
@property (readwrite, weak) id representedObject;
|
||||
@property (readwrite, weak) id wObject;
|
||||
@property (readwrite, weak) __weak id wRandom;
|
||||
@property (readwrite, assign) __weak id wAnother;
|
||||
@end
|
||||
|
||||
@implementation I
|
||||
@synthesize representedObject;
|
||||
@synthesize wObject;
|
||||
@synthesize wRandom;
|
||||
@synthesize wAnother;
|
||||
@end
|
||||
// CHECK: call i8* @objc_read_weak
|
||||
// CHECK: call i8* @objc_assign_weak
|
||||
// CHECK: call i8* @objc_read_weak
|
||||
// CHECK: call i8* @objc_assign_weak
|
||||
// CHECK: call i8* @objc_read_weak
|
||||
// CHECK: call i8* @objc_assign_weak
|
||||
// CHECK: call i8* @objc_read_weak
|
||||
// CHECK: call i8* @objc_assign_weak
|
||||
|
Загрузка…
Ссылка в новой задаче