On Mon, Mar 22, 2010 at 11:25 AM, Fariborz Jahanian <[email protected]> wrote: > Author: fjahanian > Date: Mon Mar 22 13:25:57 2010 > New Revision: 99193 > > URL: http://llvm.org/viewvc/llvm-project?rev=99193&view=rev > Log: > More clean up of ivars which are either in class extensions and > implementation or synthesized into an implementation. Also, > fixes a code gen. bug when ivars are itroduced in interleaved > implementations. (related to radar 7547942).
Should we get a test case for the codegen bug? - Daniel > Modified: > cfe/trunk/include/clang/AST/ASTContext.h > cfe/trunk/lib/AST/ASTContext.cpp > > Modified: cfe/trunk/include/clang/AST/ASTContext.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/ASTContext.h?rev=99193&r1=99192&r2=99193&view=diff > ============================================================================== > --- cfe/trunk/include/clang/AST/ASTContext.h (original) > +++ cfe/trunk/include/clang/AST/ASTContext.h Mon Mar 22 13:25:57 2010 > @@ -937,8 +937,7 @@ > llvm::SmallVectorImpl<ObjCIvarDecl*> &Ivars); > void CollectNonClassIvars(const ObjCInterfaceDecl *OI, > llvm::SmallVectorImpl<ObjCIvarDecl*> &Ivars); > - unsigned CountSynthesizedIvars(const ObjCInterfaceDecl *OI); > - unsigned CountProtocolSynthesizedIvars(const ObjCProtocolDecl *PD); > + unsigned CountNonClassIvars(const ObjCInterfaceDecl *OI); > void CollectInheritedProtocols(const Decl *CDecl, > llvm::SmallPtrSet<ObjCProtocolDecl*, 8> &Protocols); > > > Modified: cfe/trunk/lib/AST/ASTContext.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=99193&r1=99192&r2=99193&view=diff > ============================================================================== > --- cfe/trunk/lib/AST/ASTContext.cpp (original) > +++ cfe/trunk/lib/AST/ASTContext.cpp Mon Mar 22 13:25:57 2010 > @@ -858,34 +858,22 @@ > } > } > > -unsigned ASTContext::CountProtocolSynthesizedIvars(const ObjCProtocolDecl > *PD) { > - unsigned count = 0; > - for (ObjCContainerDecl::prop_iterator I = PD->prop_begin(), > - E = PD->prop_end(); I != E; ++I) > - if ((*I)->getPropertyIvarDecl()) > +unsigned ASTContext::CountNonClassIvars(const ObjCInterfaceDecl *OI) { > + unsigned count = 0; > + // Count ivars declared in class extension. > + if (const ObjCCategoryDecl *CDecl = OI->getClassExtension()) { > + for (ObjCCategoryDecl::ivar_iterator I = CDecl->ivar_begin(), > + E = CDecl->ivar_end(); I != E; ++I) { > ++count; > - > - // Also look into nested protocols. > - for (ObjCProtocolDecl::protocol_iterator P = PD->protocol_begin(), > - E = PD->protocol_end(); P != E; ++P) > - count += CountProtocolSynthesizedIvars(*P); > - return count; > -} > - > -unsigned ASTContext::CountSynthesizedIvars(const ObjCInterfaceDecl *OI) { > - unsigned count = 0; > - for (ObjCInterfaceDecl::prop_iterator I = OI->prop_begin(), > - E = OI->prop_end(); I != E; ++I) { > - if ((*I)->getPropertyIvarDecl()) > - ++count; > - } > - // Also look into interface's protocol list for properties declared > - // in the protocol and whose ivars are synthesized. > - for (ObjCInterfaceDecl::protocol_iterator P = OI->protocol_begin(), > - PE = OI->protocol_end(); P != PE; ++P) { > - ObjCProtocolDecl *PD = (*P); > - count += CountProtocolSynthesizedIvars(PD); > + } > } > + > + // Count ivar defined in this class's implementation. This > + // includes synthesized ivars. > + if (ObjCImplementationDecl *ImplDecl = OI->getImplementation()) > + for (ObjCImplementationDecl::ivar_iterator I = ImplDecl->ivar_begin(), > + E = ImplDecl->ivar_end(); I != E; ++I) > + ++count; > return count; > } > > @@ -966,7 +954,7 @@ > > // Add in synthesized ivar count if laying out an implementation. > if (Impl) { > - unsigned SynthCount = CountSynthesizedIvars(D); > + unsigned SynthCount = CountNonClassIvars(D); > // If there aren't any sythesized ivars then reuse the interface > // entry. Note we can't cache this because we simply free all > // entries later; however we shouldn't look up implementations > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
