Fix <rdar://problem/6370288> clang ObjC rewriter: Too many _objc_symtab, _OBJC_SYMBOLS
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59301 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Driver/RewriteObjC.cpp b/Driver/RewriteObjC.cpp
index 1497120..d477446 100644
--- a/Driver/RewriteObjC.cpp
+++ b/Driver/RewriteObjC.cpp
@@ -3076,8 +3076,6 @@
int ClsDefCount = ClassImplementation.size();
int CatDefCount = CategoryImplementation.size();
- if (ClsDefCount == 0 && CatDefCount == 0)
- return;
// Rewrite implemented methods
for (int i = 0; i < ClsDefCount; i++)
RewriteImplementationDecl(ClassImplementation[i]);
@@ -4131,7 +4129,8 @@
InsertText(SourceLocation::getFileLoc(MainFileID, 0),
Preamble.c_str(), Preamble.size(), false);
- RewriteImplementations();
+ if (ClassImplementation.size() || CategoryImplementation.size())
+ RewriteImplementations();
// Get the buffer corresponding to MainFileID. If we haven't changed it, then
// we are done.
@@ -4143,12 +4142,13 @@
fprintf(stderr, "No changes\n");
}
- // Rewrite Objective-c meta data*
- std::string ResultStr;
- SynthesizeMetaDataIntoBuffer(ResultStr);
-
- // Emit metadata.
- *OutFile << ResultStr;
+ if (ClassImplementation.size() || CategoryImplementation.size()) {
+ // Rewrite Objective-c meta data*
+ std::string ResultStr;
+ SynthesizeMetaDataIntoBuffer(ResultStr);
+ // Emit metadata.
+ *OutFile << ResultStr;
+ }
OutFile->flush();
}