From: Fariborz Jahanian Date: Tue, 4 Dec 2007 21:47:40 +0000 (+0000) Subject: Don't assert if objc.h not declared when rewriting. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a70711b296953bfe2fc17351f3908dcc417c404a;p=clang Don't assert if objc.h not declared when rewriting. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44580 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Driver/RewriteTest.cpp b/Driver/RewriteTest.cpp index dcd09af9b3..0e93d3176d 100644 --- a/Driver/RewriteTest.cpp +++ b/Driver/RewriteTest.cpp @@ -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 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 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)