Hey Fariborz, Comment below...
On Jan 10, 2009, at 4:06 PM, Fariborz Jahanian wrote: > Author: fjahanian > Date: Sat Jan 10 15:06:09 2009 > New Revision: 62030 > > URL: http://llvm.org/viewvc/llvm-project?rev=62030&view=rev > Log: > This patch fixes the code gen failures which was a fallout from > not merging protocol properties into the classes which > use those protocols. With this patch, all my exceutable > test pass again. > > Modified: > cfe/trunk/lib/CodeGen/CGObjC.cpp > cfe/trunk/lib/CodeGen/CGObjCGNU.cpp > cfe/trunk/lib/CodeGen/CGObjCMac.cpp > cfe/trunk/lib/CodeGen/CGObjCRuntime.h > cfe/trunk/lib/CodeGen/CodeGenFunction.h > > Modified: cfe/trunk/lib/CodeGen/CGObjC.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjC.cpp?rev=62030&r1=62029&r2=62030&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- cfe/trunk/lib/CodeGen/CGObjC.cpp (original) > +++ cfe/trunk/lib/CodeGen/CGObjC.cpp Sat Jan 10 15:06:09 2009 > @@ -103,9 +103,10 @@ > /// StartObjCMethod - Begin emission of an ObjCMethod. This generates > /// the LLVM function and sets the other context used by > /// CodeGenFunction. > -void CodeGenFunction::StartObjCMethod(const ObjCMethodDecl *OMD) { > +void CodeGenFunction::StartObjCMethod(const ObjCMethodDecl *OMD, > + const ObjCContainerDecl *CD) { Why do you need to pass in the ObjCContainerDecl? Since ObjCMethodDecl's are now ScopedDecl's, why can't you use OMD- >getDeclContext()? Curious, snaroff > > FunctionArgList Args; > - llvm::Function *Fn = CGM.getObjCRuntime().GenerateMethod(OMD); > + llvm::Function *Fn = CGM.getObjCRuntime().GenerateMethod(OMD, CD); > > CGM.SetMethodAttributes(OMD, Fn); > > @@ -125,7 +126,7 @@ > /// Generate an Objective-C method. An Objective-C method is a C > function with > /// its pointer, name, and types registered in the class struture. > void CodeGenFunction::GenerateObjCMethod(const ObjCMethodDecl *OMD) { > - StartObjCMethod(OMD); > + StartObjCMethod(OMD, OMD->getClassInterface()); > EmitStmt(OMD->getBody()); > FinishFunction(cast<CompoundStmt>(OMD->getBody())->getRBracLoc()); > } > @@ -143,12 +144,10 @@ > const ObjCPropertyDecl *PD = PID->getPropertyDecl(); > ObjCMethodDecl *OMD = PD->getGetterMethodDecl(); > assert(OMD && "Invalid call to generate getter (empty method)"); > - assert (!dyn_cast<ObjCProtocolDecl>(OMD->getDeclContext()) && > - "GenerateObjCMethod - cannot synthesize protocol getter"); > // FIXME: This is rather murky, we create this here since they will > // not have been created by Sema for us. > OMD->createImplicitParams(getContext(), IMP->getClassInterface()); > - StartObjCMethod(OMD); > + StartObjCMethod(OMD, IMP->getClassInterface()); > > // Determine if we should use an objc_getProperty call for > // this. Non-atomic properties are directly evaluated. > @@ -215,12 +214,10 @@ > const ObjCPropertyDecl *PD = PID->getPropertyDecl(); > ObjCMethodDecl *OMD = PD->getSetterMethodDecl(); > assert(OMD && "Invalid call to generate setter (empty method)"); > - assert (!dyn_cast<ObjCProtocolDecl>(OMD->getDeclContext()) && > - "GenerateObjCSetter - cannot synthesize protocol setter"); > // FIXME: This is rather murky, we create this here since they will > // not have been created by Sema for us. > OMD->createImplicitParams(getContext(), IMP->getClassInterface()); > - StartObjCMethod(OMD); > + StartObjCMethod(OMD, IMP->getClassInterface()); > > bool IsCopy = PD->getSetterKind() == ObjCPropertyDecl::Copy; > bool IsAtomic = > > Modified: cfe/trunk/lib/CodeGen/CGObjCGNU.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCGNU.cpp?rev=62030&r1=62029&r2=62030&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- cfe/trunk/lib/CodeGen/CGObjCGNU.cpp (original) > +++ cfe/trunk/lib/CodeGen/CGObjCGNU.cpp Sat Jan 10 15:06:09 2009 > @@ -113,7 +113,8 @@ > const ObjCInterfaceDecl *OID); > virtual llvm::Value *GetSelector(CGBuilderTy &Builder, Selector > Sel); > > - virtual llvm::Function *GenerateMethod(const ObjCMethodDecl *OMD); > + virtual llvm::Function *GenerateMethod(const ObjCMethodDecl *OMD, > + const ObjCContainerDecl > *CD); > virtual void GenerateCategory(const ObjCCategoryImplDecl *CMD); > virtual void GenerateClass(const ObjCImplementationDecl *ClassDecl); > virtual llvm::Value *GenerateProtocolRef(CGBuilderTy &Builder, > @@ -932,7 +933,8 @@ > return LoadFunction; > } > > -llvm::Function *CGObjCGNU::GenerateMethod(const ObjCMethodDecl > *OMD) { > +llvm::Function *CGObjCGNU::GenerateMethod(const ObjCMethodDecl *OMD, > + const ObjCContainerDecl > *CD) { > const ObjCCategoryImplDecl *OCD = > dyn_cast<ObjCCategoryImplDecl>(OMD->getDeclContext()); > std::string CategoryName = OCD ? OCD->getNameAsString() : ""; > > Modified: cfe/trunk/lib/CodeGen/CGObjCMac.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCMac.cpp?rev=62030&r1=62029&r2=62030&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- cfe/trunk/lib/CodeGen/CGObjCMac.cpp (original) > +++ cfe/trunk/lib/CodeGen/CGObjCMac.cpp Sat Jan 10 15:06:09 2009 > @@ -408,6 +408,7 @@ > /// GetNameForMethod - Return a name for the given method. > /// \param[out] NameOut - The return value. > void GetNameForMethod(const ObjCMethodDecl *OMD, > + const ObjCContainerDecl *CD, > std::string &NameOut); > > public: > @@ -435,7 +436,8 @@ > > virtual llvm::Value *GetSelector(CGBuilderTy &Builder, Selector > Sel); > > - virtual llvm::Function *GenerateMethod(const ObjCMethodDecl *OMD); > + virtual llvm::Function *GenerateMethod(const ObjCMethodDecl *OMD, > + const ObjCContainerDecl > *CD=0); > > virtual void GenerateCategory(const ObjCCategoryImplDecl *CMD); > > @@ -1434,9 +1436,10 @@ > ObjCTypes.MethodListPtrTy); > } > > -llvm::Function *CGObjCMac::GenerateMethod(const ObjCMethodDecl > *OMD) { > +llvm::Function *CGObjCMac::GenerateMethod(const ObjCMethodDecl *OMD, > + const ObjCContainerDecl > *CD) { > std::string Name; > - GetNameForMethod(OMD, Name); > + GetNameForMethod(OMD, CD, Name); > > const llvm::FunctionType *MethodTy = > CGM.getTypes().GetFunctionType(CGFunctionInfo(OMD, > CGM.getContext())); > @@ -2141,11 +2144,13 @@ > } > > void CGObjCMac::GetNameForMethod(const ObjCMethodDecl *D, > + const ObjCContainerDecl *CD, > std::string &NameOut) { > // FIXME: Find the mangling GCC uses. > NameOut = (D->isInstanceMethod() ? "-" : "+"); > NameOut += '['; > - NameOut += D->getClassInterface()->getNameAsString(); > + assert (CD && "Missing container decl in GetNameForMethod"); > + NameOut += CD->getNameAsString(); > NameOut += ' '; > NameOut += D->getSelector().getAsString(); > NameOut += ']'; > > Modified: cfe/trunk/lib/CodeGen/CGObjCRuntime.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCRuntime.h?rev=62030&r1=62029&r2=62030&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- cfe/trunk/lib/CodeGen/CGObjCRuntime.h (original) > +++ cfe/trunk/lib/CodeGen/CGObjCRuntime.h Sat Jan 10 15:06:09 2009 > @@ -39,6 +39,7 @@ > class ObjCAtTryStmt; > class ObjCAtThrowStmt; > class ObjCAtSynchronizedStmt; > + class ObjCContainerDecl; > class ObjCCategoryImplDecl; > class ObjCImplementationDecl; > class ObjCInterfaceDecl; > @@ -116,7 +117,8 @@ > // really this should also be generating the loads of the > // parameters, as the runtime should have full control over how > // parameters are passed. > - virtual llvm::Function *GenerateMethod(const ObjCMethodDecl *OMD) > = 0; > + virtual llvm::Function *GenerateMethod(const ObjCMethodDecl *OMD, > + const ObjCContainerDecl > *CD) = 0; > > /// Return the runtime function for getting properties. > virtual llvm::Function *GetPropertyGetFunction() = 0; > > Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.h?rev=62030&r1=62029&r2=62030&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- cfe/trunk/lib/CodeGen/CodeGenFunction.h (original) > +++ cfe/trunk/lib/CodeGen/CodeGenFunction.h Sat Jan 10 15:06:09 2009 > @@ -42,6 +42,7 @@ > class FunctionDecl; > class FunctionTypeProto; > class LabelStmt; > + class ObjCContainerDecl; > class ObjCInterfaceDecl; > class ObjCIvarDecl; > class ObjCMethodDecl; > @@ -184,7 +185,8 @@ > > void GenerateObjCMethod(const ObjCMethodDecl *OMD); > > - void StartObjCMethod(const ObjCMethodDecl *MD); > + void StartObjCMethod(const ObjCMethodDecl *MD, > + const ObjCContainerDecl *CD); > > /// GenerateObjCGetter - Synthesize an Objective-C property getter > /// function. > > > _______________________________________________ > 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
