diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2009-04-29 21:45:02 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2009-04-29 21:45:02 +0000 |
commit | 6e5201b71dcf5e98d2ac4e14bebf5b4080120bb6 (patch) | |
tree | 1d0345f4abbe55fc523ecf65563b416b25622bc8 | |
parent | 6c92fa75e62937f9738696840efcb258560f4568 (diff) |
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
-rw-r--r-- | lib/Sema/SemaDeclObjC.cpp | 3 | ||||
-rw-r--r-- | test/SemaObjC/ivar-sem-check-2.m | 14 |
2 files changed, 11 insertions, 6 deletions
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 |