From fca65102a2ef14ebf2f34389c9e72781937b0a6e Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Sat, 10 Mar 2012 18:25:06 +0000 Subject: [PATCH] objective-c modern rewriter: add __declspec(dllexport) to forward declaration of class metadata when they are defined later. llvm-svn: 152500 --- clang/lib/Rewrite/RewriteModernObjC.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/clang/lib/Rewrite/RewriteModernObjC.cpp b/clang/lib/Rewrite/RewriteModernObjC.cpp index 87d49fd08f06..269249d65ed5 100644 --- a/clang/lib/Rewrite/RewriteModernObjC.cpp +++ b/clang/lib/Rewrite/RewriteModernObjC.cpp @@ -5682,13 +5682,20 @@ static void Write_class_t(ASTContext *Context, std::string &Result, if (metadata && !CDecl->getSuperClass()) { // Need to handle a case of use of forward declaration. - Result += "\nextern struct _class_t OBJC_CLASS_$_"; + Result += "\n"; + if (CDecl->getImplementation()) + Result += "__declspec(dllexport) "; + Result += "extern struct _class_t OBJC_CLASS_$_"; Result += CDecl->getNameAsString(); Result += ";\n"; } // Also, for possibility of 'super' metadata class not having been defined yet. if (CDecl->getSuperClass()) { - Result += "\nextern struct _class_t "; Result += VarName; + Result += "\n"; + if (CDecl->getSuperClass()->getImplementation()) + Result += "__declspec(dllexport) "; + Result += "extern struct _class_t "; + Result += VarName; Result += CDecl->getSuperClass()->getNameAsString(); Result += ";\n"; }