From: Fariborz Jahanian Date: Tue, 20 Aug 2013 23:35:26 +0000 (+0000) Subject: ObjectiveC migrator. make sure to embed audited X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0f793587e1a40431e4d47157e913f354dd9cb159;p=clang ObjectiveC migrator. make sure to embed audited candidate functions in their CF_IMPLICIT_BRIDGING_ENABLED pragma before exiting the header file. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188846 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/ARCMigrate/ObjCMT.cpp b/lib/ARCMigrate/ObjCMT.cpp index a5af6c4546..37e2214233 100644 --- a/lib/ARCMigrate/ObjCMT.cpp +++ b/lib/ARCMigrate/ObjCMT.cpp @@ -64,6 +64,7 @@ public: bool MigrateLiterals; bool MigrateSubscripting; bool MigrateProperty; + unsigned FileId; OwningPtr NSAPIObj; OwningPtr Editor; FileRemapper &Remapper; @@ -86,7 +87,7 @@ public: : MigrateDir(migrateDir), MigrateLiterals(migrateLiterals), MigrateSubscripting(migrateSubscripting), - MigrateProperty(migrateProperty), + MigrateProperty(migrateProperty), FileId(0), Remapper(remapper), FileMgr(fileMgr), PPRec(PPRec), PP(PP), IsOutputFile(isOutputFile) { } @@ -799,6 +800,7 @@ AuditedType (QualType AT, bool &IsPoniter) { void ObjCMigrateASTConsumer::AnnotateImplicitBridging(ASTContext &Ctx) { if (!Ctx.Idents.get("CF_IMPLICIT_BRIDGING_ENABLED").hasMacroDefinition()) { CFFunctionIBCandidates.clear(); + FileId = 0; return; } // Insert CF_IMPLICIT_BRIDGING_ENABLE/CF_IMPLICIT_BRIDGING_DISABLED @@ -819,16 +821,13 @@ void ObjCMigrateASTConsumer::AnnotateImplicitBridging(ASTContext &Ctx) { EndLoc = Tok.getLocation(); commit.insertAfterToken(EndLoc, PragmaString); Editor->commit(commit); - + FileId = 0; CFFunctionIBCandidates.clear(); } void ObjCMigrateASTConsumer::migrateCFFunctions( ASTContext &Ctx, const FunctionDecl *FuncDecl) { - - // FileID FID = PP.getSourceManager().getFileID(FuncDecl->getLocation()); - if (FuncDecl->hasAttr()) { assert(CFFunctionIBCandidates.empty() && "Cannot have audited functions inside user " @@ -838,8 +837,11 @@ void ObjCMigrateASTConsumer::migrateCFFunctions( // Finction must be annotated first. bool Audited = migrateAddFunctionAnnotation(Ctx, FuncDecl); - if (Audited) + if (Audited) { CFFunctionIBCandidates.push_back(FuncDecl); + if (!FileId) + FileId = PP.getSourceManager().getFileID(FuncDecl->getLocation()).getHashValue(); + } else if (!CFFunctionIBCandidates.empty()) AnnotateImplicitBridging(Ctx); } @@ -938,6 +940,13 @@ void ObjCMigrateASTConsumer::HandleTranslationUnit(ASTContext &Ctx) { if (MigrateProperty) { for (DeclContext::decl_iterator D = TU->decls_begin(), DEnd = TU->decls_end(); D != DEnd; ++D) { + if (unsigned FID = + PP.getSourceManager().getFileID((*D)->getLocation()).getHashValue()) + if (FileId && FileId != FID) { + assert(!CFFunctionIBCandidates.empty()); + AnnotateImplicitBridging(Ctx); + } + if (ObjCInterfaceDecl *CDecl = dyn_cast(*D)) migrateObjCInterfaceDecl(Ctx, CDecl); else if (ObjCProtocolDecl *PDecl = dyn_cast(*D))