aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGObjCGNU.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/CodeGen/CGObjCGNU.cpp')
-rw-r--r--lib/CodeGen/CGObjCGNU.cpp18
1 files changed, 11 insertions, 7 deletions
diff --git a/lib/CodeGen/CGObjCGNU.cpp b/lib/CodeGen/CGObjCGNU.cpp
index 2621a84914..9c83b75b2a 100644
--- a/lib/CodeGen/CGObjCGNU.cpp
+++ b/lib/CodeGen/CGObjCGNU.cpp
@@ -40,8 +40,8 @@ class CGObjCGNU : public CodeGen::CGObjCRuntime {
private:
CodeGen::CodeGenModule &CGM;
llvm::Module &TheModule;
- const llvm::StructType *SelStructTy;
- const llvm::Type *SelectorTy;
+ const llvm::PointerType *SelectorTy;
+ const llvm::Type *ExpectedSelTy;
const llvm::Type *PtrToInt8Ty;
const llvm::Type *IMPTy;
const llvm::Type *IdTy;
@@ -168,11 +168,12 @@ CGObjCGNU::CGObjCGNU(CodeGen::CodeGenModule &cgm)
PtrToInt8Ty =
llvm::PointerType::getUnqual(llvm::Type::Int8Ty);
// Get the selector Type.
- SelStructTy = llvm::StructType::get(
- PtrToInt8Ty,
- PtrToInt8Ty,
- NULL);
- SelectorTy = llvm::PointerType::getUnqual(SelStructTy);
+ SelectorTy = cast<llvm::PointerType>(
+ CGM.getTypes().ConvertType(CGM.getContext().getObjCSelType()));
+
+ ExpectedSelTy =
+ CGM.getTypes().ConvertType(CGM.getContext().getObjCSelType());
+
PtrToIntTy = llvm::PointerType::getUnqual(IntTy);
PtrTy = PtrToInt8Ty;
@@ -797,6 +798,9 @@ llvm::Function *CGObjCGNU::ModuleInitFunction() {
UntypedSelectors.empty())
return NULL;
+ const llvm::StructType *SelStructTy =
+ cast<llvm::StructType>(SelectorTy->getTypeAtIndex(0U));
+
// Name the ObjC types to make the IR a bit easier to read
TheModule.addTypeName(".objc_selector", SelectorTy);
TheModule.addTypeName(".objc_id", IdTy);