From: Fariborz Jahanian Date: Wed, 29 Apr 2009 21:45:02 +0000 (+0000) Subject: use of an ivar specified on a property @synthesize X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6e5201b71dcf5e98d2ac4e14bebf5b4080120bb6;p=clang use of an ivar specified on a property @synthesize and found in super class triggers a diagnostics. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70414 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index da50573f23..7eea4ff93e 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -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(); diff --git a/test/SemaObjC/ivar-sem-check-2.m b/test/SemaObjC/ivar-sem-check-2.m index 2b85685362..6a703b24f3 100644 --- a/test/SemaObjC/ivar-sem-check-2.m +++ b/test/SemaObjC/ivar-sem-check-2.m @@ -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