diff --git a/clang/lib/CodeGen/CGObjCEtoile.cpp b/clang/lib/CodeGen/CGObjCEtoile.cpp index 94471ad4df90..8c59aadb8658 100644 --- a/clang/lib/CodeGen/CGObjCEtoile.cpp +++ b/clang/lib/CodeGen/CGObjCEtoile.cpp @@ -243,11 +243,3 @@ llvm::Function *CGObjCEtoile::MethodPreamble( return Method; } -/* -clang::CodeGen::CGObjCRuntime *clang::CodeGen::CreateObjCRuntime( - llvm::Module &M, - const llvm::Type *LLVMIntType, - const llvm::Type *LLVMLongType) { - return new CGObjCEtoile(M, LLVMIntType, LLVMLongType); -} -*/ diff --git a/clang/lib/CodeGen/CGObjCGNU.cpp b/clang/lib/CodeGen/CGObjCGNU.cpp index 8eb42636f33c..7d9a6aa21eab 100644 --- a/clang/lib/CodeGen/CGObjCGNU.cpp +++ b/clang/lib/CodeGen/CGObjCGNU.cpp @@ -15,12 +15,15 @@ //===----------------------------------------------------------------------===// #include "CGObjCRuntime.h" +#include "CodeGenModule.h" +#include "clang/AST/ASTContext.h" #include "llvm/Module.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/IRBuilder.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringMap.h" #include +using namespace clang; // FIXME: Remove THIS! #include "llvm/Analysis/ValueTracking.h" @@ -39,8 +42,9 @@ static const int RuntimeVersion = 8; static const int ProtocolVersion = 2; namespace { -class CGObjCGNU : public clang::CodeGen::CGObjCRuntime { +class CGObjCGNU : public CodeGen::CGObjCRuntime { private: + CodeGen::CodeGenModule &CGM; llvm::Module &TheModule; const llvm::StructType *SelStructTy; const llvm::Type *SelectorTy; @@ -94,9 +98,7 @@ private: llvm::Constant *MakeGlobal(const llvm::ArrayType *Ty, std::vector &V, const std::string &Name=""); public: - CGObjCGNU(llvm::Module &Mp, - const llvm::Type *LLVMIntType, - const llvm::Type *LLVMLongType); + CGObjCGNU(CodeGen::CodeGenModule &cgm); virtual llvm::Constant *GenerateConstantString(const char *String, const size_t length); virtual llvm::Value *GenerateMessageSend(llvm::IRBuilder &Builder, @@ -172,13 +174,11 @@ static std::string SymbolNameForMethod(const std::string &ClassName, const (isClassMethod ? "+" : "-") + MethodName; } -CGObjCGNU::CGObjCGNU(llvm::Module &M, - const llvm::Type *LLVMIntType, - const llvm::Type *LLVMLongType) : - TheModule(M), - IntTy(LLVMIntType), - LongTy(LLVMLongType) -{ +CGObjCGNU::CGObjCGNU(CodeGen::CodeGenModule &cgm) + : CGM(cgm), TheModule(CGM.getModule()) { + IntTy = CGM.getTypes().ConvertType(CGM.getContext().IntTy); + LongTy = CGM.getTypes().ConvertType(CGM.getContext().LongTy); + Zeros[0] = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0); Zeros[1] = Zeros[0]; NULLPtr = llvm::ConstantPointerNull::get( @@ -928,9 +928,6 @@ llvm::Function *CGObjCGNU::MethodPreamble( return Method; } -clang::CodeGen::CGObjCRuntime *clang::CodeGen::CreateObjCRuntime( - llvm::Module &M, - const llvm::Type *LLVMIntType, - const llvm::Type *LLVMLongType) { - return new CGObjCGNU(M, LLVMIntType, LLVMLongType); +CodeGen::CGObjCRuntime *CodeGen::CreateObjCRuntime(CodeGen::CodeGenModule &CGM){ + return new CGObjCGNU(CGM); } diff --git a/clang/lib/CodeGen/CGObjCRuntime.h b/clang/lib/CodeGen/CGObjCRuntime.h index 94217ddc1d2f..53753695fc7b 100644 --- a/clang/lib/CodeGen/CGObjCRuntime.h +++ b/clang/lib/CodeGen/CGObjCRuntime.h @@ -29,6 +29,7 @@ namespace llvm { namespace clang { namespace CodeGen { + class CodeGenModule; //FIXME Several methods should be pure virtual but aren't to avoid the //partially-implemented subclass breaking. @@ -119,9 +120,7 @@ public: /// Creates an instance of an Objective-C runtime class. //TODO: This should include some way of selecting which runtime to target. -CGObjCRuntime *CreateObjCRuntime(llvm::Module &M, - const llvm::Type *LLVMIntType, - const llvm::Type *LLVMLongType); +CGObjCRuntime *CreateObjCRuntime(CodeGenModule &CGM); } } #endif diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 1d0001c607af..e235b60f7d4f 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -39,9 +39,7 @@ CodeGenModule::CodeGenModule(ASTContext &C, const LangOptions &LO, Types(C, M, TD), MemCpyFn(0), MemMoveFn(0), MemSetFn(0), CFConstantStringClassRef(0) { //TODO: Make this selectable at runtime - Runtime = CreateObjCRuntime(M, - getTypes().ConvertType(getContext().IntTy), - getTypes().ConvertType(getContext().LongTy)); + Runtime = CreateObjCRuntime(*this); // If debug info generation is enabled, create the CGDebugInfo object. if (GenerateDebugInfo)