aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGObjCMac.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-02-04 00:44:42 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-02-04 00:44:42 +0000
commit34c94a2babcac200c8e0fd778e549afcc43e2df1 (patch)
treed502bfbdcdb6bc2a02e4710d3a82a571cff996ef /lib/CodeGen/CGObjCMac.cpp
parent23b5dc65451b1f91c0ecf337216c8ff473308cc2 (diff)
Change construction of common ObjC functions to use CGCall
infrastructure to construct function type. - For consistencty, we should probably always use this to construct function types, but these are absolutely necessary to ensure that we can emit calls to these functions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63695 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGObjCMac.cpp')
-rw-r--r--lib/CodeGen/CGObjCMac.cpp98
1 files changed, 41 insertions, 57 deletions
diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp
index 37c40eb959..211e54d704 100644
--- a/lib/CodeGen/CGObjCMac.cpp
+++ b/lib/CodeGen/CGObjCMac.cpp
@@ -2622,75 +2622,59 @@ ObjCCommonTypesHelper::ObjCCommonTypesHelper(CodeGen::CodeGenModule &cgm)
CachePtrTy = llvm::PointerType::getUnqual(CacheTy);
// Property manipulation functions.
+
+ QualType IdType = Ctx.getObjCIdType();
+ QualType SelType = Ctx.getObjCSelType();
+ llvm::SmallVector<QualType,16> Params;
+ const llvm::FunctionType *FTy;
// id objc_getProperty (id, SEL, ptrdiff_t, bool)
- std::vector<const llvm::Type*> Params;
- Params.push_back(ObjectPtrTy);
- Params.push_back(SelectorPtrTy);
- Params.push_back(LongTy);
- Params.push_back(Types.ConvertTypeForMem(Ctx.BoolTy));
- GetPropertyFn =
- CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy,
- Params,
- false),
- "objc_getProperty");
+ Params.push_back(IdType);
+ Params.push_back(SelType);
+ Params.push_back(Ctx.LongTy);
+ Params.push_back(Ctx.BoolTy);
+ FTy = Types.GetFunctionType(Types.getFunctionInfo(IdType, Params),
+ false);
+ GetPropertyFn = CGM.CreateRuntimeFunction(FTy, "objc_getProperty");
// void objc_setProperty (id, SEL, ptrdiff_t, id, bool, bool)
Params.clear();
- Params.push_back(ObjectPtrTy);
- Params.push_back(SelectorPtrTy);
- Params.push_back(LongTy);
- Params.push_back(ObjectPtrTy);
- Params.push_back(Types.ConvertTypeForMem(Ctx.BoolTy));
- Params.push_back(Types.ConvertTypeForMem(Ctx.BoolTy));
- SetPropertyFn =
- CGM.CreateRuntimeFunction(llvm::FunctionType::get(llvm::Type::VoidTy,
- Params,
- false),
- "objc_setProperty");
+ Params.push_back(IdType);
+ Params.push_back(SelType);
+ Params.push_back(Ctx.LongTy);
+ Params.push_back(IdType);
+ Params.push_back(Ctx.BoolTy);
+ Params.push_back(Ctx.BoolTy);
+ FTy = Types.GetFunctionType(Types.getFunctionInfo(Ctx.VoidTy, Params), false);
+ SetPropertyFn = CGM.CreateRuntimeFunction(FTy, "objc_setProperty");
+
// Enumeration mutation.
-
+
+ // void objc_enumerationMutation (id)
Params.clear();
- Params.push_back(ObjectPtrTy);
- EnumerationMutationFn =
- CGM.CreateRuntimeFunction(llvm::FunctionType::get(llvm::Type::VoidTy,
- Params,
- false),
- "objc_enumerationMutation");
+ Params.push_back(IdType);
+ FTy = Types.GetFunctionType(Types.getFunctionInfo(Ctx.VoidTy, Params), false);
+ EnumerationMutationFn = CGM.CreateRuntimeFunction(FTy,
+ "objc_enumerationMutation");
// gc's API
// id objc_read_weak (id *)
Params.clear();
- Params.push_back(PtrObjectPtrTy);
- GcReadWeakFn =
- CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy,
- Params,
- false),
- "objc_read_weak");
- // id objc_assign_weak (id, id *)
+ Params.push_back(Ctx.getPointerType(IdType));
+ FTy = Types.GetFunctionType(Types.getFunctionInfo(IdType, Params), false);
+ GcReadWeakFn = CGM.CreateRuntimeFunction(FTy, "objc_read_weak");
+
+ // id objc_assign_weak (id, id *)
Params.clear();
- Params.push_back(ObjectPtrTy);
- Params.push_back(PtrObjectPtrTy);
- GcAssignWeakFn =
- CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy,
- Params,
- false),
- "objc_assign_weak");
- GcAssignGlobalFn =
- CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy,
- Params,
- false),
- "objc_assign_global");
- GcAssignIvarFn =
- CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy,
- Params,
- false),
- "objc_assign_ivar");
- GcAssignStrongCastFn =
- CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy,
- Params,
- false),
- "objc_assign_strongCast");
+ Params.push_back(IdType);
+ Params.push_back(Ctx.getPointerType(IdType));
+
+ FTy = Types.GetFunctionType(Types.getFunctionInfo(IdType, Params), false);
+ GcAssignWeakFn = CGM.CreateRuntimeFunction(FTy, "objc_assign_weak");
+ GcAssignGlobalFn = CGM.CreateRuntimeFunction(FTy, "objc_assign_global");
+ GcAssignIvarFn = CGM.CreateRuntimeFunction(FTy, "objc_assign_ivar");
+ GcAssignStrongCastFn =
+ CGM.CreateRuntimeFunction(FTy, "objc_assign_strongCast");
}
ObjCTypesHelper::ObjCTypesHelper(CodeGen::CodeGenModule &cgm)