[cfe-dev] Objective-C top-level constructs code generation
David Chisnall
csdavec at swansea.ac.uk
Mon Aug 11 15:48:50 PDT 2008
Hi Mike,
On 11 Aug 2008, at 23:41, Mike Stump wrote:
> On May 24, 2008, at 10:56 AM, David Chisnall wrote:
>> I've started splitting the Objective-C code generation stuff up
>> into smaller diffs.
Sadly, I haven't had a chance to do much with this lately. I still
have a huge pile of clang diffs sitting on my machine waiting to be
submitted, and I've made a number of bug fixes in the copy of
CGObjCGNU that we're using in the back end of a Smalltalk compiler,
but the copy I'm using there pre-dates Chris introducing clang
dependencies into this file and I haven't had time to back-port the
fixes to clang.
> So, this generates:
>
> CodeGenModule.cpp: In member function ‘void
> clang::CodeGen::CodeGenModule::EmitObjCClassImplementation(const
> clang::ObjCImplementationDecl*)’:
> CodeGenModule.cpp:334: warning: ‘ObjTy’ may be used uninitialized
> in this function
>
> the code looks like:
>
> const llvm::Type *ObjTy;
> if (!Runtime->LateBoundIVars()) {
> ObjTy = getTypes().ConvertType(Context.getObjCInterfaceType
> (ClassDecl));
> instanceSize = TheTargetData.getABITypeSize(ObjTy);
> }
>
> // Collect information about instance variables.
> llvm::SmallVector<llvm::Constant*, 16> IvarNames;
> llvm::SmallVector<llvm::Constant*, 16> IvarTypes;
> llvm::SmallVector<llvm::Constant*, 16> IvarOffsets;
> const llvm::StructLayout *Layout =
> TheTargetData.getStructLayout(cast<llvm::StructType>(ObjTy));
>
> So, would initializing this to 0 be appropriate?
This would make the warning go away. It would also be worth adding
an 'assert(0 && "Late-bound instance variables not yet supported);'
in an else block here, since there is not yet any code for this,
which is required by newer ObjC runtimes.
David
More information about the cfe-dev
mailing list