]> granicus.if.org Git - clang/commitdiff
NeXT: Update to use CreateRuntimeFunction for the routines it imports.
authorDaniel Dunbar <daniel@zuster.org>
Wed, 1 Oct 2008 01:06:06 +0000 (01:06 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Wed, 1 Oct 2008 01:06:06 +0000 (01:06 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56902 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGObjCMac.cpp
test/CodeGenObjC/runtime-fns.m [new file with mode: 0644]

index 42fad09ceeca80f285f8d2565e8ef390c9739e5d..c9e5e68b5c6b3fdefda4a743e12c71d69bf57977 100644 (file)
@@ -2208,47 +2208,40 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen::CodeGenModule &cgm)
   std::vector<const llvm::Type*> Params;
   Params.push_back(ObjectPtrTy);
   Params.push_back(SelectorPtrTy);
-  MessageSendFn = llvm::Function::Create(llvm::FunctionType::get(ObjectPtrTy,
-                                                                 Params,
-                                                                 true),
-                                         llvm::Function::ExternalLinkage,
-                                         "objc_msgSend",
-                                         &CGM.getModule());
+  MessageSendFn = 
+    CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy,
+                                                      Params,
+                                                      true),
+                              "objc_msgSend");
   
   Params.clear();
   Params.push_back(Int8PtrTy);
   Params.push_back(ObjectPtrTy);
   Params.push_back(SelectorPtrTy);
   MessageSendStretFn = 
-    llvm::Function::Create(llvm::FunctionType::get(llvm::Type::VoidTy,
-                                                   Params,
-                                                   true),
-                             llvm::Function::ExternalLinkage,
-                             "objc_msgSend_stret",
-                             &CGM.getModule());
+    CGM.CreateRuntimeFunction(llvm::FunctionType::get(llvm::Type::VoidTy,
+                                                      Params,
+                                                      true),
+                              "objc_msgSend_stret");
   
   Params.clear();
   Params.push_back(SuperPtrTy);
   Params.push_back(SelectorPtrTy);
   MessageSendSuperFn = 
-    llvm::Function::Create(llvm::FunctionType::get(ObjectPtrTy,
-                                                   Params,
-                                                   true),
-                           llvm::Function::ExternalLinkage,
-                           "objc_msgSendSuper",
-                           &CGM.getModule());
+    CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy,
+                                                      Params,
+                                                      true),
+                              "objc_msgSendSuper");
 
   Params.clear();
   Params.push_back(Int8PtrTy);
   Params.push_back(SuperPtrTy);
   Params.push_back(SelectorPtrTy);
   MessageSendSuperStretFn = 
-    llvm::Function::Create(llvm::FunctionType::get(llvm::Type::VoidTy,
-                                                   Params,
-                                                   true),
-                           llvm::Function::ExternalLinkage,
-                           "objc_msgSendSuper_stret",
-                           &CGM.getModule());
+    CGM.CreateRuntimeFunction(llvm::FunctionType::get(llvm::Type::VoidTy,
+                                                      Params,
+                                                      true),
+                              "objc_msgSendSuper_stret");
   
   // Property manipulation functions.
 
@@ -2258,13 +2251,11 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen::CodeGenModule &cgm)
   Params.push_back(LongTy);
   Params.push_back(Types.ConvertTypeForMem(Ctx.BoolTy));
   GetPropertyFn =
-    llvm::Function::Create(llvm::FunctionType::get(ObjectPtrTy,
-                                                   Params,
-                                                   false),
-                           llvm::Function::ExternalLinkage,
-                           "objc_getProperty",
-                           &CGM.getModule());
-
+    CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy,
+                                                      Params,
+                                                      false),
+                              "objc_getProperty");
+  
   Params.clear();
   Params.push_back(ObjectPtrTy);
   Params.push_back(SelectorPtrTy);
@@ -2273,24 +2264,20 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen::CodeGenModule &cgm)
   Params.push_back(Types.ConvertTypeForMem(Ctx.BoolTy));
   Params.push_back(Types.ConvertTypeForMem(Ctx.BoolTy));
   SetPropertyFn =
-    llvm::Function::Create(llvm::FunctionType::get(llvm::Type::VoidTy,
-                                                   Params,
-                                                   false),
-                           llvm::Function::ExternalLinkage,
-                           "objc_setProperty",
-                           &CGM.getModule());
+    CGM.CreateRuntimeFunction(llvm::FunctionType::get(llvm::Type::VoidTy,
+                                                      Params,
+                                                      false),
+                              "objc_setProperty");
 
   // Enumeration mutation.
 
   Params.clear();
   Params.push_back(ObjectPtrTy);
   EnumerationMutationFn = 
