From 69c827f9484f7b30ceec30875c13dad524709064 Mon Sep 17 00:00:00 2001 From: Steve Naroff Date: Tue, 6 May 2008 22:45:19 +0000 Subject: [PATCH] Fix clang ObjC rewriter: Use objc.h for declarations instead of putting them in the preamble? git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50774 91177308-0d34-0410-b5e6-96231b3b80d8 --- Driver/RewriteObjC.cpp | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/Driver/RewriteObjC.cpp b/Driver/RewriteObjC.cpp index 66f98a41c5..e50ba66761 100644 --- a/Driver/RewriteObjC.cpp +++ b/Driver/RewriteObjC.cpp @@ -306,30 +306,32 @@ void RewriteObjC::Initialize(ASTContext &context) { Preamble += "#define _REWRITER_typedef_Protocol\n"; Preamble += "#endif\n"; if (LangOpts.Microsoft) - Preamble += "extern \"C\" {\n"; - Preamble += "struct objc_object *objc_msgSend"; + Preamble += "#define __OBJC_RW_EXTERN extern \"C\" __declspec(dllimport)\n"; + else + Preamble += "#define __OBJC_RW_EXTERN extern\n"; + Preamble += "__OBJC_RW_EXTERN struct objc_object *objc_msgSend"; Preamble += "(struct objc_object *, struct objc_selector *, ...);\n"; - Preamble += "extern struct objc_object *objc_msgSendSuper"; + Preamble += "__OBJC_RW_EXTERN struct objc_object *objc_msgSendSuper"; Preamble += "(struct objc_super *, struct objc_selector *, ...);\n"; - Preamble += "extern struct objc_object *objc_msgSend_stret"; + Preamble += "__OBJC_RW_EXTERN struct objc_object *objc_msgSend_stret"; Preamble += "(struct objc_object *, struct objc_selector *, ...);\n"; - Preamble += "extern struct objc_object *objc_msgSendSuper_stret"; + Preamble += "__OBJC_RW_EXTERN struct objc_object *objc_msgSendSuper_stret"; Preamble += "(struct objc_super *, struct objc_selector *, ...);\n"; - Preamble += "extern struct objc_object *objc_msgSend_fpret"; + Preamble += "__OBJC_RW_EXTERN struct objc_object *objc_msgSend_fpret"; Preamble += "(struct objc_object *, struct objc_selector *, ...);\n"; - Preamble += "struct objc_object *objc_getClass"; + Preamble += "__OBJC_RW_EXTERN objc_object *objc_getClass"; Preamble += "(const char *);\n"; - Preamble += "extern struct objc_object *objc_getMetaClass"; + Preamble += "__OBJC_RW_EXTERN struct objc_object *objc_getMetaClass"; Preamble += "(const char *);\n"; - Preamble += "extern void objc_exception_throw(struct objc_object *);\n"; - Preamble += "extern void objc_exception_try_enter(void *);\n"; - Preamble += "extern void objc_exception_try_exit(void *);\n"; - Preamble += "extern struct objc_object *objc_exception_extract(void *);\n"; - Preamble += "extern int objc_exception_match"; + Preamble += "__OBJC_RW_EXTERN void objc_exception_throw(struct objc_object *);\n"; + Preamble += "__OBJC_RW_EXTERN void objc_exception_try_enter(void *);\n"; + Preamble += "__OBJC_RW_EXTERN void objc_exception_try_exit(void *);\n"; + Preamble += "__OBJC_RW_EXTERN struct objc_object *objc_exception_extract(void *);\n"; + Preamble += "__OBJC_RW_EXTERN int objc_exception_match"; Preamble += "(struct objc_class *, struct objc_object *, ...);\n"; - Preamble += "extern Protocol *objc_getProtocol(const char *);\n"; + Preamble += "__OBJC_RW_EXTERN Protocol *objc_getProtocol(const char *);\n"; if (LangOpts.Microsoft) - Preamble += "} // end extern \"C\"\n"; + Preamble += "#undef __OBJC_RW_EXTERN\n"; Preamble += "#ifndef __FASTENUMERATIONSTATE\n"; Preamble += "struct __objcFastEnumerationState {\n\t"; Preamble += "unsigned long state;\n\t"; -- 2.40.0