]> granicus.if.org Git - clang/commitdiff
Don't assert if objc.h not declared when rewriting.
authorFariborz Jahanian <fjahanian@apple.com>
Tue, 4 Dec 2007 21:47:40 +0000 (21:47 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Tue, 4 Dec 2007 21:47:40 +0000 (21:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44580 91177308-0d34-0410-b5e6-96231b3b80d8

Driver/RewriteTest.cpp

index dcd09af9b361d2320ef4e2950760a5e4f36f8094..0e93d3176d44a77a5a348b0eca46beb1d5cd380b 100644 (file)
@@ -157,6 +157,7 @@ namespace {
     void SynthMsgSendSuperStretFunctionDecl();
     void SynthGetClassFunctionDecl();
     void SynthCFStringFunctionDecl();
+    void SynthSelGetUidFunctionDecl();
       
     // Metadata emission.
     void RewriteObjcClassMetaData(ObjcImplementationDecl *IDecl,
@@ -1012,6 +1013,20 @@ void RewriteTest::RewriteObjcQualifiedInterfaceTypes(
   }
 }
 
+// SynthSelGetUidFunctionDecl - SEL sel_registerName(const char *str);
+void RewriteTest::SynthSelGetUidFunctionDecl() {
+  IdentifierInfo *SelGetUidIdent = &Context->Idents.get("sel_registerName");
+  llvm::SmallVector<QualType, 16> ArgTys;
+  ArgTys.push_back(Context->getPointerType(
+    Context->CharTy.getQualifiedType(QualType::Const)));
+  QualType getFuncType = Context->getFunctionType(Context->getObjcSelType(),
+                                                   &ArgTys[0], ArgTys.size(),
+                                                   false /*isVariadic*/);
+  SelGetUidFunctionDecl = new FunctionDecl(SourceLocation(), 
+                                           SelGetUidIdent, getFuncType,
+                                           FunctionDecl::Extern, false, 0);
+}
+
 void RewriteTest::RewriteFunctionDecl(FunctionDecl *FD) {
   // declared in <objc/objc.h>
   if (strcmp(FD->getName(), "sel_registerName") == 0) {
@@ -1251,7 +1266,8 @@ QualType RewriteTest::getSuperStructType() {
 }
 
 Stmt *RewriteTest::RewriteMessageExpr(ObjCMessageExpr *Exp) {
-  assert(SelGetUidFunctionDecl && "Can't find sel_registerName() decl");
+  if (!SelGetUidFunctionDecl)
+    SynthSelGetUidFunctionDecl();
   if (!MsgSendFunctionDecl)
     SynthMsgSendFunctionDecl();
   if (!MsgSendSuperFunctionDecl)