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}}
 {
-...@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}}
+...@public
+  id IVAR4;
 }
 @end
+
+...@interface Base @end
+
+...@implementation Base { 
+    int ivar1; 
+...@public
+    int ivar2; 
+} 
+...@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; }
+


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to