[cfe-commits] r99193 - in /cfe/trunk: include/clang/AST/ASTContext.h lib/AST/ASTContext.cpp

Daniel Dunbar daniel at zuster.org
Thu Mar 25 08:52:52 PDT 2010


On Mon, Mar 22, 2010 at 11:25 AM, Fariborz Jahanian <fjahanian at apple.com> 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
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>




More information about the cfe-commits mailing list