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:
Fariborz Jahanian 2009-04-29 21:45:02 +00:00
parent 56ed2eab9e
commit bff0167a0b
2 changed files with 11 additions and 6 deletions

View File

@ -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();

View File

@ -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