[cfe-commits] r99198 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td lib/Parse/ParseObjc.cpp lib/Sema/SemaDeclObjC.cpp test/SemaObjC/ivar-in-implementations.m
Fariborz Jahanian
fjahanian at apple.com
Mon Mar 22 12:04:15 PDT 2010
Author: fjahanian
Date: Mon Mar 22 14:04:14 2010
New Revision: 99198
URL: http://llvm.org/viewvc/llvm-project?rev=99198&view=rev
Log:
Fixes access rues for ivars declared in class
implementations (radar 7547942).
Modified:
cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
cfe/trunk/lib/Parse/ParseObjc.cpp
cfe/trunk/lib/Sema/SemaDeclObjC.cpp
cfe/trunk/test/SemaObjC/ivar-in-implementations.m
Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=99198&r1=99197&r2=99198&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Mon Mar 22 14:04:14 2010
@@ -268,8 +268,6 @@
"instance variable is already declared">;
def warn_on_superclass_use : Warning<
"class implementation may not have super class">;
-def err_non_private_ivar_declaration : Error<
- "only private ivars may be declared in implementation">;
def err_conflicting_ivar_bitwidth : Error<
"instance variable %0 has conflicting bit-field width">;
def err_conflicting_ivar_name : Error<
Modified: cfe/trunk/lib/Parse/ParseObjc.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseObjc.cpp?rev=99198&r1=99197&r2=99198&view=diff
==============================================================================
--- cfe/trunk/lib/Parse/ParseObjc.cpp (original)
+++ cfe/trunk/lib/Parse/ParseObjc.cpp Mon Mar 22 14:04:14 2010
@@ -1236,7 +1236,7 @@
if (Tok.is(tok::l_brace)) // we have ivars
ParseObjCClassInstanceVariables(ImplClsType/*FIXME*/,
- tok::objc_protected, atLoc);
+ tok::objc_private, atLoc);
ObjCImpDecl = ImplClsType;
PendingObjCImpDecl.push_back(ObjCImpDecl);
Modified: cfe/trunk/lib/Sema/SemaDeclObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclObjC.cpp?rev=99198&r1=99197&r2=99198&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclObjC.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclObjC.cpp Mon Mar 22 14:04:14 2010
@@ -667,8 +667,6 @@
Diag(ClsIvar->getLocation(), diag::note_previous_definition);
continue;
}
- if (ImplIvar->getAccessControl() != ObjCIvarDecl::Private)
- Diag(ImplIvar->getLocation(), diag::err_non_private_ivar_declaration);
// Instance ivar to Implementation's DeclContext.
ImplIvar->setLexicalDeclContext(ImpDecl);
IDecl->makeDeclVisibleInContext(ImplIvar, false);
Modified: cfe/trunk/test/SemaObjC/ivar-in-implementations.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/ivar-in-implementations.m?rev=99198&r1=99197&r2=99198&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjC/ivar-in-implementations.m (original)
+++ cfe/trunk/test/SemaObjC/ivar-in-implementations.m Mon Mar 22 14:04:14 2010
@@ -11,12 +11,29 @@
@implementation INTFSTANDALONE : Super // expected-warning {{class implementation may not have super class}}
{
- at private
- id IVAR1;
+ id PRIV_IVAR;
@protected
- id IVAR2; // expected-error {{only private ivars may be declared in implementation}}
+ id PRTCTD;
@private
id IVAR3;
int IVAR; // expected-error {{instance variable is already declared}}
+ at public
+ id IVAR4;
}
@end
+
+ at interface Base @end
+
+ at implementation Base {
+ int ivar1;
+ at public
+ int ivar2;
+}
+ at end
+
+id fn1(INTFSTANDALONE *b) { return b->PRIV_IVAR; } // expected-error {{instance variable 'PRIV_IVAR' is private}}
+
+id fn2(INTFSTANDALONE *b) { return b->PRTCTD; } // expected-error {{instance variable 'PRTCTD' is protected}}
+
+id fn4(INTFSTANDALONE *b) { return b->IVAR4; }
+
More information about the cfe-commits
mailing list