-    llvm::Function::Create(llvm::FunctionType::get(llvm::Type::VoidTy,
-                                                   Params,
-                                                   false),
-                           llvm::Function::ExternalLinkage,
-                           "objc_enumerationMutation",
-                           &CGM.getModule());
+    CGM.CreateRuntimeFunction(llvm::FunctionType::get(llvm::Type::VoidTy,
+                                                      Params,
+                                                      false),
+                              "objc_enumerationMutation");
   
   // FIXME: This is the size of the setjmp buffer and should be 
   // target specific. 18 is what's used on 32-bit X86.
@@ -2310,58 +2297,45 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen::CodeGenModule &cgm)
   Params.clear();
   Params.push_back(ObjectPtrTy);
   ExceptionThrowFn =
-   llvm::Function::Create(llvm::FunctionType::get(llvm::Type::VoidTy,
-                                                   Params,
-                                                   false),
-                           llvm::Function::ExternalLinkage,
-                           "objc_exception_throw",
-                           &CGM.getModule());
+    CGM.CreateRuntimeFunction(llvm::FunctionType::get(llvm::Type::VoidTy,
+                                                      Params,
+                                                      false),
+                              "objc_exception_throw");
   
   Params.clear();
   Params.push_back(llvm::PointerType::getUnqual(ExceptionDataTy));
   ExceptionTryEnterFn = 
-   llvm::Function::Create(llvm::FunctionType::get(llvm::Type::VoidTy,
-                                                   Params,
-                                                   false),
-                           llvm::Function::ExternalLinkage,
-                           "objc_exception_try_enter",
-                           &CGM.getModule());
+    CGM.CreateRuntimeFunction(llvm::FunctionType::get(llvm::Type::VoidTy,
+                                                      Params,
+                                                      false),
+                              "objc_exception_try_enter");
   ExceptionTryExitFn = 
-    llvm::Function::Create(llvm::FunctionType::get(llvm::Type::VoidTy,
-                                                   Params,
-                                                   false),
-                           llvm::Function::ExternalLinkage,
-                           "objc_exception_try_exit",
-                           &CGM.getModule());
+    CGM.CreateRuntimeFunction(llvm::FunctionType::get(llvm::Type::VoidTy,
+                                                      Params,
+                                                      false),
+                              "objc_exception_try_exit");
   ExceptionExtractFn =
-    llvm::Function::Create(llvm::FunctionType::get(ObjectPtrTy,
-                                                   Params,
-                                                   false),
-                           llvm::Function::ExternalLinkage,
-                           "objc_exception_extract",
-                           &CGM.getModule());
+    CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy,
+                                                      Params,
+                                                      false),
+                              "objc_exception_extract");
   
   Params.clear();
   Params.push_back(ClassPtrTy);
   Params.push_back(ObjectPtrTy);
   ExceptionMatchFn = 
-    llvm::Function::Create(llvm::FunctionType::get(llvm::Type::Int32Ty,
-                                                   Params,
-                                                   false),
-                           llvm::Function::ExternalLinkage,
-                           "objc_exception_match",
-                           &CGM.getModule());
+    CGM.CreateRuntimeFunction(llvm::FunctionType::get(llvm::Type::Int32Ty,
+                                                      Params,
+                                                      false),
+                              "objc_exception_match");
 
   Params.clear();
   Params.push_back(llvm::PointerType::getUnqual(llvm::Type::Int32Ty));
   SetJmpFn =
-    llvm::Function::Create(llvm::FunctionType::get(llvm::Type::Int32Ty,
-                                                   Params,
-                                                   false),
-                           llvm::Function::ExternalLinkage,
-                           "_setjmp",
-                           &CGM.getModule());                          
-
+    CGM.CreateRuntimeFunction(llvm::FunctionType::get(llvm::Type::Int32Ty,
+                                                      Params,
+                                                      false),
+                              "_setjmp");
 }
 
 ObjCTypesHelper::~ObjCTypesHelper() {
diff --git a/test/CodeGenObjC/runtime-fns.m b/test/CodeGenObjC/runtime-fns.m
new file mode 100644 (file)
index 0000000..f132b54
--- /dev/null
@@ -0,0 +1,28 @@
+// RUN: clang -fnext-runtime -emit-llvm -o %t %s &&
+// RUN: grep -e "^de.*objc_msgSend[0-9]*(" %t | count 1 &&
+// RUN: clang -DWITHDEF -fnext-runtime -emit-llvm -o %t %s &&
+// RUN: grep -e "^de.*objc_msgSend[0-9]*(" %t | count 1
+
+id objc_msgSend(int x);
+
+@interface A @end
+
+@implementation A
+-(void) f0 {
+  objc_msgSend(12);
+}
+
+-(void) hello {
+}
+@end
+
+void f0(id x) {
+  [x hello];
+}
+
+#ifdef WITHDEF
+// This isn't a very good send function.
+id objc_msgSend(int x) {
+  return 0;
+}
+#endif