use of an ivar specified on a property @synthesize
and found in super class triggers a diagnostics. llvm-svn: 70414
This commit is contained in:
parent
56ed2eab9e
commit
bff0167a0b
|
@ -1895,7 +1895,6 @@ Sema::DeclPtrTy Sema::ActOnPropertyImplDecl(SourceLocation AtLoc,
|
|||
// Check that we have a valid, previously declared ivar for @synthesize
|
||||
if (Synthesize) {
|
||||
// @synthesize
|
||||
bool NoExplicitPropertyIvar = (!PropertyIvar);
|
||||
if (!PropertyIvar)
|
||||
PropertyIvar = PropertyId;
|
||||
QualType PropType = Context.getCanonicalType(property->getType());
|
||||
|
@ -1914,7 +1913,7 @@ Sema::DeclPtrTy Sema::ActOnPropertyImplDecl(SourceLocation AtLoc,
|
|||
// a property implementation and to avoid future warnings.
|
||||
}
|
||||
else if (getLangOptions().ObjCNonFragileABI &&
|
||||
NoExplicitPropertyIvar && ClassDeclared != IDecl) {
|
||||
ClassDeclared != IDecl) {
|
||||
Diag(PropertyLoc, diag::error_ivar_in_superclass_use)
|
||||
<< property->getDeclName() << Ivar->getDeclName()
|
||||
<< ClassDeclared->getDeclName();
|
||||
|
|
|
@ -1,17 +1,23 @@
|
|||
// RUN: clang-cc -fsyntax-only -triple x86_64-apple-darwin10 -verify %s
|
||||
|
||||
@interface Super {
|
||||
id value; // expected-note {{previously declared 'value' here}}
|
||||
id value2; // expected-note {{previously declared 'value2' here}}
|
||||
}
|
||||
@property(retain) id value;
|
||||
@property(retain) id value1;
|
||||
@property(retain) id prop;
|
||||
@end
|
||||
|
||||
@interface Sub : Super @end
|
||||
@interface Sub : Super
|
||||
{
|
||||
id value;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation Sub
|
||||
@synthesize value; // expected-error {{property 'value' attempting to use ivar 'value' declared in in super class 'Super'}} // expected-note {{previous use is here}}
|
||||
@synthesize value1=value; // expected-error {{synthesized properties 'value1' and 'value' both claim ivar 'value'}}
|
||||
@synthesize value; // expected-note {{previous use is here}}
|
||||
@synthesize value1=value; // expected-error {{synthesized properties 'value1' and 'value' both claim ivar 'value'}}
|
||||
@synthesize prop=value2; // expected-error {{property 'prop' attempting to use ivar 'value2' declared in in super class 'Super'}}
|
||||
@end
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue