[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