aboutsummaryrefslogtreecommitdiff
path: root/Driver/RewriteTest.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2007-11-13 22:09:49 +0000
committerFariborz Jahanian <fjahanian@apple.com>2007-11-13 22:09:49 +0000
commitbac97d43c9552ac0e084bb81fb7404908f1e9970 (patch)
tree8bcdf5fbc0bf52dc6a80a0b1a1efab6c328495cd /Driver/RewriteTest.cpp
parent03ed44061df258e74a40383bda849e14b892a8c6 (diff)
Fixed a rewrite of metadata bug when category implementation has no matching interface.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44072 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'Driver/RewriteTest.cpp')
-rw-r--r--Driver/RewriteTest.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/Driver/RewriteTest.cpp b/Driver/RewriteTest.cpp
index a270970c1b..ff9bf2f924 100644
--- a/Driver/RewriteTest.cpp
+++ b/Driver/RewriteTest.cpp
@@ -1221,7 +1221,6 @@ void RewriteTest::RewriteObjcMethodsMetaData(ObjcMethodDecl *const*Methods,
Result += MethodInternalNames[Methods[0]];
Result += "}\n";
for (int i = 1; i < NumMethods; i++) {
- // TODO: Need method address as 3rd initializer.
Result += "\t ,{(SEL)\"";
Result += Methods[i]->getSelector().getName().c_str();
std::string MethodTypeString;
@@ -1415,8 +1414,7 @@ void RewriteTest::RewriteObjcCategoryImplDecl(ObjcCategoryImplDecl *IDecl,
CDecl = CDecl->getNextClassCategory())
if (CDecl->getIdentifier() == IDecl->getIdentifier())
break;
- assert(CDecl && "RewriteObjcCategoryImplDecl - bad category");
-
+
char *FullCategoryName = (char*)alloca(
strlen(ClassDecl->getName()) + strlen(IDecl->getName()) + 2);
sprintf(FullCategoryName, "%s_%s", ClassDecl->getName(), IDecl->getName());
@@ -1434,10 +1432,12 @@ void RewriteTest::RewriteObjcCategoryImplDecl(ObjcCategoryImplDecl *IDecl,
"CATEGORY_", FullCategoryName, Result);
// Protocols referenced in class declaration?
- RewriteObjcProtocolsMetaData(CDecl->getReferencedProtocols(),
- CDecl->getNumReferencedProtocols(),
- "CATEGORY",
- FullCategoryName, Result);
+ // Null CDecl is case of a category implementation with no category interface
+ if (CDecl)
+ RewriteObjcProtocolsMetaData(CDecl->getReferencedProtocols(),
+ CDecl->getNumReferencedProtocols(),
+ "CATEGORY",
+ FullCategoryName, Result);
/* struct _objc_category {
char *category_name;
@@ -1490,7 +1490,7 @@ void RewriteTest::RewriteObjcCategoryImplDecl(ObjcCategoryImplDecl *IDecl,
else
Result += "\t, 0\n";
- if (CDecl->getNumReferencedProtocols() > 0) {
+ if (CDecl && CDecl->getNumReferencedProtocols() > 0) {
Result += "\t, (struct _objc_protocol_list *)&_OBJC_CATEGORY_PROTOCOLS_";
Result += FullCategoryName;
Result += "\n";