forked from OSchip/llvm-project
Misc. fixes to bring Objetive-C++'s handling of
gc attributes to be inline with Objective-C (for radar 7925141). llvm-svn: 104084
This commit is contained in:
parent
bdb604a806
commit
9f963c2488
|
@ -383,7 +383,16 @@ Sema::DeclPtrTy Sema::ActOnPropertyImplDecl(Scope *S,
|
|||
|
||||
// Check that type of property and its ivar are type compatible.
|
||||
if (PropType != IvarType) {
|
||||
if (CheckAssignmentConstraints(PropType, IvarType) != Compatible) {
|
||||
bool compat = false;
|
||||
if (isa<ObjCObjectPointerType>(PropType)
|
||||
&& isa<ObjCObjectPointerType>(IvarType))
|
||||
compat =
|
||||
Context.canAssignObjCInterfaces(
|
||||
PropType->getAs<ObjCObjectPointerType>(),
|
||||
IvarType->getAs<ObjCObjectPointerType>());
|
||||
else
|
||||
compat = (CheckAssignmentConstraints(PropType, IvarType) == Compatible);
|
||||
if (!compat) {
|
||||
Diag(PropertyLoc, diag::error_property_ivar_type)
|
||||
<< property->getDeclName() << PropType
|
||||
<< Ivar->getDeclName() << IvarType;
|
||||
|
|
|
@ -1042,7 +1042,8 @@ Sema::IsStandardConversion(Expr* From, QualType ToType,
|
|||
CanonTo = Context.getCanonicalType(ToType);
|
||||
if (CanonFrom.getLocalUnqualifiedType()
|
||||
== CanonTo.getLocalUnqualifiedType() &&
|
||||
CanonFrom.getLocalCVRQualifiers() != CanonTo.getLocalCVRQualifiers()) {
|
||||
(CanonFrom.getLocalCVRQualifiers() != CanonTo.getLocalCVRQualifiers()
|
||||
|| CanonFrom.getObjCGCAttr() != CanonTo.getObjCGCAttr())) {
|
||||
FromType = ToType;
|
||||
CanonFrom = CanonTo;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
// RUN: %clang_cc1 -triple i386-apple-darwin9 -fobjc-gc -fsyntax-only -verify %s
|
||||
// RUN: %clang_cc1 -x objective-c++ -triple i386-apple-darwin9 -fobjc-gc -fsyntax-only -verify %s
|
||||
|
||||
@interface INTF
|
||||
{
|
||||
|
@ -11,7 +12,7 @@
|
|||
}
|
||||
@property (assign) __weak id pweak;
|
||||
@property (assign) __weak id WID;
|
||||
@property (assign) __strong id not;
|
||||
@property (assign) __strong id NOT;
|
||||
@property (assign) id ID;
|
||||
@property (assign) INTF* AWEAK;
|
||||
@property (assign) __weak INTF* WI;
|
||||
|
@ -19,7 +20,7 @@
|
|||
|
||||
@implementation INTF
|
||||
@synthesize pweak=IVAR; // expected-error {{existing ivar 'IVAR' for __weak property 'pweak' must be __weak}}
|
||||
@synthesize not=II; // expected-error {{existing ivar 'II' for a __strong property 'not' must be garbage collectable}}
|
||||
@synthesize NOT=II; // expected-error {{existing ivar 'II' for a __strong property 'NOT' must be garbage collectable}}
|
||||
@synthesize WID;
|
||||
@synthesize ID;
|
||||
@synthesize AWEAK; // expected-error {{existing ivar 'AWEAK' for a __strong property 'AWEAK' must be garbage collectable}}
|
||||
|
|
Loading…
Reference in New Issue